一、安装opengaussdb数据库
1、关闭防火墙和 Selinux
#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
2、设置字符集
# vim /etc/profile
export LANG="zh_CN.UTF-8"
3、内核参数调整:
# vim /etc/sysctl.conf
kernel.sem = 4096 2048000 32 32768
4、修改资源限制:
# vi /etc/security/limits.conf
添加如下内容
omm soft nproc unlimited
omm hard nproc unlimited
omm soft nofile 102400
omm hard nofile 102400
omm soft stack unlimited
omm hard stack unlimited
omm soft core unlimited
omm hard core unlimited
omm soft memlock unlimited
5、创建用户和用户组:
# 创建组
groupadd dbgroup
# 创建omm用户
useradd -g dbgroup omm
# 设置数据库密码 (可自定义,例如:Admin@@9000 )
passwd omm
6、创建数据库的安装路径并授权:
# 创建数据库安装路径
mkdir -p /usr/local/openGauss
# 为安装路径及文件授权
chown 755 -R /usr/local/openGauss
# 为omm用户授权安装路径权限
chown -R omm:dbgroup /usr/local/openGauss
7、安装数据库:
1)切换至omm用户,解压openGauss压缩包到安装目录。
# su omm
$ tar -jxf openGauss-5.0.2-openEuler-64bit.tar.bz2 -C /usr/local/openGauss
2)进入解压后目录下的simpleInstall(/usr/local/openGauss/simpleInstall)。
$ cd /usr/local/openGauss/simpleInstall
3)执行install.sh脚本安装openGauss。
$ sh install.sh -w "Admin@9000" &&source ~/.bashrc
参数说明:
-w:初始化数据库密码(gs_initdb指定),安全需要必须设置。
-p:指定的openGauss端口号,如不指定,默认为5432。
或者使用如下命令:
# 初始化数据库,并指定数据库目录(nodename 为主机名)
$ gs_initdb -w "Admin@9000" -D /data/single_node --nodename "sut1" --locale="en_US.UTF-8"
# 启动数据库
$ gs_ctl start -D /usr/local/openGauss/data/single_node/ -Z single_node
4)安装执行完成后,使用ps和gs_ctl查看进程是否正常。
# 切换用户至root,
ps ux | grep gaussdb
# 再切换至omm进行查看数据库状态
$ gs_ctl query -D /usr/local/openGauss/data/single_node
8、配置数据库允许远程连接:
1)修改pg_hba.conf 文件:
vim /usr/local/openGauss/data/single_node/pg_hba.conf
# 允许所有网段连接 在IPv4 local connections下添加
host all all 0.0.0.0/0 sha256
host all all 0.0.0.0/0 md5
2)重新加载 gs_ctl 策略
su omm
cd /usr/local/openGauss/bin
gs_ctl reload -D /usr/local/openGauss/data/single_node
3)文件 postgresql.conf 修改
vim /usr/local/openGauss/data/single_node/postgresql.conf
# 找到 listen_addresses 变量,将前面#去掉
listen_addresses = '*'
# 找到 password_encryption_type 变量,将前面#去掉
password_encryption_type = 1
# 找到max_connections = 200,并将值修改为合适的值,例如4096
max_connections = 4096
4)重启数据库
su omm
cd /usr/local/openGauss/bin
gs_ctl restart -D /usr/local/openGauss/data/single_node
9、在数据库中创建用户和数据库:
1)连接数据库
cd /usr/local/openGauss/bin
gsql -d postgres -p 5432 -r
2)创建用户:
# 创建前置软件要使用的用户名和密码, 用户名为 benchmarksql , 密码为Admin@9000;
CREATE USER benchmarksql WITH ENCRYPTED PASSWORD 'Admin@9000';
3)创建数据库并指定用户:
CREATE DATABASE benchmarksql OWNER benchmarksql;
# 删除表空间 (可选)
DROP TABLESPACE example2;
#删除数据库 (可选)
DROP database tpcc1000;
4)创建数授权
GRANT ALL PRIVILEGES TO benchmarksql ;
二、benchmarksql安装与配置(安装在压力机上)
1、依赖包安装(可选)
1)安装依赖包
yum install -y gcc glibc-headers gcc-c++ gcc-gfortran readline-devel libXt-devel pcre-devel libcurl libcurl-devel ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel
2)检查是否已安装
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep -E "gcc|glibc-headers|gcc-c++|gcc-gfortran|readline-devel|libXt-devel|pcre-devel|libcurl libcurl-devel|java-11-openjdk|ant|ncurses|ncurses-devel|autoconf|automake|zlib|zlib-devel|bzip2|bzip2-devel|xz-devel"
2、安装JAVA:
1)安装java
yum erase java*
yum -y install java-1.8*
2)配置Java环境变量
# vim /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
JRE_HOME=$JAVA_HOME/jre
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
# source /etc/profile
# java -version
3、安装ANT
1)下载ant安装包并解压:
# tar xvf /root/apache-ant-1.10.15-bin.tar.gz
2)配置Ant环境变量:
# vim /etc/profile
export ANT_HOME=/root/apache-ant-1.10.15
export PATH=$PATH:$ANT_HOME/bin
# source /etc/profile
4、安装R语言
登录https://mirror.bjtu.edu.cn/cran/src/base/R-3/ 网站下载最新版的R-3.6.3软件包,
1)解压R语言软件包
tar -zxvf R-3.6.3.tar.gz
2)编译R语言软件包
cd /root/R-3.6.3
./configure && make && make install
5、配置互信(可选)
使用BenchmarkSQL压测,要配置BenchmarkSQL服务器到openGauss数据库omm用户的互信:
1)BenchmarkSQL 服务器,omm用户操作:
ssh-keygen -t rsa
ssh-copy-id omm@10.199.132.137
ssh omm@10.199.132.137
6、安装benchmarksql-5.0
1)上传benckamrksql5.0安装包并解压:
# unzip /root/benchmarksql-5.0.zip
2)编译benchmarksq-5.0
# cd /root/benchmarksql-5.0/
# ant
7、更新benchmark中的JDBC驱动 (可选)
1)登录openGauss官网https://opengauss.org/zh/download/下载opengauss版本对应的jdbc驱动;
2)将下载好的JDBC驱动包存放到/root/benchmarksql-5.0/lib/postgres目录中;
3)替换掉postgresql中的驱动:
cd /root/benchmarksql-5.0/lib/postgres/
tar -zxvf openGauss-5.0.2-JDBC.tar.gz
mkdir bak
mv postgresql-9.3-1102.jdbc41.jar ./bak
8、配置benckmark
# cd /root/benchmarksql-5.0/run/
# cp props.pg gaussdb.pg
# vim gaussdb.pg
db=postgres // 指定了用于压测的目标数据库管理系统为PostgreSQL;
driver=org.postgresql.Driver //设置了用于PostgreSQL的Java数据库连接(JDBC)驱动程序类;
conn=jdbc:postgresql://10.199.132.139:5432/benchmarksql?binaryTransfer=false&forcebinary=false
//定义连接字符串,用于连接到运行PostgreSQL数据库的主机IP、端口号和数据库,binaryTransfer=false和forcebinary=false指示在压测期间客户端与服务器之间数据传输的方式;
user=benchmarksql // 指定将用于认证连接到数据库的用户名;
password=Admin@9000 // 设置指定用户的密码;
warehouses=20 // 设置压测中将使用的仓库数量;
loadWorkers=4 // 设置用于初始数据加载阶段的工作线程数量;
terminals=50 // 设置在性能测试期间将使用的模拟终端(用户)数量;
runTxnsPerTerminal=0 // 指定每个终端在性能测试期间要执行的事务数量;
runMins=10 // 设置性能测试的持续时间,以分钟为单位;
注意:runMins和runTxnsPerTerminal这两个参数指定了两种运行方式,前者是按照指定运行时间执行,以时间为标准;后者以指定每个终端的事务数为标准执;
两者不能同时生效,必须有一个设定为0。
limitTxnsPerMin=300 // 设置性能测试期间每分钟可以执行的事务数量上限;
terminalWarehouseFixed=true //指示是否将终端分配到固定的仓库,如设置为"true",每个终端将分配到特定的仓库;如果设置为"false",终端将随机分配到仓库,可以均匀的使用数据库整体配置。
// 设置在压测工作负载中各个不同事务的权重,总和必须是100。
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS // 定义存储压测结果的目录;
osCollectorScript=./misc/os_collector_linux.py // 指定用于在压测期间收集系统性能指标(CPU\内存\磁盘\网络)的操作系统收集脚本的路径;
osCollectorInterval=1 // 设置操作系统收集脚本在压测期间收集系统性能指标的间隔(以秒为单位);
osCollectorSSHAddr=omm@10.199.132.139 // 指定操作系统收集脚本用于连接到目标机器并收集性能指标的SSH地址
osCollectorDevices=net_eth0 blk_sda // 定义操作系统收集脚本将监视性能指标的网络和块设备;
9、生成测试数据(耗时2小时左右)
# cd /root/benchmarksql-5.0/run/
# ./runDatabaseBuild.sh gaussdb.pg
或者
1)创建数据库表
# cd /root/benchmarksql-5.0/run/
# vim runSQL.sh 中将source funcs.sh $1为以下内容:
source /root/benchmarksql-5.0/run/funcs.sh $1
# ./runSQL.sh gaussdb.pg sql.common/tableCreates.sql
2)加载数据
# cd /root/benchmarksql-5.0/run/
# vim runLoader.sh 中将source funcs.sh $1为以下内容:
source /root/benchmarksql-5.0/run/funcs.sh $1
# ./runLoader.sh gaussdb.pg
3)创建索引
# cd /root/benchmarksql-5.0/run/
# ./runSQL.sh gaussdb.pg sql.common/indexCreates.sql
10、启动测试(执行TPCC压测, 结果关注 tpmTOTAL值 ,即总事务数TPS;tmpC代表每分钟内系统处理的新订单个数。)
# cd /root/benchmarksql-5.0/run/
# ./runBenchmark.sh gaussdb.pg (运行时间在gaussdb.pg文件里面修改;预热5分钟,即先执行5分钟,之后再等待10分钟。)
# ./runBenchmark.sh gaussdb.pg (运行时间在gaussdb.pg文件里面修改;执行60分钟,取这次运行的结果。)
11、生成测试报告
# cd /root/benchmarksql-5.0/run/
# ./generateReport.sh my_result_2024-09-06_131532
12、查看测试报告
打包并下载my_result_2024-09-06_131532目录文件,里面包含了生成的测试报告,其中report.html文件已html格式生成测试报告,
报告里包含了数据库、磁盘、网卡压测等信息。
三、opengaussdb性能优化
1、BIOS优化
配置项 | 推荐值 | 菜单路径 | 说明 |
Support Smmu | Disabled | Advanced > MISC Config > Support Smmu | System Memory Management Unit |
CPU Prefetching Configuration | Disabled | Advanced > MISC Config > CPU Prefetching Configuration | CPU预取,推荐关闭 |
Die Interleaving | Disabled | Advanced > Memory Config > Die Interleaving | 控制是否使用DIE交织,推荐关闭 |
Max Payload Size | 512B | Advanced > PCIe Config > CPU X PCIe - Port X > Max Payload Size | 每次传输数据的最大单位,值越大带宽利用率越高. |
2、磁盘优化
1)配置4块NVME 盘,分别应用于opengaussdb数据库的datanode、xlog、2个比较大的表空间( 例如tablespace2、tablespace3 )目录;
2)格式化文件系统:
# 修改NVME盘块大小为8KB:
mkfs.xfs -bsize=8192 /dev/nvme0n1 -f
mkfs.xfs -bsize=8192 /dev/nvme1n1 -f
mkfs.xfs -bsize=8192 /dev/nvme2n1 -f
mkfs.xfs -bsize=8192 /dev/nvme3n1 -f
#将4块NVME盘分别挂载到四个目录中:
mount/dev/nvme0n1 /datanode
mount/dev/nvme1n1 /xlog
mount/dev/nvme2n1 /tablespace2
mount/dev/nvme3n1 /tablespace3
#查看挂载在目录下的硬盘信息(可以看到bsize信息):
xfs_info /datanode
xfs_info /xlog
xfs_info /tablespace2
xfs_info /tablespace3
3)配置磁盘IO队列调度机制
echonone >/sys/block/nvme0n1/queue/scheduler
echonone >/sys/block/nvme1n1/queue/scheduler
echonone >/sys/block/nvme2n1/queue/scheduler
echonone >/sys/block/nvme3n1/queue/scheduler
3、网络配置
#查看numa node 分配情况,并将每个numa node后3为位core预留给网卡队列;
numactl -H (如下图)
#查看数据库服务器与压力机直连的网口中断队列数
ethtool -l enp130s0f0
#设置直连网口的中断队列数(设置中断队列数与预留numa node数保持一致)
ethtool -L enp130s0f0 combined 12
#网卡中断绑核脚本如下:(脚本名:bind-12.sh ;执行命令:sh bind-12.sh 0000:82:00.0 )
#!/bin/bash
export LC_ALL=en_US.UTF-8
net_cores=12
dev_name=$1
#core_no=$(lscpu|grep "CPU(s):"|awk {'print $2'}| head -n 1)
core_no=128
numa_node=4
#numa_node=$(lscpu|grep 'NUMA node(s):'|awk {'print $3'})
cores_per_numa=$(($core_no / $numa_node))
declare net_irq_no
declare net_devices_array
declare irq_array_net
#get all the network devices
function get_net_devices()
{
net_dev_no=$(ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}' |wc -l)
net_devices=$(ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')
echo "******"
net_devices_array=($net_devices)
echo $net_devices
echo $net_devices_array
echo "********"
}
#get mellanox the network devices
function get_mellanox_devices()
{
net_dev_no=$(lspci |grep -i ethernet |wc -l)
net_devices=$(lspci |grep -i ethernet | awk {'print $1'})
IFS=$'\n' read -d '' -a net_devices_array <<< "$net_devices"
}
#get the network interface irq
function get_irq_net()
{
net_name=$1
net_irq_no=$(cat /proc/interrupts | grep $net_name | awk {'print $1'} | wc -l)
irq=$(cat /proc/interrupts | grep $net_name | awk {'print $1'} | sed ':a;N;s/\n//g;ba')
IFS=':' read -r -a irq_array_net <<< "$irq"
}
net_irq_total=0
get_net_devices
for((k=0;k<net_dev_no;k++))
do
get_irq_net ${net_devices_array[0]}
net_irq_total=$(($net_irq_total+$net_irq_no))
done
if [ $net_irq_total -eq 0 ]
then
get_mellanox_devices
fi
echo $net_dev_no
echo "^^^^^"
echo $net_devices_array
echo "^^^^^^"
get_net_devices
#for((k=0;k<net_dev_no;k++))
#do
# echo "====="
# echo ${net_devices_array[$k]}
# #if [ $dev_name == ${net_devices_array[$k]} ];then
# if [ $dev_name == "hns3-0000:7d:00.0" ];then
get_irq_net ${dev_name}
echo $net_irq_no
for((i=0; i<net_irq_no; ++i))
do
echo $(($(($(($(($i+1))*$cores_per_numa-$(($i%$net_cores/$numa_node))-1))%core_no)))) " to " ${irq_array_net[i]}
echo $(($(($(($(($i+1))*$cores_per_numa-$(($i%$net_cores/$numa_node))-1))%core_no)))) > /proc/irq/${irq_array_net[i]}/smp_affinity_list
done
# fi
#done
# 修改网卡参数
ifconfig enp130s0f0 mtu 1500
# 配置读写缓冲区
ethtool-G enp130s0f0 rx 1024tx 1024
# 将网络分片offloading到网卡上
ethtool–K enp130s0f0 tso on
ethtool–K enp130s0f0 lro on
ethtool–K enp130s0f0 gro on
ethtool–K enp130s0f0 gso on
4、其他操作系统配置
1)关闭服务
service sysmonitor stop
service irqbalance stop
service rsyslog stop
service firewalld stop
2)关闭透明大页
echo'never'>/sys/kernel/mm/transparent_hugepage/defrag
echo'never'>/sys/kernel/mm/transparent_hugepage/enabled
3)取消CPU平衡
echo 0 > /proc/sys/kernel/numa_balancing
4)调整内存脏页回收策略
echo 3000 > /proc/sys/vm/dirty_expire_centisecs
echo 500 > /proc/sys/vm/dirty_writeback_centisecs
echo 60 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio
5、openGauss数据库配置
1)数据库环境变量配置:
(1)切换到数据库运行用户下(非root用户)。
(2)创建文件: vim ~/env.txt
export GAUSSHOME=/usr/local/openGauss/
export LD_LIBRARY_PATH=$GAUSSHOME/lib
export PATH=$GAUSSHOME/bin:$PATH
export DATA_NODE=/data #数据库节点路径
export PGDATA=/usr/local/openGauss/data/single_node # 数据库存储路径
export XLOG=/pg_xlog # 存放xlog路径
export TABLESPACE2=/tablespace2 # 表空间路径2
export TABLESPACE3=/tablespace3 # 表空间路径3
export DATA_BACK=/data_back # 数据备份路径
(3)使环境变量生效:
source~/env.txt
2)修改opengaussdb数据库配置参数
(1)修改pg_hpa.conf,在文件末尾增加以下内容,
* * 0.0.0.0/0 sha256
* * 0.0.0.0/0 md5
或者如下
hosttpcc1000 tpcc_bot xxx.xxx.xxx.xxx/32 sha256
参数说明:
tpcc1000 为后面创建的数据库名。
tpcc_bot 为后面创建的数据库用户名。
xxx.xxx.xxx.xxx 改为benchmark压测服务器的IP。
3) 修改postgersql.conf,并在最后添加如下内容:
max_connections = 4096
allow_concurrent_tuple_update = true
audit_enabled = off
cstore_buffers =16MB
enable_alarm = off
enable_codegen = false
enable_data_replicate = off
full_page_writes = off
max_files_per_process = 100000
max_prepared_transactions = 2048
use_workload_manager = off
wal_buffers = 1GB
work_mem = 1MB
transaction_isolation = 'read committed'
default_transaction_isolation = 'read committed'
synchronous_commit = on
fsync = on
maintenance_work_mem = 2GB
autovacuum = on
autovacuum_mode = vacuum
autovacuum_vacuum_cost_delay =10
update_lockwait_timeout =20min
enable_mergejoin = off
enable_nestloop = off
enable_hashjoin = off
enable_bitmapscan = on
enable_material = off
wal_log_hints = off
log_duration = off
checkpoint_timeout = 15min
autovacuum_vacuum_scale_factor = 0.1
autovacuum_analyze_scale_factor = 0.02
enable_save_datachanged_timestamp =FALSE
log_timezone = 'PRC'
timezone = 'PRC'
lc_messages = 'C'
lc_monetary = 'C'
lc_numeric = 'C'
lc_time = 'C'
enable_double_write = on
enable_incremental_checkpoint = on
enable_opfusion = on
numa_distribute_mode = 'all'
track_activities = off
enable_instr_track_wait = off
enable_instr_rt_percentile = off
track_sql_count = off
enable_instr_cpu_timer = off
plog_merge_age = 0
session_timeout = 0
enable_instance_metric_persistent = off
enable_logical_io_statistics = off
enable_user_metric_persistent =off
enable_xlog_prune = off
enable_resource_track = off
enable_thread_pool = on
thread_pool_attr = '464,4,(cpubind:1-28,32-60,64-92,96-124)'
enable_partition_opfusion=on
dirty_page_percent_max = 0.1
candidate_buf_percent_target = 0.7
checkpoint_segments =10240
advance_xlog_file_num = 100
autovacuum_max_workers = 20
autovacuum_naptime = 5s
bgwriter_flush_after = 256kB
data_replicate_buffer_size = 16MB
enable_stmt_track = off
remote_read_mode=non_authentication
wal_level = archive
hot_standby = off
hot_standby_feedback = off
client_min_messages = ERROR
log_min_messages = FATAL
enable_asp = off
enable_bbox_dump = off
enable_ffic_log = off
wal_keep_segments = 1025
wal_writer_delay = 100
local_syscache_threshold = 40MB
sql_beta_feature = 'partition_opfusion'
pagewriter_thread_num = 2
max_redo_log_size=400GB
walwriter_cpu_bind = 0
undo_zone_count=0
gs_clean_timeout =0
pagewriter_sleep = 30
incremental_checkpoint_timeout=5min
xloginsert_locks=8
walwriter_sleep_threshold = 50000
log_hostname = off
vacuum_cost_limit = 10000
instr_unique_sql_count=0
track_counts = on
bgwriter_flush_after = 32
enable_seqscan = off
enable_beta_opfusion=on
enable_global_syscache=off
enable_ustore = off
enable_cachedplan_mgr=off
shared_buffers = 350GB
enable_page_lsn_check = off
max_io_capacity = 4GB
light_comm = on
enable_indexscan_optimization = on
# time_record_level = 1
listen_addresses = '*'
# port = ?
bgwriter_delay = 1s
checkpoint_segments=10000
# 在生成数据阶段使用30,在跑TPCC阶段改为60000
# wal_file_init_num = 30
wal_file_init_num = 60000
主要注意事项如下:
在极限性能场景下,关闭用于调试等的无关功能。
- 打开 synchronous_commit、fsync参数保障数据安全落盘。
- 开启线程池,使用绑核配置;绑核编号中除去用于网络中断的核以及用于处理xlog的核。
enable_thread_pool = on thread_pool_attr = '464,4,(cpubind:1-28,32-60,64-92,96-124)'
- xlog落盘压力较大,相关线程单独绑核。
- xlog生成速率非常大,调整回收相关参数加快回收速率,打开autovacuum。
- listen_addresses、port需要根据实际情况进行修改。
- wal_file_init_num 在生成数据阶段使用30,在跑TPCC阶段改为60000。
4) 创建压测数据库
(1)用绑核方式启动 (-C参数指定绑核列表,参数与openGauss的线程池绑定参数一致;其中preferred用于指定xlog盘对应的NUMA节点。)
numactl -C 1-28,32-60,64-92,96-124 --preferred=2 gs_ctl start -D /usr/local/openGauss/data/single_node -Z single_node
(2)创建数据库
登录数据库,创建用于压测的用户及数据库:(注意与前面在pg_hba.conf配置的参数保持一致。)
create user tpcc_bot with sysadmin identified by 'my_password@123';
create database tpcc1000 encoding='UTF-8' owner=tpcc_bot;
四、Benchmark配置
1、基础性能优化,参考第三节中的BIOS、OS、网卡等基础性能优化部分;
2、修改数据生成脚本
1)进入运行路径 benchmarksql-5.0/run,修改 sql.common/ tableCreates.sql ,脚本如下:
<<tableCreates.sql>>
2)进入运行路径 benchmarksql-5.0/run,修改 sql.common/indexCreates.sql ,脚本如下:
<<indexCreates.sql>>
3、修改数据生成脚本运行参数配置
1)进入路径 benchmarksql-5.0/run,复制一份配置文件并修改props_2p_5min.og,作为预热5分钟时使用。
# cp props.pg props_2p_5min.og
# vim props_2p_5min.og
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://192.168.1.1:5432/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
user=tpcc_bot
password=my_password@123
warehouses=1000
loadWorkers=80
terminals=464
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=false
//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
2)再复制一份为 props_4p_60min.og,并将 runMins 的值改为60,作为跑1小时TPCC使用。
# cp props_2p_5min.og props_2p_60min.og
# vim props_2p_60min.og
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://192.168.1.1:5432/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
user=tpcc_bot
password=my_password@123
warehouses=1000
loadWorkers=80
terminals=464
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=60
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=false
//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
五、压测
1、数据生成
进入benchmark的run目录下,执行以下命令生成数据:
numactl -C 1-28,32-60,64-92,96-124 ./runDatabaseBuild.sh props_2p_5min.og
注:任务结束后,待数据全部落盘,stop数据库。
将数据库服务器端数据库配置文件postgresql.conf中的 wal_file_init_num 参数改为 60000 。
2、数据备份
cp -r $DATA_NODE $DATA_BACK
3、数据分盘
mv $DATA_NODE/pg_xlog/ $XLOG
mv $DATA_NODE/pg_location/tablespace2/ $TABLESPACE2
mv $DATA_NODE/pg_location/tablespace3/ $TABLESPACE3
ln-svf $XLOG $DATA_NODE/pg_xlog
ln-svf $TABLESPACE2 $DATA_NODE/pg_location/tablespace2
ln-svf $TABLESPACE3 $DATA_NODE/pg_location/tablespace3
4、绑核启动openGauss数据库:
1)查看xlog盘对应的NUMA节点
cat /sys/class/nvme/nvme2/device/numa_node
2)以preferred方式绑核启动openGauss数据库:
numactl -C 1-28,32-60,64-92,96-124 --preferred=2 gs_ctl start -D /usr/local/openGauss/data/single_node -Z single_node
注:
-C参数为绑核参数,参数与openGauss的线程池绑定列表一致;
-p或--preferred参数为设置内存分配优先分配到 node 2 节点;其中preferred用于指定xlog盘对应的NUMA节点;
数据库启动成功后,通过以下命令查看numa的节点内存分配,将可以看到,node 2 剩余的内存是比其他节点要少的,说明preferred参数配置生效,否则没有生效,可能会导致在不同的测试次数中大幅波动。
5、启动预热(压力机端):
1) numactl -C 1-28,32-60,64-92,96-124 ./runBenchmark.sh props_2p_5min.og
( 注: 通过htop命令查看CPU情况,前面几分钟如下则正常,后面几分钟由于在初始化xlog文件,会下降到60%左右,属于正常现象。 )
2)任务结束后,待数据全部落盘,即等待10分钟。
6、正式压测:
numactl -C 1-28,32-60,64-92,96-124 ./runBenchmark.sh props_2p_60min.og
(说明:预热5分钟结束再过10分钟,执行以上命令正式压测,最终TPCC达到230万以上。)