原文链接:https://www.gbase.cn/community/post/3937

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

 

TPC-C由事务处理协会Transaction Processing Council (TPC)创建,是行业中公认的权威的和最为复杂的在线事务处理基准测试。这种基准测试项目将对包括查询、更新及队列式小批量事务在内的广泛数据库功能进行测试。TPC-C基准测试针对一种模拟订单录入与销售环境测量每分钟商业事务(tpmC)吞吐量,专门测量系统在同时执行其它四种事务类型(如支付、订单状态更新、交付及证券级变更)时每分钟所生成的新增订单事务数量。 
本文主要介绍GBase 8c数据库为了达到最佳tpmC性能,所依赖的关键系统级调优。

1. 搭建性能测试环境

1.1 TPC-C测试硬件要求

服务器数量:2台服务器(1台用于数据库服务器,1台用于TPC-C客户端)。

南大通用GBase 8c TPC-C基准性能调优实践_服务器

服务器硬件规格:

  • Memory:大于512GB。
  • Free Disk:4块NVME硬盘,每块容量大于1TB。
  • 网卡:Hi1822千兆网卡,光纤互连。

1.2 TPC-C测试软件要求

操作系统要求:aarch64 架构

软件依赖:numactl、jdk、ant、htop

1.3 绑核介绍

在多核CPU中合理的调度线程在各个核上运行可以获得更高的性能。在多线程编程中,每个线程处理的任务优先级是不一样的,对于要求实时性比较高的线程或者是主线程,对于这种线程我们可以在创建线程时指定其绑定到某个CPU核上,以后这个核就专门处理该线程。这样可以使得该线程的任务可以得到较快的处理,特别是和用户直接交互的任务,较短的响应时间可以提升用户的体验感。目前GBase 8c只在ARM服务器平台支持绑核操作,X86架构的服务器平台暂不支持绑核操作。

绑核参数设置步骤如下:
(1)安装GBase 8c数据库,具体操作请参考安装部署手册。
(2)使用gha_ctl stop all -l dcslist命令停止数据库。
(3)使用gs_guc工具修改数据库端口、IP等,gs_guc的使用请参考工具参考手册。
(4)使用gs_guc工具设置如下参数。

advance_xlog_file_num = 100
numa_distribute_mode = 'all'
thread_pool_attr = '464,4,(cpubind:1-27,32-59,64-91,96-123)'
xloginsert_locks = 16
wal_writer_cpu=0
wal_file_init_num = 20
xlog_idle_flushes_before_sleep = 500000000
pagewriter_sleep = 10ms

(5)执行如下命令以绑核方式启动服务端数据库。

numactl -C 1-27,32-59,64-91,96-123 gaussdb --single_node -D /data1/gaussdata  -p 3625 &

其中0核用于wal_writer、1-27、32-59、64-91、96-123表示使用111个核运行TPC-C程序,其余的16个核用来处理服务端的网络中断。

(6)执行如下命令,将客户端CPU的48个核与网卡中断队列进行绑定:

sh bind_net_irq.sh 48

2. TPC-C性能调优参数建议

2.1 操作系统参数调优

优化操作系统配置:

Irq banlance 关闭,避免数据库进程与客户端抢cpu,导致cpu使用不均匀

service irqbalance stop
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
echo none > /sys/block/nvme*n*/queue/scheduler  #针对nvme磁盘io队列调度机制设置

以下参数可以参考:

1) 文件句柄:ulimit -n 1000000
2) sysctl.conf系统参数配置

vm.max_map_count = 999999
#kernel.sem = 4096 32000 1024 200
kernel.shmall = 65894144
kernel.shmmax = 161941448294
kernel.shmmni = 4096
kernel.sem = 501000 641280000 501000 12800
net.ipv4.ip_local_port_range =  9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
fs.file-max = 6815744
fs.aio-max-nr = 1048576

2.2 数据库主要性能参数

  • shared_buffer参数

【优化参数说明】:数据库使用的共享内存缓存区的大小。该值越大可以减少磁盘IO压力。建议值为机器内存的25%-40%之间。可以调大试试

【参数描述】:设置GBase 8c使用的共享内存大小。增加此参数的值会使GBase 8c比系统默认设置需要更多的System V共享内存。

【取值范围】:整型,16 ~ 1073741823,单位为8KB。shared_buffers需要设置为BLCKSZ的整数倍,BLCKSZ目前设置为8KB,即shared_buffers需要设置为8KB整数倍。改变BLCKSZ的值会改变最小值。

【默认值】:8MB

【设置建议】:

建议设置shared_buffers值为内存的40%以内。行存列存分开对待。行存设大,列存设小。列存:(单服务器内存/单服务器数据库节点个数)*0.4*0.25。

如果设置较大的shared_buffers需要同时增加checkpoint_segments的值,因为写入大量新增、修改数据需要消耗更多的时间周期。

  • work_mem参数

【优化参数说明】:声明内部排序和哈希操作可使用的工作内存。建议排序多可以适当调大,并发多调小,最大消耗为 max_connections * work_mem。

【参数描述】:设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY、DISTINCT和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。

对于复杂的查询,可能会同时并发运行好几个排序或者散列操作,每个都可以使用此参数所声明的内存量,不足时会使用临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是work_mem的好几倍。该参数属于USERSET类型参数。

【取值范围】:整型,64~2147483647,单位为KB。

【默认值】:64MB

  • maintenance_work_mem参数

【优化参数说明】:该参数为create index、vacuum时申请的内存,频率小,但内存耗费大。建议值为各dn上vacuum进程数 * 的各dn上maintenance_work_mem。

【参数描述】:设置在维护性操作(比如VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等)中可使用的最大的内存。该参数的设置会影响VACUUM、VACUUM FULL、CLUSTER、CREATE INDEX的执行效率。该参数属于USERSET类型参数。

【取值范围】:整型,1024~INT_MAX,单位为KB。

【默认值】:16MB

  • 其他

2.3 数据库其他设置的优化建议

  1. 数据分盘处理。
    如果环境有较多的磁盘,可以将XLOG,以及benchmark所建的表空间tablespace2和tablespace3进行分盘处理和建立软连接,例如有4块盘的处理:
  2. 可以关闭高可用进程,减少一些资源的占用。
gha_ctl stop all -l http://ip:port  ##关掉高可用进程
numactl -C 0-27,32-59,64-91,96-123 gs_ctl start -D /mnt/data1/data/dn1/dn1_1/

原文链接:https://www.gbase.cn/community/post/3937

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。