语言
<< 返回文章列表

GaussDB T 操作系统性能调优

2020年3月12日
华为
254


墨天轮原文链接:https://www.modb.pro/db/22492

1 参数说明

最大文件句柄数
● 系统级限制:
– 查看所有进程可以同时打开的最大文件数量:

cat /proc/sys/fs/file-max

– 永久生效修改方法:
将fs.file-max= 6553560 写入/etc/sysctl.conf,重启机器生效。

echo "fs.file-max = 65535" >> /etc/sysctl.conf

● 系统单个进程最大文件句柄数:
– 查看当前进程同时打开的文件数:

lsof -p pid |wc -l

– 查看一个进程可以同时打开的最大文件数量:

ulimit -n

– 永久生效修改方法:
将* soft nofile 65535 和 * hard nofile 65535写入配置文件/etc/security/
limits.conf。
soft nofile表示软限制,hardnofile表示硬限制,软限制要小于等于硬限制。
硬限制是实际的限制,而软限制是警告限制,它只会给出警告。

  • 代表针对所有用户,*号可以换成具体的用户名或者用户组的名称。

echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

最大线程数
● 系统级限制:
– 查看操作系统支持的最大线程数(操作系统线程ID的最大值):

cat /proc/sys/kernel/pid_max

或者

sysctl kernel.pid_max

– 查看内核所能使用的线程的最大数目:

cat /proc/sys/kernel/thread-max

– 永久生效修改方法:
在/etc/sysctl.conf中添加kernel.pid_max = 65535,重启机器生效。

echo "kernel.pid_max = 65535" >> /etc/sysctl.conf

● 用户级限制
– 查看系统限制某用户最多可运行的进程或线程数:

ulimit -u

– 永久生效修改方法:
将* soft noproc 65535 和 * hard noproc 65535写入配置文件/etc/security/
limits.conf。

echo "* soft noproc 65535" >> /etc/security/limits.conf
echo "* hard noproc 65535" >> /etc/security/limits.conf

2 大页

大页数据库配置
使用数据库参数USE_LARGE_PAGES设置数据库对大页的使用方式,可以设置TRUE/
FALSE/ONLY,默认为TRUE;
● FALSE:不使用大页,会导致实例性能下降;
● ONLY:在alloc SGA memory时,如果SGA的大小大于系统配置的hugepages
total size,mmap会报错。
● TRUE:如果SGA的大小大于系统配置的hugepages total size,会通过malloc申请
普通page,这种情况下会造成系统内存的浪费和系统性能下降。

大页原理
● 默认内存页。
● 标准大页(Huge Page):标准大页占用的内存需要重启机器才能释放。
● 透明大页(Transparent Huge Page):透明大页会引起性能抖动,对于数据库不建议开启。

说明:内存比较小的机器开启大页会导致系统整体性能的下降。

推荐配置
● 关闭透明大页:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
äw†ÝÑff -a
● 当SGA size大于8G时,且系统剩余的内存大小大于30%时(防止大页对系统的性
能影响)开启标准大页。
● 标准大页配置参考:根据SGA size计算,比SGA size/ huge page size大一些。
● sysctl -w vm.nr_hugepages=200000
● 通过/proc/sys/vm/nr_hugepages配置系统大页, 可以从/proc/meminfo中查看系

统大页的使用情况。

3 网卡通道队列

指网卡接收或发送时,可以允许几个cpu参与, 一个队列只能使用一个cpu。当未绑定
网卡多队列时,数据库可以正常使用,但是数据库的性能会有一定的下降。

判断 CPU 亲和度
通过TOP命令查看各个CPU逻辑单元的占用比,如果发现存在某些CPU已成为性能瓶
颈,而其他CPU却很空闲,往往都是软中断分配不均导致,建议调整CPU亲和度。
示例:

top - 14:57:04 up 96 days, 5:22, 26 users, load average: 0.14, 0.25, 3.91
Tasks: 1297 total, 1 running, 1289 sleeping, 7 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu8 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu9 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu10 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu11 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu12 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu13 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu14 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu15 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu16 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu17 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu18 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu19 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu20 : 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu21 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu22 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu23 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu24 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu25 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu26 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu27 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu28 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu29 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

调整 CPU 亲和度(以网卡中断为列)

调整CPU亲和度可使用方法如下所示:
● irqbalance服务 可以启用操作系统的irqbalance服务,此服务可以自动的实时优化
中断分配。这是一种比较中庸的方法,如果想追求极致,不建议使用该服务。
● 人工调整CPU亲和度。

步骤1: 停irqbalance服务,例如service irqbalance stop。

步骤2: 查看系统的中断信息,例如cat /proc/interrupts,第1列代表中断号,第1行代表CPU单元序号,表中数值代表对应CPU处理对应中断号的次数。

步骤3: 查看网卡信息。

[root@host162 ~]# ifconfi
 enp129s0f0: flags=4163<UP,broadcCAST,RUNNING,MULTICAT> mtu 1500
 inet 192.168.1.162 netmask 255.255.255.0 broadcast 192.168.1.255
 inet6 fe80::427d:fff:fe91:af74 prefixlen 64 scopeid 0x20<link>
 ether 40:7d:0f:91:af:74 txqueuelen 1000 (Ethernet)
 RX packets 628373266 bytes 269861447537 (251.3 GiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 477576504 bytes 160485683734 (149.4 GiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

可以通过enp129s0f0在上述系统中断信息查到enp129s0f0-TxRx-0 ~ enp129s0f0-
TxRx-55,说明对应网卡队列有56个。对应中断号为214~269。 而CPU0-CPU13,CPU28-41没有参与网卡中断。

步骤4 绑定中断号,例如要把56个网卡队列绑定值56个CPU,即一个CPU独立负责一个网卡中断信号。

中断号与CPU绑定关系
例如:查看1号中断CPU绑定情况
[root@host162 ~]# cat /proc/irq/1/smp_affinity
ffffffȀffffffff
CPU0 --- 000000,00000001 
CPU1 --- 000000,00000002
CPU2 --- 000000,00000004
以上数字转换二进制,每一位代表CPU序号,全f代表1号中断可以绑定所有CPU中断(运行过程中只能有一个
CPU中断,irqbalance会自动调整绑定关系)
如果要指定1号中断绑定给CPU0的话,可以修改 smp_affinity,即
echo "000000,00000001" >/proc/irq/1/smp_affinity

说明: 不启用irqbalance时,中断号只能绑定给1个CPU,如果绑定给多个,则默认绑定给低序号的CPU。

相关阅读:

1. GaussDB T 性能调优——硬件环境
https://www.modb.pro/db/22263


2. GaussDB T 性能调优——SQL问题分析之常见问题和案例分析
https://www.modb.pro/db/22261


3. GaussDB T 性能调优——SQL问题分析之CBO trace 日志
https://www.modb.pro/db/22258