use*_*116 31 postgresql memory
我有两个相同的服务器(在硬件方面),它们都是 windows server 2008 r2 的标准安装,安装了最少的软件(基本上是我的代码和必需的东西,如 jvm 等)。
在一台服务器上,我在第二台服务器 postgresql 9.1 上运行 sql server 2005。这两个服务器的性能差异是惊人的,它在 postgresql 上太糟糕了,我很后悔我最初对我老板说“让我们使用 postgresql 而不是支付 sql server 许可证”的演讲。我们正在讨论同一命令的 30 秒与 15 分钟的差异,这不仅仅是这个命令,它是我向其抛出的任何查询或命令。它们都有几乎相同的数据(记录以不同的顺序插入),并且两个数据库具有完全相同的结构/索引等。
但我希望这只是性能调整的问题。问题是,sql server 几乎使用了服务器上所有 32 gig 的 ram,而 postgresl 什么也没使用,绝对比 gig 少,尽管我实际上还没有详细了解它。
如何让 postgresql 使用 20 多场内存?这些服务器是专门为该数据库内容构建的,因此在我看来,数据库和支持进程未使用的任何内存都被浪费了。
wil*_*ser 47
有许多可调整的常量,通过postgres.conf. 最重要的是:
max_connections: 并发会话数work_mem :用于中间结果(如哈希表)和排序的最大内存量shared_buffers 专用于“固定”缓冲区空间的内存量。effective_cache_size 假定操作系统的 LRU 缓冲区使用的内存量。random_page_cost :对磁盘寻道的相对成本的估计。max_connections不应设置得高于需要,即使空闲时连接也会消耗资源;在大多数情况下,连接会花更多的时间在里面等待而不是在外面等待。(以并发为代价)一个很好的经验法则是“主轴数量+处理器数量+X”
work_mem很棘手: is 可以应用于每个子查询,因此具有 5 的查询HASHJOINS可能会花费 5* work_mem。对于最坏的情况,您还应该考虑使用这个数量的多个会话(这也是保持max_connections低的一个原因)。
shared_buffers(恕我直言)被高估了。通常建议将其设置为所有可用“空闲”内存的大约 1/4...1/2,但我倾向于将其保持在较低水平,并设置effective_cache_size为所有可用的“空闲”内存。
random_page_cost是磁盘上查找+读取的成本。它相对于sequential_disk_cost1。random_page_cost对于现代机器和网络存储,默认值 (4)设置得太高,通常可以降低到 2 和 1.x 之间。对于 SSD 磁盘,您甚至可以将其设置为 1.0,因为在 SSD 上查找几乎是免费的。
Pau*_*ora 20
考虑使用PGTune来帮助您调整 PostgreSQL 配置。
PostgreSQL 的默认配置非常保守,该工具旨在帮助解决这种情况。该文档易于阅读,使用该工具非常简单。
请记住,没有必要使用 PGTune 的确切建议。使用它的设置并观察对 conf 文件的结果更改将使您更好地了解 PostgreSQL 的配置以及如何手动调整它。
有关 PGTune 和名为 ClusterControl 的替代工具的更多信息:PGTune Alternatives - ClusterControl PostgreSQL 配置
| 归档时间: |
|
| 查看次数: |
66609 次 |
| 最近记录: |