我有一个 Postgres 数据库,我托管在具有 8 GB RAM 的四核服务器中。
在任何时候,都可能同时发生 100 次左右的读取和写入。我正在经历高 IO 等待时间。当我做“top”时,我的大多数内核都有非常高的 IO 等待 % - 50% - 70%。
我有一种感觉,我需要微调 Postgres 中的一些参数。但哪些对 IO 使用影响最大?添加更多内核是否有助于减少 IO 使用率?
为了减少磁盘 I/O 负载,您可以做的最好的事情是确保在将 RAM 分配给系统上运行的所有其他设备后,您的数据库适合 RAM。如果是这种情况,您的磁盘 I/O 将主要是提交时的 WAL 刷新,这主要是顺序 I/O。
您可以做的第二件事是解决shared_buffers
和effective_cache_size
设置。如果系统专门运行 PostgreSQL,我喜欢将 shared_buffers 设置为低,并将 Effective_cache_size 设置为高,然后从那里进行调整。如果系统也在运行其他程序,则应将 shared_buffers 设置得更高,因为它为 PostgreSQL 专门保留了 RAM。请注意,OS 磁盘缓存通常比 PostgreSQL 缓存快,但 Pg 缓存功能更全面,因此存在真正的平衡。测量,测试,重复。
要注意的第三个设置是work_mem.
此设置应小心调整,因为它是针对每个操作的。如果您将其设置得太低,连接和排序将写入磁盘。如果将其设置得太高,则会挤出可用于缓存数据的内存。同样,寻找查询性能模式并继续前进。
归档时间: |
|
查看次数: |
9113 次 |
最近记录: |