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

PG系统优化

zhou 2024-03-31
182

转自:Marc Beyerle “PostgreSQL: Experiences and tuning recommendations on Linux on IBM Z”

吞吐量优化

Marc Beyerle 写了一篇调优文章介绍通过步骤整体优化提升 PG 45%

PostgreSQL tuning results

1:将PostgreSQL共享缓冲区的大小增加到物理内存总量的1/4,并将有效缓存的大小提高到3/4
shared_buffer 25% 物理内存
effective_cache_size 75% 物理内存 (仅影响优化器评估执行计划)

2:对于只读工作负载,考虑关闭PostgreSQL中的autovacuum守护进程
对于写繁重的生产工作负载,保持autovacuum守护进程处于打开状态

3:启用预读可使吞吐量增加近6%,PostgreSQL在很大程度上依赖于Linux页面缓存的有效性。其他数据库自己决定哪些页面应该提前读取,并且不依赖于操作系统的提前读取功能

4:启用hugepage会使工作负载的吞吐量增加约7%,打开大页用于共享缓冲区消耗,关闭THP
vi /etc/sysctl.conf
vm.nr_hugepages=17408

5: 降低内核调度器的迁移成本使工作负载的吞吐量增加约9%
/etc/sysctl.conf
kernel.sched_migration_cost_ns=50000

响应时间优化

优化前

Throughput graph before configuration changes

优化后

Throughput graph after configuration changes

1.内核参数调整

默认值:
vm.dirty_background_ratio=10 (10% of 64GB = 6.4 GB)
vm.dirty_ratio=20 (20% of 64GB = 12.8 GB)
调整值:
vm.dirty_background_bytes=67108864 (64 MB)
vm.dirty_bytes=536870912 (512 MB)

系统尽早刷脏,能消除IO刷脏毛刺

2.调整PG参数

checkpoint_completion_target=0.9 #(0.5)  两个checkpoint之间多长时间内完成
max_wal_size=16G  #(1 G)
wal_buffers=16 MB #(-1)
synchronous_commit=off #(on)

一般性建议

1.建议至少有少量可用的交换空间,以便在内存消耗出现峰值时做好准备

2.使用Direct I/O,绕过页面缓存(对性能影响低于1%)

3.使用合适的linux内核版本

4.数据库数据文件与日志文件分开,避免IO竞争(顺序IO,随机IO分离)

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

评论