openGauss基于4路鲲鹏服务器的性能调优

打印 上一主题 下一主题

主题 538|帖子 538|积分 1614

1、概述

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



  • 服务器: TaiShan 200(Model 2480)
  • CPU: Kunpeng-920 ARM aarch64(4 Sockets * 64 Cores)
  • 内存: 1TB
  • 网卡: 万兆网卡Hi1822 Family(4*25GE),时延 < 0.1ms
  • 磁盘: NVME * 4,Model Number:HWE56P433T2M005N(V5 NVME卡)、HWE36P43016M000N(V3 NVME卡),其中V5 NVME卡 1MB顺序写带宽达到2600MB以上
1.2 软件规格



  • 操纵体系: openEuler 20.03 (LTS)
  • 数据库软件: openGauss 5.0.0 或其他更高Release版
  • 压测软件: BenchmarkSQL-5.0
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 更换网卡固件


  • 查看固件版本。
    1. ethtool -i $CARD_NAME
    复制代码


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

  • 更换固件步调:


  • (2)更换固件。
    1. # 命令格式为:
    2. hinicadm updatefw -i <物理网卡设备名> -f <固件文件路径>
    3. # 例如:
    4. hinicadm updatefw -i $HARD_DEV -f $IN500_HOME/firmware/update_bin/cfg_data_nic_prd_1h_4x25G/Hi1822_nic_prd_1h_4x25G.bin
    复制代码
  • (3)重启服务器,确认firmware-version 是否为 2.4.1.0。
2.3.2 设置停止队列



  • (1)查看当前网卡的停止队列设置
    IN500_solution_5.1.0支持设置最大停止数为16或64,在4P单机调优场景下,我们需要将停止数设置为24,以是需要将最大停止数设置为64。
    通过以下命令查看当前的设置:
    1. ethtool -l $CARD_NAME
    复制代码


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


  • (2)修改最大设置
    1. # 命令格式:
    2. $IN500_HOME/tools/linux_arm/nic/config/hinicconfig <物理网卡设备名> -f <多中断队列配置文件>
    3. # 例如:
    4. cd $IN500_HOME/tools/linux_arm/nic/config/
    5. ./hinicconfig $HARD_DEV -f ./std_sh_4x25ge_dpdk_cfg_template0.ini # 64中断,本文场景下执行此命令
    6. # ./hinicconfig $HARD_DEV -f ./std_sh_4x25ge_dpdk_cfg_template0.ini # 16中断
    复制代码
  • (3)修改当前设置
    1. ethtool -L $CARD_NAME combined 24
    复制代码
  • (4)再次实行步调(1)举行设置确认。
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 其他操纵体系设置



  • 关闭不必要的服务
    1. service sysmonitor stop
    2. service irqbalance stop
    3. service rsyslog stop
    4. service firewalld stop
    复制代码
  • 关闭透明大页
    1. echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
    2. echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
    复制代码
  • 取消CPU平衡
    1. echo 0 > /proc/sys/kernel/numa_balancing
    复制代码
  • 调解内存脏页回收战略
    1. echo 3000 > /proc/sys/vm/dirty_expire_centisecs
    2. echo 500 > /proc/sys/vm/dirty_writeback_centisecs
    3. echo 60 > /proc/sys/vm/dirty_ratio
    4. echo 5 > /proc/sys/vm/dirty_background_ratio
    复制代码
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
复制代码
注意:


  • DATA_NODE、XLOG、TABLESPACE2、TABLESPACE3 分别放到4个差异的 nvme 盘。
  • XLOG发起放到最好的 nvme 盘。
  • 以上路径不要同时存放其他数据,避免后续恢复数据时被删除。
(3)安装数据库
从 openGauss官网 下载安装包,按官网文档举行安装到 $GAUSSHOME 路径。
安装好后,初始化数据库节点到 $DATA_NODE 路径下。
3.1 修改pg_hpa.conf

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


  • tpcc1000 为后面创建的数据库名。
  • tpcc_bot 为后面创建的数据库用户名。
  • xxx.xxx.xxx.xxx 改为benchmark压测服务器的IP。
3.2 修改postgersql.conf

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


  • 在极限性能场景下,关闭用于调试等的无关功能。
  • 打开 synchronous_commit、fsync参数保障数据安全落盘。
  • 开启线程池,使用绑核设置。绑核编号中除去用于网络停止的核以及用于处理xlog的核。
    enable_thread_pool = on thread_pool_attr = '696,8,(cpubind:1-28,32-60,64-92,96-124,128-156,160-188,192-220,224-252)'
  • xlog落盘压力较大,干系线程单独绑核。
  • xlog天生速率非常大,调解回收干系参数加快回收速率。
  • 打开autovacuum。
  • listen_addresses、port需要根据实际环境举行修改。
  • wal_file_init_num 在天生数据阶段使用30,在跑TPCC阶段改为60000。
参考设置如下,参数具体含义可以在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。


  • (1)修改 sql.common/tableCreates.sql,组要修改如下:

    • 增加2个表空间,bmsql_customer分配到 example2,bmsql_stock分配到 example3。
    • 删除无用序列 bmsql_hist_id_seq。
    • 修改表创建语句,给主要的表增加 FACTOR属性。
    • 增加分区设置。
    具体如下:
    1. CREATE TABLESPACE example2 relative location 'tablespace2';
    2. CREATE TABLESPACE example3 relative location 'tablespace3';
    3. create table bmsql_config (
    4.   cfg_name    varchar(30),
    5.   cfg_value   varchar(50)
    6. );
    7. create table bmsql_warehouse (
    8.   w_id        integer   not null,
    9.   w_ytd       decimal(20,2),
    10.   w_tax       decimal(4,4),
    11.   w_name      varchar(10),
    12.   w_street_1  varchar(20),
    13.   w_street_2  varchar(20),
    14.   w_city      varchar(20),
    15.   w_state     char(2),
    16.   w_zip       char(9)
    17. ) WITH (FILLFACTOR=80);
    18. create table bmsql_district (
    19.   d_w_id       integer       not null,
    20.   d_id         integer       not null,
    21.   d_ytd        decimal(20,2),
    22.   d_tax        decimal(4,4),
    23.   d_next_o_id  integer,
    24.   d_name       varchar(10),
    25.   d_street_1   varchar(20),
    26.   d_street_2   varchar(20),
    27.   d_city       varchar(20),
    28.   d_state      char(2),
    29.   d_zip        char(9)
    30. ) WITH (FILLFACTOR=80);
    31. create table bmsql_customer (
    32.   c_w_id         integer        not null,
    33.   c_d_id         integer        not null,
    34.   c_id           integer        not null,
    35.   c_discount     decimal(4,4),
    36.   c_credit       char(2),
    37.   c_last         varchar(16),
    38.   c_first        varchar(16),
    39.   c_credit_lim   decimal(12,2),
    40.   c_balance      decimal(12,2),
    41.   c_ytd_payment  decimal(12,2),
    42.   c_payment_cnt  integer,
    43.   c_delivery_cnt integer,
    44.   c_street_1     varchar(20),
    45.   c_street_2     varchar(20),
    46.   c_city         varchar(20),
    47.   c_state        char(2),
    48.   c_zip          char(9),
    49.   c_phone        char(16),
    50.   c_since        timestamp,
    51.   c_middle       char(2),
    52.   c_data         varchar(500)
    53. ) WITH (FILLFACTOR=80) tablespace example2;
    54. -- create sequence bmsql_hist_id_seq;
    55. create table bmsql_history (
    56.   hist_id  integer,
    57.   h_c_id   integer,
    58.   h_c_d_id integer,
    59.   h_c_w_id integer,
    60.   h_d_id   integer,
    61.   h_w_id   integer,
    62.   h_date   timestamp,
    63.   h_amount decimal(6,2),
    64.   h_data   varchar(24)
    65. ) WITH (FILLFACTOR=80);
    66. create table bmsql_new_order (
    67.   no_w_id  integer   not null,
    68.   no_d_id  integer   not null,
    69.   no_o_id  integer   not null
    70. ) WITH (FILLFACTOR=80);
    71. create table bmsql_oorder (
    72.   o_w_id       integer      not null,
    73.   o_d_id       integer      not null,
    74.   o_id         integer      not null,
    75.   o_c_id       integer,
    76.   o_carrier_id integer,
    77.   o_ol_cnt     integer,
    78.   o_all_local  integer,
    79.   o_entry_d    timestamp
    80. ) WITH (FILLFACTOR=80);
    81. create table bmsql_order_line (
    82.   ol_w_id         integer   not null,
    83.   ol_d_id         integer   not null,
    84.   ol_o_id         integer   not null,
    85.   ol_number       integer   not null,
    86.   ol_i_id         integer   not null,
    87.   ol_delivery_d   timestamp,
    88.   ol_amount       decimal(6,2),
    89.   ol_supply_w_id  integer,
    90.   ol_quantity     integer,
    91.   ol_dist_info    char(24)
    92. ) WITH (FILLFACTOR=80) tablespace example2
    93. partition by RANGE(ol_w_id)
    94. (
    95.   partition bmsql_order_line_p1 values less than (126),
    96.   partition bmsql_order_line_p2 values less than (251),
    97.   partition bmsql_order_line_p3 values less than (376),
    98.   partition bmsql_order_line_p4 values less than (501),
    99.   partition bmsql_order_line_p5 values less than (626),
    100.   partition bmsql_order_line_p6 values less than (751),
    101.   partition bmsql_order_line_p7 values less than (876),
    102.   partition bmsql_order_line_p8 values less than (1001)
    103. );
    104. create table bmsql_item (
    105.   i_id     integer      not null,
    106.   i_name   varchar(24),
    107.   i_price  decimal(5,2),
    108.   i_data   varchar(50),
    109.   i_im_id  integer
    110. );
    111. create table bmsql_stock (
    112.   s_w_id       integer       not null,
    113.   s_i_id       integer       not null,
    114.   s_quantity   integer,
    115.   s_ytd        integer,
    116.   s_order_cnt  integer,
    117.   s_remote_cnt integer,
    118.   s_data       varchar(50),
    119.   s_dist_01    char(24),
    120.   s_dist_02    char(24),
    121.   s_dist_03    char(24),
    122.   s_dist_04    char(24),
    123.   s_dist_05    char(24),
    124.   s_dist_06    char(24),
    125.   s_dist_07    char(24),
    126.   s_dist_08    char(24),
    127.   s_dist_09    char(24),
    128.   s_dist_10    char(24)
    129. ) WITH (FILLFACTOR=80) tablespace example3
    130. partition by RANGE(s_w_id)
    131. (
    132.   partition bmsql_stock_p1 values less than (126),
    133.   partition bmsql_stock_p2 values less than (251),
    134.   partition bmsql_stock_p3 values less than (376),
    135.   partition bmsql_stock_p4 values less than (501),
    136.   partition bmsql_stock_p5 values less than (626),
    137.   partition bmsql_stock_p6 values less than (751),
    138.   partition bmsql_stock_p7 values less than (876),
    139.   partition bmsql_stock_p8 values less than (1001)
    140. );
    复制代码

  • (2)修改 sql.common/indexCreates.sql,改为如下:
    1. alter table bmsql_warehouse add constraint bmsql_warehouse_pkey
    2.   primary key (w_id);
    3. alter table bmsql_district add constraint bmsql_district_pkey
    4.   primary key (d_w_id, d_id);
    5. alter table bmsql_customer add constraint bmsql_customer_pkey
    6.   primary key (c_w_id, c_d_id, c_id);
    7. create index bmsql_customer_idx1
    8.   on  bmsql_customer (c_w_id, c_d_id, c_last, c_first);
    9. alter table bmsql_oorder add constraint bmsql_oorder_pkey
    10.   primary key (o_w_id, o_d_id, o_id);
    11. create index bmsql_oorder_idx1
    12.   on  bmsql_oorder (o_w_id, o_d_id, o_c_id);
    13. alter table bmsql_new_order add constraint bmsql_new_order_pkey
    14.   primary key (no_w_id, no_d_id, no_o_id) using index tablespace example2;
    15. alter table bmsql_order_line add constraint bmsql_order_line_pkey
    16.   primary key (ol_w_id, ol_d_id, ol_o_id, ol_number);
    17. alter table bmsql_stock add constraint bmsql_stock_pkey
    18.   primary key (s_w_id, s_i_id);
    19. alter table bmsql_item add constraint bmsql_item_pkey
    20.   primary key (i_id);
    复制代码
  • (3)修改数据天生脚本 runDatabaseBuild.sh,具体如下:
    1. #!/bin/sh
    2. Cwd=`cd $(dirname $0);pwd`
    3. if [ $# -lt 1 ] ; then
    4.     echo "usage: $(basename $0) PROPS [OPT VAL [...]]" >&2
    5.     exit 2
    6. fi
    7. PROPS="$1"
    8. shift
    9. if [ ! -f "${PROPS}" ] ; then
    10.     echo "${PROPS}: no such file or directory" >&2
    11.     exit 1
    12. fi
    13. DB="$(grep '^db=' $PROPS | sed -e 's/^db=//')"
    14. BEFORE_LOAD="tableCreates_4p"
    15. #AFTER_LOAD="indexCreates foreignKeys extraHistID buildFinish"
    16. AFTER_LOAD="indexCreates buildFinish"
    17. for step in ${BEFORE_LOAD} ; do
    18.     $Cwd/runSQL.sh "${PROPS}" $step
    19. done
    20. $Cwd/runLoader.sh "${PROPS}" $*
    21. for step in ${AFTER_LOAD} ; do
    22.     $Cwd/runSQL.sh "${PROPS}" $step
    23. done
    复制代码
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
复制代码
其中,


  • -C参数为绑核参数,参数与openGauss的线程池绑定列表一致。
  • -p或--preferred参数为设置内存分配优先分配到 node 0 节点。
数据库启动成功后,通过以下命令查看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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表