首页
首页
文章目录
  1. 简介
  2. 系统优化
    1. 修改 /etc/grub.conf
    2. 关闭内存大页 hugepage
    3. 禁用内存大页
  3. 内核优化
  4. postgres 数据层面优化
  5. 一些常用的命令

postgresql 性能调优笔记

简介

声明:本篇文章仅作postgresql数据库调优参考。

系统优化

修改 /etc/grub.conf

关闭 numa=off ,修改磁盘IO调度方式 elevator=deadline

修改方法:

1
2
3
4
5
grubby --update-kernel=ALL --args="transparent_hugepage=never" --args="elevator=deadline"
验证:
grubby --info=ALL
返回
args="ro crashkernel=auto rhgb quiet numa=off elevator=deadline"

关闭内存大页 hugepage

验证是否开启方法1:
如果以下文件不存在,则是THP已经从内核中移除。

1
/sys/kernel/mm/transparent_hugepage or /sys/kernel/mm/redhat_transparent_hugepage

验证是否开启方法2:

1
2
3
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[always] == 》表示开启

禁用内存大页

方法:
修改 /etc/rc.local

1
2
3
4
5
6
7
# vi /etc/rc.local #追加,禁用大页
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

内核优化

1
vi /etc/sysctl.conf

添加内容如下:

1
2
3
4
5
6
7
8
9
10
11
vm.swappiness = 0
kernel.shmmax=135497418752
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.ipv4.ip_local_port_range = 9000 65535
kernel.sem = 50100 64128000 50100 1280
vm.dirty_background_bytes = 102400000
vm.dirty_ratio = 80
vm.nr_hugepages = 102352
1
2
3
4
5
6
7
8
9
10
# vim /etc/security/limits.conf
# 添加下面内容
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft stack unlimited
* hard stack unlimited
* soft memlock 250000000
* hard memlock 250000000

postgres 数据层面优化

这里主要针对postgresql.conf这个文件进行修改

以下为postgresql当中的几个主要参数

1
2
3
4
5
6
7
8
9
10
max_connections = 1000              # 最大连接数
shared_buffers = 32GB # 配置物理内存的25% 假设 128GB内存 配置32GB
wal_buffers = 16MB # 主从同步块大小 日志缓存区的大小 8MB 16MB 32MB 64MB 根据自己带宽和一些综合考虑 我一般配置16MB 可以降低IO,如果遇上比较多的并发短事务,应该和commit_delay一起用
commit_delay = 0 # 事务提交后,日志写到wal log上到wal_buffer写入到磁盘的时间间隔。需要配合commit_sibling 能够一次写入多个事务,减少IO,提高性能
work_mem = 4MB # 默认为1MB 作用:指定在写入临时文件之前内部排序操作和散列表使用的内存量 该值应该小于 最大可用内存/最大连接数 以免导致OOM(out of memory) 该值最大为1GB 即使配置超过1GB postfresql也不会使用
commit_siblings = 5 # 设置触发commit_delay的并发事务数,根据并发事务多少来配置 减少IO,提高性能
checkpoint_segments = 10 # 设置wal log的最大数量数(一个log的大小为16M) 默认的48M的缓存是一个严重的瓶颈,基本上都要设置为10以上
checkpoint_completion_target = 0.5 # 表示checkpoint的完成时间要在两个checkpoint间隔时间的N%内完成 能降低平均写入的开销
fsync = on # 强制把数据同步更新到磁盘 启用后系统的IO压力很大(建议使用ssd),为了更好的测试其他配置的影响,把改参数改为off
maintenance_work_mem = 16MB # 这里定义的内存只是被VACUUM等耗费资源较多的命令调用时使用 把该值调大,能加快命令的执行

一些常用的命令

1
2
3
4
5
pg_ctl restart  # 重启
pg_basebackup -h pgsql1 -U postgres -D $PGDATA -X stream -P # 流复制
psql -U postgres # 登陆
ALTER USER postgres WITH PASSWORD 'postgres'; # 修改密码
\q # 退出

以上

End!

后面想到什么在来更新这篇文章

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫