ToB企服应用市场:ToB评测及商务社交产业平台

标题: openGauss基于4路鲲鹏服务器的性能调优 [打印本页]

作者: 民工心事    时间: 2024-7-14 20:40
标题: openGauss基于4路鲲鹏服务器的性能调优
1、概述

本文主要形貌了在4路鲲鹏服务器上,通过软硬件协同优化设置达到openGauss数据库的极致性能的方法。
主要包括软硬件要求、BIOS设置、网卡设置、磁盘设置、服务器参数设置、数据库参数设置、绑核以及TPCC模型脚本优化等内容。
1.1 硬件规格


1.2 软件规格


2、服务器优化设置

2.1 BIOS设置

登录服务器管理体系,进入BIOS,举行以下设置,保存后重启:
设置项保举值菜单路径阐明Support SmmuDisabledAdvanced > MISC Config > Support SmmuSystem Memory Management UnitCPU Prefetching ConfigurationDisabledAdvanced > MISC Config > CPU Prefetching ConfigurationCPU预取,保举关闭Die InterleavingDisabledAdvanced > Memory Config > Die Interleaving控制是否使用DIE交织,保举关闭Max Payload Size512BAdvanced > PCIe Config > CPU X PCIe - Port X > Max Payload Size每次传输数据的最大单位,值越大带宽使用率越高。
其中X为具体的CPU编号 2.2 磁盘设置

本次调优中,需要用到4个 NVME 存储卡。分别用于存放 datanode 本身、xlog、2个比力大的表空间。其中用于存放 xlog 的为V5的NVME存储卡,容量3TB以上,其余为V3的NVME存储卡,容量1TB以上。
在4p单机环境下,CPU更多,并发更大,单位时间内产生的数据量更大,IO很容易成为制约性能的瓶颈,以是在条件答应的环境下,应只管使用V5的存储卡,V5的存储卡优先用于存放xlog文件。
  1. df -h | grep nvme
复制代码


2.2.1 格式化文件体系

查看 nvme 的文件体系类型,确认块大小是否为8KB(bsize=8192)。
  1. # 如查看挂载在 /data4 路径下硬盘信息
  2. xfs_info /data4
复制代码


假如不是,则将其格式化为8KB(格式化前注意数据备份)。
  1. umount /data4
  2. mkfs.xfs -b size=8192 /dev/nvme3n1 -f
  3. mount /dev/nvme3n1 /data4
复制代码
操纵完成后再次用 xfs_info 确认是否实行成功。
2.2.2 设置磁盘IO队列调治机制

  1. echo none > /sys/block/nvme0n1/queue/scheduler
  2. echo none > /sys/block/nvme1n1/queue/scheduler
  3. echo none > /sys/block/nvme2n1/queue/scheduler
  4. echo none > /sys/block/nvme3n1/queue/scheduler
复制代码
2.3 网络设置

进入华为官网 ,选择对应的版本及补丁号,如 IN500 solution 5.1.0.SPC401 ,下载 IN500_solution_5.1.0.SPC401.zip
安装hinicadm工具。
以管理员身份实行以下命令:
  1. mkdir IN500_solution_5.1.0
  2. export IN500_HOME=$(pwd)/IN500_solution_5.1.0
  3. unzip IN500_solution_5.1.0.SPC401.zip -d IN500_solution_5.1.0
  4. cd $IN500_HOME/tools/linux_arm/nic/
  5. rpm -ivh hinicadm-2.4.1.0-1.aarch64.rpm
复制代码


通过 ifconfig
命令查看使用的网络接口卡。
  1. ifconfig
复制代码
根据设置的ip确认网络接口卡名:enp71s0


查看Hi1822设备信息:
  1. hinicadm info
复制代码


可以看到小网口 enp71s0 对应的物理网卡设备名为 hinic0。
设置环境参数,以方便后续使用:
  1. export CARD_NAME=enp71s0
  2. export HARD_DEV=hinic0
复制代码
2.3.1 更换网卡固件

firmware-version 为 2.4.1.0,则无需修改。否则假如是2.5.0.0,发起更换为2.4.1.0。

2.3.2 设置停止队列


上图中第一个Combined值为网卡支持的最大停止数,第二个Combined值为当前网卡设置的停止数24。
若设置已准确,则无需实行下列步调,否则实行下列步调举行修改。

2.3.3 网络停止绑核

在4路鲲鹏服务器中,共有8个NUMA节点、256核。将每个节点的末了3个核,共24个核用作网络停止,会有比力好的优化结果。
使用以下命令查看CPU与node环境:
  1. numactl -H
复制代码


停止绑核脚本如下:
  1. export CARD_NAME=enp71s0
  2. irq_list=`cat /proc/interrupts | grep $CARD_NAME | awk {'print $1'} | tr -d ":"`
  3. irq_array_net=($irq_list)
  4. cpu_array_irq=(29 30 31 61 62 63 93 94 95 125 126 127 157 158 159 189 190 191 221 222 223 253 254 255)
  5. for (( i=0;i<24;i++ ))
  6. do
  7.         echo "${cpu_array_irq[$i]}" > /proc/irq/${irq_array_net[$i]}/smp_affinity_list
  8. done
  9. for j in ${irq_array_net[@]}
  10. do
  11.         cat /proc/irq/$j/smp_affinity_list
  12. done
复制代码
将CARD_NAME改为实际值,保存为sh脚本bind_irq.sh 并实行完成停止绑定。
  1. sh bind_irq.sh
复制代码
2.3.4 修改网卡参数

  1. ifconfig
  2. $CARD_NAME mtu 1500# 设置读写缓冲区ethtool -G $CARD_NAME rx 1024 tx 1024# 将网络分片offloading到网卡上ethtool –K $CARD_NAME tso onethtool –K $CARD_NAME lro onethtool –K $CARD_NAME gro onethtool –K $CARD_NAME gso on
复制代码
2.4 其他操纵体系设置


3、openGauss数据库设置

3.1 数据库安装与环境变量设置

(1)切换到数据库运行用户下(非root用户)。
(2)创建文件:
  1. vim ~/env.txt
复制代码
设置如下环境变量(env.txt):
  1. export GAUSSHOME=/home/my_user/package  # openGauss 的安装目录
  2. export LD_LIBRARY_PATH=$GAUSSHOME/lib
  3. export PATH=$GAUSSHOME/bin:$PATH
  4. export DATA_NODE=/xxx/data        # 数据库节点路径
  5. export XLOG=xxx/pg_xlog # 存放xlog的路径
  6. export TABLESPACE2=xxx/tablespace2 # 表空间路径2
  7. export TABLESPACE3=xxx/tablespace3 # 表空间路径3
  8. export DATA_BACK=xxx/data_back # 数据备份路径
复制代码
实行命令使环境变量生效
  1. source ~/env.txt
复制代码
注意:

(3)安装数据库
从 openGauss官网 下载安装包,按官网文档举行安装到 $GAUSSHOME 路径。
安装好后,初始化数据库节点到 $DATA_NODE 路径下。
3.1 修改pg_hpa.conf

在文件末尾增加以下内容,
  1. host tpcc1000 tpcc_bot xxx.xxx.xxx.xxx/32 sha256
复制代码
其中,

3.2 修改postgersql.conf

本节列举openGauss的主要GUC参数设置。主要注意事项如下:

参考设置如下,参数具体含义可以在openGauss官网查阅:
  1. max_connections = 4096
  2. allow_concurrent_tuple_update = true
  3. audit_enabled = off
  4. cstore_buffers =16MB
  5. enable_alarm = off
  6. enable_codegen = false
  7. enable_data_replicate = off
  8. full_page_writes  = off
  9. max_files_per_process = 100000
  10. max_prepared_transactions = 2048
  11. use_workload_manager = off
  12. wal_buffers = 1GB
  13. work_mem = 1MB
  14. transaction_isolation = 'read committed'
  15. default_transaction_isolation = 'read committed'
  16. synchronous_commit = on
  17. fsync  = on
  18. maintenance_work_mem = 2GB
  19. autovacuum = on
  20. autovacuum_mode = vacuum
  21. autovacuum_vacuum_cost_delay =10
  22. update_lockwait_timeout =20min
  23. enable_mergejoin = off
  24. enable_nestloop = off
  25. enable_hashjoin = off
  26. enable_bitmapscan = on
  27. enable_material = off
  28. wal_log_hints = off
  29. log_duration = off
  30. checkpoint_timeout = 15min
  31. autovacuum_vacuum_scale_factor = 0.1
  32. autovacuum_analyze_scale_factor = 0.02
  33. enable_save_datachanged_timestamp =FALSE
  34. log_timezone = 'PRC'
  35. timezone = 'PRC'
  36. lc_messages = 'C'
  37. lc_monetary = 'C'
  38. lc_numeric = 'C'
  39. lc_time = 'C'
  40. enable_double_write = on
  41. enable_incremental_checkpoint = on
  42. enable_opfusion = on
  43. numa_distribute_mode = 'all'
  44. track_activities = off
  45. enable_instr_track_wait = off
  46. enable_instr_rt_percentile = off
  47. track_sql_count = off
  48. enable_instr_cpu_timer = off
  49. plog_merge_age = 0
  50. session_timeout = 0
  51. enable_instance_metric_persistent = off
  52. enable_logical_io_statistics = off
  53. enable_user_metric_persistent =off
  54. enable_xlog_prune = off
  55. enable_resource_track = off
  56. enable_thread_pool = on
  57. thread_pool_attr = '696,8,(cpubind:1-28,32-60,64-92,96-124,128-156,160-188,192-220,224-252)'
  58. enable_partition_opfusion=on       
  59. dirty_page_percent_max = 0.1
  60. candidate_buf_percent_target = 0.7
  61. checkpoint_segments =10240
  62. advance_xlog_file_num = 100
  63. autovacuum_max_workers = 20
  64. autovacuum_naptime = 5s
  65. bgwriter_flush_after = 256kB
  66. data_replicate_buffer_size = 16MB
  67. enable_stmt_track = off
  68. remote_read_mode=non_authentication
  69. wal_level = archive
  70. hot_standby = off
  71. hot_standby_feedback = off
  72. client_min_messages = ERROR
  73. log_min_messages = FATAL
  74. enable_asp = off
  75. enable_bbox_dump = off
  76. enable_ffic_log = off
  77. wal_keep_segments = 1025
  78. wal_writer_delay = 100
  79. local_syscache_threshold = 40MB
  80. sql_beta_feature = 'partition_opfusion'
  81. pagewriter_thread_num = 2
  82. max_redo_log_size=400GB
  83. walwriter_cpu_bind = 0
  84. undo_zone_count=0
  85. gs_clean_timeout =0
  86. pagewriter_sleep = 30
  87. incremental_checkpoint_timeout=5min
  88. xloginsert_locks=8
  89. walwriter_sleep_threshold = 50000
  90. log_hostname = off
  91. vacuum_cost_limit = 10000
  92. instr_unique_sql_count=0
  93. track_counts = on
  94. bgwriter_flush_after = 32
  95. enable_seqscan = off
  96. enable_beta_opfusion=on
  97. enable_global_syscache=off
  98. enable_ustore = off
  99. enable_cachedplan_mgr=off
  100. shared_buffers = 450GB
  101. enable_page_lsn_check = off
  102. max_io_capacity = 4GB
  103. light_comm = on
  104. enable_indexscan_optimization = on
  105. time_record_level = 1
  106. listen_addresses = '?'
  107. port = ?
  108. bgwriter_delay = 1s
  109. checkpoint_segments=10000
  110. # 在生成数据阶段使用30,在跑TPCC阶段改为60000
  111. wal_file_init_num = 30
  112. # wal_file_init_num = 60000
复制代码
3.3 创建压测数据库

(1)用绑核方式启动
-C参数指定绑核列表,参数与openGauss的线程池绑定参数一致。
  1. numactl -C 1-28,32-60,64-92,96-124,128-156,160-188,192-220,224-252 gs_ctl start -D $datadir  -Z single_node
复制代码
(2)创建数据库
登录数据库,创建用于压测的用户及数据库。
注意与前面在pg_hba.conf设置的参数保持一致。
  1. create user tpcc_bot with sysadmin identified by 'my_password@123';
  2. create database tpcc1000 encoding='UTF-8' owner=tpcc_bot;
复制代码
完成后退出登录。
4、Benchmark设置

4.1 Benchmark 运行环境

用于运行Benchmark压测的服务器不需要很高的设置,只要包管不会成为瓶颈点即可。
本文所使用的客户端服务器设置为2Taishan 200服务器,CPU为Kunpeng-920 ARM aarch64(2socket*64core),内存765GB。
体系设置部分可以参考第二节《服务器优化设置》举行设置,其中停止设置保举为:最大停止数设置为64,使用停止数设置为48。
Benchmark-sql-5.0软件的安装可以参考 此文 ,本文不再赘述。
4.2 修改数据天生脚本

安装好Benchmark-sql-5.0后,进入运行路径 benchmarksql-5.0/run。

4.3 运行参数设置

进入路径 benchmarksql-5.0/run,复制一份设置文件并修改props_4p_5min.og,作为预热5分钟时使用。
  1. cp props.pg props_4p_5min.og
  2. vim props_4p_5min.og
复制代码
props_4p_5min.og:将ip、port、my_db_user_name、my_db_user_name改为实际值。
  1. db=postgres
  2. driver=org.postgresql.Driver
  3. conn=jdbc:postgresql://ip:port/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
  4. user=my_db_user_name
  5. password=my_db_user_name
  6. warehouses=1000
  7. loadWorkers=80
  8. terminals=812
  9. //To run specified transactions per terminal- runMins must equal zero
  10. runTxnsPerTerminal=0
  11. //To run for specified minutes- runTxnsPerTerminal must equal zero
  12. runMins=5
  13. //Number of total transactions per minute
  14. limitTxnsPerMin=0
  15. //Set to true to run in 4.x compatible mode. Set to false to use the
  16. //entire configured database evenly.
  17. terminalWarehouseFixed=false
  18. //The following five values must add up to 100
  19. //The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
  20. newOrderWeight=45
  21. paymentWeight=43
  22. orderStatusWeight=4
  23. deliveryWeight=4
  24. stockLevelWeight=4
复制代码
修改完成后保存,再复制一份为 props_4p_60min.og,并将 runMins 的值改为60,作为跑1小时TPCC使用。
  1. cp props_4p_5min.og props_4p_60min.og
  2. vim props_4p_60min.og
复制代码
  1. db=postgres
  2. driver=org.postgresql.Driver
  3. conn=jdbc:postgresql://ip:port/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
  4. user=my_db_user_name
  5. password=my_db_user_name
  6. warehouses=1000
  7. loadWorkers=80
  8. terminals=812
  9. //To run specified transactions per terminal- runMins must equal zero
  10. runTxnsPerTerminal=0
  11. //To run for specified minutes- runTxnsPerTerminal must equal zero
  12. runMins=60
  13. //Number of total transactions per minute
  14. limitTxnsPerMin=0
  15. //Set to true to run in 4.x compatible mode. Set to false to use the
  16. //entire configured database evenly.
  17. terminalWarehouseFixed=false
  18. //The following five values must add up to 100
  19. //The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
  20. newOrderWeight=45
  21. paymentWeight=43
  22. orderStatusWeight=4
  23. deliveryWeight=4
  24. stockLevelWeight=4
复制代码
5、压测

5.1 数据天生

进入benchmark的run目次下,实行以下命令天生数据:
  1. numactl -C 0-19,32-51,64-83,96-115 ./runDatabaseBuild.sh props_4p_5min.og
复制代码
任务竣事后,待数据全部落盘,stop数据库。
将postgresql.conf 的 wal_file_init_num 参数改为 60000。
  1. echo "wal_file_init_num = 60000" >> $DATA_NODE/postgresql.conf
复制代码
5.2 数据备份

  1. cp -r $DATA_NODE $DATA_BACK
复制代码
5.3 数据分盘

  1. mv $DATA_NODE/pg_xlog $XLOG
  2. mv $DATA_NODE/pg_location/tablespace2 $TABLESPACE2
  3. mv $DATA_NODE/pg_location/tablespace3 $TABLESPACE3
  4. ln -svf $XLOG $DATA_NODE/pg_xlog
  5. ln -svf $TABLESPACE2 $DATA_NODE/pg_location/tablespace2
  6. ln -svf $TABLESPACE3 $DATA_NODE/pg_location/tablespace3
复制代码
5.4 以preferred方式绑核启动

(1)查看xlog盘对应的NUMA节点
比方 xlog 对应nvme0,则使用如下命令查看:
  1. cat /sys/class/nvme/nvme0/device/numa_node
复制代码

如上图所示,结果为0,阐明xlog盘对应的NUMA节点为0节点。
(2)绑核启动
通过以下命令启动openGauss数据库。
  1. numactl -C 1-28,32-60,64-92,96-124,128-156,160-188,192-220,224-252 --preferred=0 gs_ctl start -D $datadir  -Z single_node
复制代码
其中,

数据库启动成功后,通过以下命令查看numa的节点内存分配,将可以看到,node 0 剩余的内存是比其他节点要少的,阐明preferred参数设置生效,否则没有生效,可能会导致在差异的测试次数中大幅波动。


5.5 预热

在压测端实行以下命令举行5分钟预热:
  1. numactl -C 0-19,32-51,64-83,96-115 ./runBenchmark.sh props_4p_5min.og
复制代码
通过htop命令查看CPU环境,前面几分钟如下则正常,后面几分钟由于在初始化xlog文件,会降落到60%左右,属于正常现象。


预热5分钟 TPCC约为185万。


5.6正式压测

预热5分钟竣事再过10分钟,实行以下命令正式压测,终极TPCC达到230万以上。
  1. numactl -C 0-19,32-51,64-83,96-115 ./runBenchmark.sh props_4p_60min.og
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4