Rus*_*lor 7 windows postgresql performance ram
我是调试postgreSQL的新手,但已经阅读了这个标准指南:https: //wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server并使用了pgtune来获取一些配置建议.我在Windows 8上运行postgreSQL 9.3,正在进行数据分析,我的桌面有24GB RAM,一个i7 4核处理器,以及一个7200rpm hdd,带有32GB SSD缓存,使用intel智能响应.
似乎postgreSQL没有充分利用计算机,我想知道在调优方面我还需要做些什么.
pgtune对postgresql.conf进行了以下更改:
现在我运行这个复杂的自联接,在5GB表"training"上分组查询,其中包含1亿行和4个整数列:
SELECT t1.m_id, t2.m_id, count(*)
FROM training t1, training t2
WHERE t1.u_id = t2.u_id AND t1.m_id < t2.m_id
GROUP BY t1.m_id, t2.m_id
Run Code Online (Sandbox Code Playgroud)
EXPLAIN显示以下查询计划:
GroupAggregate (cost=4984590388.65..5216672318.82 rows=25381444 width=8)
-> Sort (cost=4984590388.65..5042547417.59 rows=23182811573 width=8)
Sort Key: t1.m_id, t2.m_id
-> Nested Loop (cost=0.57..676446040.92 rows=23182811573 width=8)
-> Seq Scan on training t1 (cost=0.00..1621754.12 rows=99072112 width=8)
-> Index Only Scan using training_u_id_m_id_idx on training t2 (cos=0.57..4.90 rows=191 width=8)
Index Cond: ((u_id = t1.u_id) AND (m_id > t1.m_id))
Run Code Online (Sandbox Code Playgroud)
它已经运行了8个小时,但我感兴趣的是任务经理透露的内容.PostgreSQL Server进程仅使用:
没有其他进程占用大量资源.令我惊讶的是,鉴于查询的复杂性,postgreSQL不会使用更多可用资源,是否有人知道可能会发生什么?我的pgtune价值看起来好吗?
我做了一些研究,告诉我:
shared_buffers不应该大于512MB,而应该使用该系统缓存.问题:我是否必须以某种方式告诉Windows将系统缓存分配给postgreSQL,否则如果postgreSQL请求它会自动发生?work_mem如果数据库服务器足够大,它允许数据库服务器在RAM中进行排序.问题:我的work_mem足够大吗?如何判断是在RAM还是磁盘上进行排序?我将非常感谢任何有助于加快此查询的见解.谢谢!
我认为 Effective_cache_size 听起来很小,试试 20GB。此外,对于分析工作负载,work_mem 非常小。如果您确定不会有很多连接,我会将其设置为 1GB(并且进一步降低 max_connections 可以防止您意外运行很多连接)
对于分析工作负载而言,单个 7200rpm 硬盘似乎是不够的。我不熟悉“使用英特尔智能响应的 SSD 缓存”,也许这可以帮助弥补。你能说出我们的 5 GB 表中有多少被缓存在上面吗?
您可能还想增加 Effective_io_concurrency,但不知道 SSD 缓存如何执行我不知道这会有多大好处。但它可能会有所帮助,而且可能不会受到伤害。
低内存使用是可以的。Windows 应该使用内存来缓存文件数据,这应该对 postgres 有很大帮助,但不会向 postgres 收费。
我不知道您在任务管理器中的哪个位置可以找到“3.5% 磁盘”,我找不到这样的指标。
PostgreSQL 9.3 不会将单个查询并行化到多个 CPU(在 9.6 版本中添加了并行查询),因此 15% 的 CPU 使用率与完全 CPU 限制相去甚远。
| 归档时间: |
|
| 查看次数: |
6418 次 |
| 最近记录: |