windows - 在 Windows 桌面上调整 postgreSQL 以利用 24GB RAM

标签 windows performance postgresql ram

我是调优 postgreSQL 的新手,但已阅读此标准指南:https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server 并使用 pgtune 获得了一些配置建议。我在 Windows 8 上运行 postgreSQL 9.3,正在做数据分析,我的桌面有 24GB 内存、i7 四核处理器和 7200rpm 硬盘,使用英特尔智能响应的 32GB SSD 缓存。

似乎 postgreSQL 没有充分利用计算机,我想知道在调优方面我可能还需要做些什么。

pgtune 对 postgresql.conf 进行了以下更改:

  • default_statistics_target = 100
  • maintenance_work_mem = 480MB
  • constraint_exclusion = on
  • checkpoint_completion_target = 0.9
  • effective_cache_size = 2816MB
  • work_mem = 96MB
  • wal_buffers = 32MB
  • checkpoint_segments = 64
  • shared_buffers = 960MB
  • 最大连接数 = 20

现在我运行这个复杂的自连接,在具有 1 亿行和四个整数列的 5GB 表“training”上按查询分组计数:

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

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))

它已经运行了 8 个小时,但让我感兴趣的是任务管理器显示的内容。 PostgreSQL 服务器进程仅使用:

  • 15% 的中央处理器
  • 6.1% 内存(约 512MB)
  • 3.5% 磁盘

没有其他进程占用大量资源。令我惊讶的是,考虑到查询的复杂性,postgreSQL 不会使用更多的可用资源,有人知道会发生什么吗?我的 pgtune 值看起来不错吗?

我也做了一些研究,结果告诉我:

  1. 在 Windows 上,shared_buffers 不应大于 512MB,应该使用系统缓存。问题:我是否必须以某种方式告诉 Windows 将系统缓存分配给 postgreSQL,或者如果 postgreSQL 请求它会自动发生吗?
  2. work_mem 允许数据库服务器在足够大的 RAM 中进行排序。问题:我的 work_mem 足够大吗?我如何判断排序是在 RAM 中还是在磁盘上完成?

如果有任何有助于加快查询速度的见解,我将不胜感激。谢谢!

最佳答案

我认为 effective_cache_size 听起来很小,试试 20GB。此外,对于分析工作负载,work_mem 非常小。如果你确定你不会有很多连接,我会将它设置为 1GB(并且进一步降低 max_connections 将保护你不会意外地运行很多连接)

单个 7200rpm 硬盘似乎不足以满足分析工作负载。我对“SSD cache using intel smart response”不太熟悉,也许这可以帮助弥补它。你能告诉我们有多少 5 GB 的表缓存在上面吗?

您可能还想增加 effective_io_concurrency,不知道 SSD 缓存如何执行我不知道这会有多大好处。但它可能会有所帮助,而且可能不会造成伤害。

低内存使用率是可以的。 Windows 应该使用内存来缓存文件数据,这应该对 postgres 有很大帮助,但不会向 postgres 收费。

我不知道在任务管理器中哪里可以找到“3.5% 磁盘”,我找不到这样的指标。

PostgreSQL 9.3 不会将单个查询并行化到多个 CPU(9.6 版中添加了并行查询),因此 15% 的 CPU 使用率离完全 CPU 绑定(bind)不远。

关于windows - 在 Windows 桌面上调整 postgreSQL 以利用 24GB RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21660323/

相关文章:

performance - 快速硬件整数除法

sql - 标准化数组下标,使它们从 1 开始

postgresql - psycopg2execute_values 失败,supabase 中的行数超过 100 行?

c++ - 如何使用公开导出的全局 DLL 变量?

c++ - 如何在 Windows 中使用手写的 makefile 编译和构建 C++ 应用程序?

mysql - 用于在 Windows 上管理 Apache 和 MySQL 的通知区域工具

c++ - 如何完全清除Windows C++中的所有用户环境变量

linux - 多次在单个文件上进行 grep

javascript - 如何顺序加载图像?

sql - 如何使用季度末日期进行数学计算?