benckmark压测opengaussdb数据库

一、安装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

主要注意事项如下:

在极限性能场景下,关闭用于调试等的无关功能。

  1. 打开 synchronous_commit、fsync参数保障数据安全落盘。
  2. 开启线程池,使用绑核配置;绑核编号中除去用于网络中断的核以及用于处理xlog的核。
    enable_thread_pool = on thread_pool_attr =  '464,4,(cpubind:1-28,32-60,64-92,96-124)'

  1. xlog落盘压力较大,相关线程单独绑核。
  2. xlog生成速率非常大,调整回收相关参数加快回收速率,打开autovacuum。
  3. listen_addresses、port需要根据实际情况进行修改。
  4. 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万以上。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节之舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值