VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

设置内核参数

前提条件: 当您需要性能测试时可设置内核参数。

步骤1 以root用户登录操作系统。

步骤2 (可选)设置内核参数(逐一设置)。

注:您还可以直接执行步骤3,进行批量设置内核参数。

  • 设置fs.aio-max-nr参数,该参数表示可以拥有的异步IO请求数目,推荐值:1048576。

    sysctl fs.aio-max-nr='1048576'
    
  • 设置file-max参数,该参数表示每次登录会话可以打开的文件数。

    sysctl fs.file-max='76724600'
    
  • 设置kernel.sem参数,该参数包含4个参数(排序为SEMMSL、SEMMNS、SEMOPM和MNI)。

    • SEMMSL:每个信号量set中信号量最大个数,最小250。

    • SEMMNS:Linux系统中信号量最大个数,至少32000,等于SEMMSL*SEMMNI。

    • SEMOPM:SEMOP系统调用允许的信号量最大个数,至少100;或者等于SEMMSL。

    • SEMMNI:Linux系统信号量set最大个数,最少128。

      sysctl kernel.sem='4096 2097152000 4096 512000'
      
  • 设置kernel.shmall参数,该参数用于控制共享内存页数,等于系统内存(建议设置为80%,单位:byte)/PAGE_SIZE(getconf PAGE_SIZE获取),该参数设置太小有可能导致数据库启动报错。示例:物理内存为128GB,PAGE大小为4096,则kernel.shmall=128*1024*1024*1024*0.84096=26843545。

    sysctl kernel.shmall='26843545'
    
  • 设置kernel.shmmax参数,该参数表示最大单个共享内存段大小(建议为大于shared_buffer值), 等于系统内存*0.5,单位:byte。示例:物理内存为128GB,则:kernel.shmmax=128*1024*1024*1024*0.5=68719476736。

    sysctl kernel.shmmax='68719476736'
    
  • 设置kernel.shmmni参数,该参数系统范围内共享内存段的最大数量,默认值: 4096。

    sysctl kernel.shmmni='4096'
    
  • 设置net.core.netdev_max_backlog参数,该参数表示允许送到队列的数据包的最大数目。

    sysctl net.core.netdev_max_backlog='10000'
    
  • 设置net.core.rmem_default参数,该参数表示预留用于接收缓冲的内存默认值,单位:byte。

    sysctl net.core.rmem_default='262144'
    
  • 设置net.core.rmem_max参数,该参数表示预留用于接收缓冲的内存最大值,单位:byte。

    sysctl net.core.rmem_max='4194304'
    
  • 设置net.core.wmem_default参数,该参数表示预留用于发送缓冲的内存默认值,单位:byte。

    sysctl net.core.wmem_default='262144'
    
  • 设置net.core.wmem_max参数,该参数表示预留用于发送缓冲的内存最大值,单位:byte。

    sysctl net.core.wmem_max='4194304'
    
  • 设置net.core.somaxconn参数,该参数表示socket监听的backlog(队列)上限,默认值:128。

    sysctl net.core.somaxconn='4096'
    
  • 设置**net.ipv4.tcp_fin_timeout **参数,该参数表示FIN_WAIT_2状态的超时时长,单位:秒。

    sysctl net.ipv4.tcp_fin_timeout='5'
    
  • 设置vm.dirty_background_bytes参数,该参数表示触发回刷的脏页数据量,超过该参数,脏页刷到磁盘,单位:btye。

    sysctl vm.dirty_background_bytes='409600000'
    
  • 设置vm.dirty_expire_centisecs参数,该参数表示脏数据的过期时间,超过该时间系统会将脏数据回写到磁盘上,单位:百分之一秒,以下命令中3000代表30秒。

    sysctl vm.dirty_expire_centisecs='3000'
    
  • 设置vm.dirty_ratio参数,该参数表示脏数据百分比,超过这个百分比,新的IO请求将会被阻挡,直到脏数据被写进磁盘。

    sysctl vm.dirty_ratio='80'
    
  • 设置vm.dirty_writeback_centisecs参数,该参数表示多长时间,后台刷脏页进程会被唤醒一次,检查是否有缓存需要清理。单位:百分之一秒,以下命令中100代表1秒。

    sysctl vm.dirty_writeback_centisecs='100'
    
  • 设置vm.overcommit_memory参数,该参数表示内存分配策略,可选值:0、1和2。

    • 0:表示内核将检查是否有足够的可用内存供应用进程使用,如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

    • 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

    • 2:表示内核允许分配超过所有物理内存和交换空间总和的内存。

      sysctl vm.overcommit_memory='0'
      
  • 设置vm.swappiness参数,该参数表示激活交换之前可用内存的百分比。数值越低,使用的交换越少,并且物理内存中保留的内存页越多,默认值:60。

    sysctl vm.swappiness='60'
    
  • 设置net.ipv4.ip_local_port_range参数,该参数可以设置本地动态端口分配范围,防止占用监听端口。

    sysctl net.ipv4.ip_local_port_range='40000 65535'
    
  • 设置fs.nr_open参数,该参数表示单个进程可分配的最大文件数,单位:个。对于有很多对象(表、视图、索引、序列和物化视图等)的PostgreSQL数据库,建议设置为2000万。

    sysctl fs.nr_open='20000000'
    

步骤3 设置内核参数(批量设置),执行 vi /etc/sysctl.conf 将以下内核信息写入sysctl.conf文件末尾,保存退出。

fs.aio-max-nr=1048576
fs.file-max= 76724600
kernel.sem=4096 2097152000 4096 512000
kernel.shmall=26843545
kernel.shmmax=68719476736
kernel.shmmni = 4096
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 4194304
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 5
vm.dirty_background_bytes = 409600000
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 80
vm.dirty_writeback_centisecs = 100
vm.overcommit_memory = 0
vm.swappiness= 60
net.ipv4.ip_local_port_range = 40000 65535
fs.nr_open = 20000000

步骤4 重载配置,使其生效。

sysctl -p