暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何调优PostgreSQL GUC参数

原创 小小亮 2020-08-11
3026

本文讨论了可用于PostgreSQL调整的GUC参数,以及如何配置它们以提高性能。

  • shared_buffers(整数)
  • work_mem(整数)
  • autovacuum
  • Effective_cache_size
  • max_parallel_worker
  • maintenance_work_mem(整数)

在本文中,我们将回顾一些对PostgreSQL调优有用的不同GUC(全局统一配置设置)的参数。这些参数位于postgresql.conf文件(位于$ PGDATA目录中)下,该文件管理数据库服务器的配置和性能。

shared_buffers(整数)

shared_buffers参数确定服务器专用于缓存数据的内存量。在postgresql.conf文件中设置的此参数的默认值为:

shared_buffers = 128MB

该值应设置为计算机总RAM的15%到25%。例如,如果您的计算机RAM大小为32 GB,则shared_buffers的建议值为8 GB。

更改后需要重新启动服务器。

work_mem(整数)

work_mem参数实际上提供了内部排序操作和哈希表在写入临时磁盘文件之前要使用的内存量。排序操作用于ORDER BY,DISTINCT和MERGE JOINS操作。哈希表用于哈希联接和基于哈希的聚合中。

在postgresql.conf文件中设置的此参数的默认值为:

work_mem = 4MB

设置work_mem参数的正确值可以减少磁盘交换,因此查询更快。

我们可以使用以下公式来计算数据库服务器的work_mem值:

总RAM * 0.25 /最大连接数

Max_connections是GUC参数之一,它指定到数据库服务器的最大并发连接数。默认情况下,其值设置为100个连接。

我们还可以直接将work_mem分配给角色:

postgres=# alter user test set work_mem='4GB';
ALTER ROLE

autovacuum

默认情况下,在postgresql.conf文件中启用此GUC参数,建议使用此设置。如果将此参数设置为OFF,则服务器中将不会进行自动清理,但是如果禁用该参数,则系统将启动自动清理进程以防止事务ID环绕。

更改postgresql.conf文件中的此参数值后,需要重新启动数据库服务器。

其他与真空相关的GUC参数包括:

autovacuum_max_workers
此参数将设置并行运行多少个工作进程。默认情况下为3。如果存在大量具有频繁更新或删除操作的表,则需要将该值设置为较高。

autovacuum_naptime
此参数指定在任何给定数据库上自动抽真空运行之间的最小延迟。默认值为1分钟。如果有60个数据库,则必须每秒钟启动一次自动清理过程。在这种情况下,建议增加该值,以免自动真空启动太频繁。

autovacuum_vacuum_threshold
此参数指定在任何一个表中触发VACUUM所需的最小更新或删除的元组数。默认值是50元组,对于表来说是非常低的

autovacuum_analyze_threshold
此参数指定在任何一个表中触发ANALYZE所需的最小插入,更新或删除的元组数。缺省值为50元组,对于表来说这是非常低的。

autovacuum_vacuum_scale_factor
此参数指定表中需要更改以启动自动清理过程的百分比。默认值为0.2(即表大小的20%),而autovacuum_analyze_scale_factor为0.1(即表大小的10%)。此值对于小型表是合适的,但如果表大小较大(即150 GB),则存在在自动清理过程开始之前,将有30 GB的死元组。但是,如果有少量的大表,那么我们可以在表级别进行设置,而不用修改postgresql.conf文件:

postgres=# alter table test set (autovacuum_vacuum_scale_factor=0.1);
ALTER TABLE

有关其他自动真空参数,请参考PostgreSQL在线文档:
https://www.postgresql.org/docs/11/runtime-config-autovacuum.html

Effective_cache_size

effective_cache_size参数估计操作系统和数据库本身可用于磁盘缓存的内存量。PostgreSQL查询计划器决定它是否适合RAM。索引扫描最有可能针对较高的值,否则,如果值较低,则将使用顺序扫描。

建议将有效缓存大小设置为计算机总RAM的50%。

max_parallel_worker

max_parallel_worker参数指定执行并行操作的最大工作程序数,这取决于GUC参数max_worker_processes中指定的值(该值指定系统可以支持的最大后台进程数;默认值为8)。

maintenance_work_mem(整数)

maintenance_work_mem参数本质上提供了维护操作(如VACUUM,CREATE INDEX,ALTER TABLE和添加外键操作)要使用的最大内存量。在postgresql.conf文件中设置的此参数的默认值为:

maintenance_work_mem = 64MB

建议将此值设置为高于work_mem,这可能会提高吸尘性能。通常,应为:
总内存* 0.05

请参阅PostgreSQL调整Wiki页面以获取更多详细信息:
https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

文章来源:https://www.enterprisedb.com/postgres-tutorials

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论