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 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 每次传输数据的最大单位,值越大带宽利用率越高。

其中X为具体的CPU编号

2.2 磁盘配置

本次调优中,需要用到4个 NVME 存储卡。分别用于存放 datanode 本身、xlog、2个比较大的表空间。其中用于存放 xlog 的为V5的NVME存储卡,容量3TB以上,其余为V3的NVME存储卡,容量1TB以上。

在4p单机环境下,CPU更多,并发更大,单位时间内产生的数据量更大,IO很容易成为制约性能的瓶颈,所以在条件允许的情况下,应尽量使用V5的存储卡,V5的存储卡优先用于存放xlog文件。

df -h | grep nvme

2.2.1 格式化文件系统

查看 nvme 的文件系统类型,确认块大小是否为8KB(bsize=8192)。

如查看挂载在 /data4 路径下硬盘信息

xfs_info /data4

如果不是,则将其格式化为8KB(格式化前注意数据备份)。

umount /data4

mkfs.xfs -b size=8192 /dev/nvme3n1 -f

mount /dev/nvme3n1 /data4

操作完成后再次用 xfs_info 确认是否执行成功。

2.2.2 配置磁盘IO队列调度机制

echo none > /sys/block/nvme0n1/queue/scheduler

echo none > /sys/block/nvme1n1/queue/scheduler

echo none > /sys/block/nvme2n1/queue/scheduler

echo none > /sys/block/nvme3n1/queue/scheduler

2.3 网络配置

进入华为官网 ,选择对应的版本及补丁号,如 IN500 solution 5.1.0.SPC401 ,下载 IN500_solution_5.1.0.SPC401.zip

安装hinicadm工具。

以管理员身份执行以下命令:

mkdir IN500_solution_5.1.0

export IN500_HOME=$(pwd)/IN500_solution_5.1.0

unzip IN500_solution_5.1.0.SPC401.zip -d IN500_solution_5.1.0

cd $IN500_HOME/tools/linux_arm/nic/

rpm -ivh hinicadm-2.4.1.0-1.aarch64.rpm

通过 ifconfig 命令查看使用的网络接口卡。

ifconfig

根据配置的ip确认网络接口卡名:enp71s0

查看Hi1822设备信息:

hinicadm info

可以看到小网口 enp71s0 对应的物理网卡设备名为 hinic0。

设置环境参数,以方便后续使用:

export CARD_NAME=enp71s0

export HARD_DEV=hinic0

2.3.1 更换网卡固件

查看固件版本。

ethtool -i $CARD_NAME

firmware-version 为 2.4.1.0,则无需修改。否则如果是2.5.0.0,建议更换为2.4.1.0。

更换固件步骤:

(2)更换固件。

命令格式为:

hinicadm updatefw -i <物理网卡设备名> -f <固件文件路径>

例如:

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。

通过以下命令查看当前的配置:

ethtool -l $CARD_NAME

上图中第一个Combined值为网卡支持的最大中断数,第二个Combined值为当前网卡配置的中断数24。

若配置已正确,则无需执行下列步骤,否则执行下列步骤进行修改。

(2)修改最大配置

命令格式:

$IN500_HOME/tools/linux_arm/nic/config/hinicconfig <物理网卡设备名> -f <多中断队列配置文件>

例如:

cd $IN500_HOME/tools/linux_arm/nic/config/

./hinicconfig $HARD_DEV -f ./std_sh_4x25ge_dpdk_cfg_template0.ini # 64中断,本文场景下执行此命令

./hinicconfig $HARD_DEV -f ./std_sh_4x25ge_dpdk_cfg_template0.ini # 16中断

(3)修改当前配置

ethtool -L $CARD_NAME combined 24

(4)再次执行步骤(1)进行配置确认。

2.3.3 网络中断绑核

在4路鲲鹏服务器中,共有8个NUMA节点、256核。将每个节点的最后3个核,共24个核用作网络中断,会有比较好的优化效果。

使用以下命令查看CPU与node情况:

numactl -H

中断绑核脚本如下:

export CARD_NAME=enp71s0

irq_list=cat /proc/interrupts | grep $CARD_NAME | awk {'print $1'} | tr -d ":"

irq_array_net=($irq_list)

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)

for (( i=0;i<24;i++ ))

do

echo "${cpu_array_irq[$i]}" > /proc/irq/${irq_array_net[$i]}/smp_affinity_list

done

for j in ${irq_array_net[@]}

do

cat /proc/irq/$j/smp_affinity_list

done

将CARD_NAME改为实际值,保存为sh脚本bind_irq.sh 并执行完成中断绑定。

sh bind_irq.sh

2.3.4 修改网卡参数

ifconfig $CARD_NAME mtu 1500

配置读写缓冲区

ethtool -G $CARD_NAME rx 1024 tx 1024

将网络分片offloading到网卡上

ethtool –K $CARD_NAME tso on

ethtool –K $CARD_NAME lro on

ethtool –K $CARD_NAME gro on

ethtool –K $CARD_NAME gso on

2.4 其他操作系统配置

关闭不必要的服务

service sysmonitor stop

service irqbalance stop

service rsyslog stop

service firewalld stop

关闭透明大页

echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag

echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled

取消CPU平衡

echo 0 > /proc/sys/kernel/numa_balancing

调整内存脏页回收策略

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

3、openGauss数据库配置

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

(1)切换到数据库运行用户下(非root用户)。

(2)创建文件:

vim ~/env.txt

配置如下环境变量(env.txt):

export GAUSSHOME=/home/my_user/package # openGauss 的安装目录

export LD_LIBRARY_PATH=$GAUSSHOME/lib

export PATH=$GAUSSHOME/bin:$PATH

export DATA_NODE=/xxx/data # 数据库节点路径

export XLOG=xxx/pg_xlog # 存放xlog的路径

export TABLESPACE2=xxx/tablespace2 # 表空间路径2

export TABLESPACE3=xxx/tablespace3 # 表空间路径3

export DATA_BACK=xxx/data_back # 数据备份路径

执行命令使环境变量生效

source ~/env.txt

注意:

DATA_NODE、XLOG、TABLESPACE2、TABLESPACE3 分别放到4个不同的 nvme 盘。

XLOG建议放到最好的 nvme 盘。

以上路径不要同时存放其他数据,避免后续恢复数据时被删除。

(3)安装数据库

从 openGauss官网 下载安装包,按官网文档进行安装到 $GAUSSHOME 路径。

安装好后,初始化数据库节点到 $DATA_NODE 路径下。

3.1 修改pg_hpa.conf

在文件末尾增加以下内容,

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官网查阅:

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 = '696,8,(cpubind:1-28,32-60,64-92,96-124,128-156,160-188,192-220,224-252)'

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 = 450GB

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

3.3 创建压测数据库

(1)用绑核方式启动

-C参数指定绑核列表,参数与openGauss的线程池绑定参数一致。

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配置的参数保持一致。

create user tpcc_bot with sysadmin identified by 'my_password@123';

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属性。

增加分区设置。

具体如下:

CREATE TABLESPACE example2 relative location 'tablespace2';

CREATE TABLESPACE example3 relative location 'tablespace3';

create table bmsql_config (

cfg_name varchar(30),

cfg_value varchar(50)

);

create table bmsql_warehouse (

w_id integer not null,

w_ytd decimal(20,2),

w_tax decimal(4,4),

w_name varchar(10),

w_street_1 varchar(20),

w_street_2 varchar(20),

w_city varchar(20),

w_state char(2),

w_zip char(9)

) WITH (FILLFACTOR=80);

create table bmsql_district (

d_w_id integer not null,

d_id integer not null,

d_ytd decimal(20,2),

d_tax decimal(4,4),

d_next_o_id integer,

d_name varchar(10),

d_street_1 varchar(20),

d_street_2 varchar(20),

d_city varchar(20),

d_state char(2),

d_zip char(9)

) WITH (FILLFACTOR=80);

create table bmsql_customer (

c_w_id integer not null,

c_d_id integer not null,

c_id integer not null,

c_discount decimal(4,4),

c_credit char(2),

c_last varchar(16),

c_first varchar(16),

c_credit_lim decimal(12,2),

c_balance decimal(12,2),

c_ytd_payment decimal(12,2),

c_payment_cnt integer,

c_delivery_cnt integer,

c_street_1 varchar(20),

c_street_2 varchar(20),

c_city varchar(20),

c_state char(2),

c_zip char(9),

c_phone char(16),

c_since timestamp,

c_middle char(2),

c_data varchar(500)

) WITH (FILLFACTOR=80) tablespace example2;

-- create sequence bmsql_hist_id_seq;

create table bmsql_history (

hist_id integer,

h_c_id integer,

h_c_d_id integer,

h_c_w_id integer,

h_d_id integer,

h_w_id integer,

h_date timestamp,

h_amount decimal(6,2),

h_data varchar(24)

) WITH (FILLFACTOR=80);

create table bmsql_new_order (

no_w_id integer not null,

no_d_id integer not null,

no_o_id integer not null

) WITH (FILLFACTOR=80);

create table bmsql_oorder (

o_w_id integer not null,

o_d_id integer not null,

o_id integer not null,

o_c_id integer,

o_carrier_id integer,

o_ol_cnt integer,

o_all_local integer,

o_entry_d timestamp

) WITH (FILLFACTOR=80);

create table bmsql_order_line (

ol_w_id integer not null,

ol_d_id integer not null,

ol_o_id integer not null,

ol_number integer not null,

ol_i_id integer not null,

ol_delivery_d timestamp,

ol_amount decimal(6,2),

ol_supply_w_id integer,

ol_quantity integer,

ol_dist_info char(24)

) WITH (FILLFACTOR=80) tablespace example2

partition by RANGE(ol_w_id)

(

partition bmsql_order_line_p1 values less than (126),

partition bmsql_order_line_p2 values less than (251),

partition bmsql_order_line_p3 values less than (376),

partition bmsql_order_line_p4 values less than (501),

partition bmsql_order_line_p5 values less than (626),

partition bmsql_order_line_p6 values less than (751),

partition bmsql_order_line_p7 values less than (876),

partition bmsql_order_line_p8 values less than (1001)

);

create table bmsql_item (

i_id integer not null,

i_name varchar(24),

i_price decimal(5,2),

i_data varchar(50),

i_im_id integer

);

create table bmsql_stock (

s_w_id integer not null,

s_i_id integer not null,

s_quantity integer,

s_ytd integer,

s_order_cnt integer,

s_remote_cnt integer,

s_data varchar(50),

s_dist_01 char(24),

s_dist_02 char(24),

s_dist_03 char(24),

s_dist_04 char(24),

s_dist_05 char(24),

s_dist_06 char(24),

s_dist_07 char(24),

s_dist_08 char(24),

s_dist_09 char(24),

s_dist_10 char(24)

) WITH (FILLFACTOR=80) tablespace example3

partition by RANGE(s_w_id)

(

partition bmsql_stock_p1 values less than (126),

partition bmsql_stock_p2 values less than (251),

partition bmsql_stock_p3 values less than (376),

partition bmsql_stock_p4 values less than (501),

partition bmsql_stock_p5 values less than (626),

partition bmsql_stock_p6 values less than (751),

partition bmsql_stock_p7 values less than (876),

partition bmsql_stock_p8 values less than (1001)

);

(2)修改 sql.common/indexCreates.sql,改为如下:

alter table bmsql_warehouse add constraint bmsql_warehouse_pkey

primary key (w_id);

alter table bmsql_district add constraint bmsql_district_pkey

primary key (d_w_id, d_id);

alter table bmsql_customer add constraint bmsql_customer_pkey

primary key (c_w_id, c_d_id, c_id);

create index bmsql_customer_idx1

on bmsql_customer (c_w_id, c_d_id, c_last, c_first);

alter table bmsql_oorder add constraint bmsql_oorder_pkey

primary key (o_w_id, o_d_id, o_id);

create index bmsql_oorder_idx1

on bmsql_oorder (o_w_id, o_d_id, o_c_id);

alter table bmsql_new_order add constraint bmsql_new_order_pkey

primary key (no_w_id, no_d_id, no_o_id) using index tablespace example2;

alter table bmsql_order_line add constraint bmsql_order_line_pkey

primary key (ol_w_id, ol_d_id, ol_o_id, ol_number);

alter table bmsql_stock add constraint bmsql_stock_pkey

primary key (s_w_id, s_i_id);

alter table bmsql_item add constraint bmsql_item_pkey

primary key (i_id);

(3)修改数据生成脚本 runDatabaseBuild.sh,具体如下:

!/bin/sh

Cwd=cd $(dirname $0);pwd

if [ $# -lt 1 ] ; then

echo "usage: $(basename $0) PROPS [OPT VAL [...]]" >&2

exit 2

fi

PROPS="$1"

shift

if [ ! -f "${PROPS}" ] ; then

echo "${PROPS}: no such file or directory" >&2

exit 1

fi

DB="$(grep '^db=' $PROPS | sed -e 's/^db=//')"

BEFORE_LOAD="tableCreates_4p"

AFTER_LOAD="indexCreates foreignKeys extraHistID buildFinish"

AFTER_LOAD="indexCreates buildFinish"

for step in ${BEFORE_LOAD} ; do

$Cwd/runSQL.sh "${PROPS}" $step

done

$Cwd/runLoader.sh "${PROPS}" $*

for step in ${AFTER_LOAD} ; do

$Cwd/runSQL.sh "${PROPS}" $step

done

4.3 运行参数配置

进入路径 benchmarksql-5.0/run,复制一份配置文件并修改props_4p_5min.og,作为预热5分钟时使用。

cp props.pg props_4p_5min.og

vim props_4p_5min.og

props_4p_5min.og:将ip、port、my_db_user_name、my_db_user_name改为实际值。

db=postgres

driver=org.postgresql.Driver

conn=jdbc:postgresql://ip:port/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF

user=my_db_user_name

password=my_db_user_name

warehouses=1000

loadWorkers=80

terminals=812

//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

修改完成后保存,再复制一份为 props_4p_60min.og,并将 runMins 的值改为60,作为跑1小时TPCC使用。

cp props_4p_5min.og props_4p_60min.og

vim props_4p_60min.og

db=postgres

driver=org.postgresql.Driver

conn=jdbc:postgresql://ip:port/tpcc1000?prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF

user=my_db_user_name

password=my_db_user_name

warehouses=1000

loadWorkers=80

terminals=812

//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

5、压测

5.1 数据生成

进入benchmark的run目录下,执行以下命令生成数据:

numactl -C 0-19,32-51,64-83,96-115 ./runDatabaseBuild.sh props_4p_5min.og

任务结束后,待数据全部落盘,stop数据库。

将postgresql.conf 的 wal_file_init_num 参数改为 60000。

echo "wal_file_init_num = 60000" >> $DATA_NODE/postgresql.conf

5.2 数据备份

cp -r $DATA_NODE $DATA_BACK

5.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

5.4 以preferred方式绑核启动

(1)查看xlog盘对应的NUMA节点

例如 xlog 对应nvme0,则使用如下命令查看:

cat /sys/class/nvme/nvme0/device/numa_node

如上图所示,结果为0,说明xlog盘对应的NUMA节点为0节点。

(2)绑核启动

通过以下命令启动openGauss数据库。

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分钟预热:

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万以上。

numactl -C 0-19,32-51,64-83,96-115 ./runBenchmark.sh props_4p_60min.og

openGauss基于4路鲲鹏服务器的性能调优的更多相关文章

  1. [Spark性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

    本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质 ...

  2. spark 性能调优(一) 性能调优的本质、spark资源使用原理、调优要点分析

    转载:http://www.cnblogs.com/jcchoiling/p/6440709.html 一.大数据性能调优的本质 编程的时候发现一个惊人的规律,软件是不存在的!所有编程高手级别的人无论 ...

  3. 性能调优的本质、Spark资源使用原理和调优要点分析

    本课主题 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质 ...

  4. 【JAVA进阶架构师指南】之五:JVM性能调优

    前言   首先给大家说声对不起,最近属实太忙了,白天上班,晚上加班,回家还要收拾家里,基本每天做完所有事儿都是凌晨一两点了,没有精力再搞其他的了.   好了,进入正题,让我们来聊聊JVM篇最后一个章节 ...

  5. 鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优

    1.1 CPU与内存子系统性能调优简介 调优思路 性能优化的思路如下: l   如果CPU的利用率不高,说明资源没有充分利用,可以通过工具(如strace)查看应用程序阻塞在哪里,一般为磁盘,网络或应 ...

  6. 鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法

    TaiShan特战队六月底成立,至今百日有余,恰逢1024程序员节,遂整理此文,献礼致敬!希望能为广大在鲲鹏处理器上开发软件.性能调优的程序员们,提供一点帮助.从今天开始,将陆续推出性能调优专题文章. ...

  7. 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...

  8. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化Linux内核参数/etc/sysctl.conf  sysctl  <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...

  9. 鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法

    鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网.物联网.车联网,从而催生了庞大的计算需求.但是功耗墙问题以功耗和冷却两大限制极大的影响了单核算力的发展.为了满足 ...

  10. linux概念之性能调优

    目前,对系统进行性能调试的工具有很多,这些可以两大类:一类是标准的分析工具,即所有的UNIX都会带的分析工具: 另一类是不同厂商的UNIX所特有的性能分析工具,比如HP-UX就有自己的增值性能分析工具 ...

随机推荐

  1. 【Azure Redis 缓存】Redis 连接失败

    问题描述 Azure Redis 出现连接失败,过一会儿后,又能自动恢复. 问题解答 其实,因为Azure Redis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的计划 ...

  2. 【Azure 媒体服务】记使用 Media Service 的官网示例代码 Audio Analyzer 出现卡顿在 Creating event processor host .. 直到 Timeout 问题

    问题描述 在使用Azure Media Service的官网示例 (media-services-v3-java --> AudioAnalytics --> AudioAnalyzer  ...

  3. 【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn

    问题描述 App Service 配置 Application Settings 访问Storage Account.如下: { "name": "WEBSITE_CON ...

  4. Java 小案列 this关键字使用+构造器 +方法+调用

    1 package com.bytezero.thistest; 2 3 public class Boy 4 { 5 private String name; 6 private int age; ...

  5. C++//queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为

    1 //queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为 2 3 4 #include<iostream> 5 #include<queue> ...

  6. python 微信自动发图片,批量发送

    自动发送批量的图片给微信联系人,可为自己的文件传输助手 已实现: 可设置发送时间间隔 发送图片数量 指定接收人 下载链接: python批量自动连发图片给微信好友自动发图片-Python文档类资源-C ...

  7. 线段树-多个懒标记pushdown

    P3373 [模板]线段树 2 这里需要用到两个懒标记,一个懒标记为add,记录加,另一个懒标记为mul,记录乘. 我们需要规定一个优先级,然后考虑如何将懒标记下传. 这里无非有两种顺序,一种是先乘后 ...

  8. 使用 ASP.NET Core MVC 创建 Web API 系列文章目录

    使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使用 ASP.NET Core MVC 创建 Web API(三 ...

  9. 遥感图像镶嵌拼接:ENVI的Pixel Based Mosaicking工具操作方法

      本文介绍基于ENVI软件,利用"Pixel Based Mosaicking"工具实现栅格遥感影像镶嵌拼接的方法.   首先需要说明的是,本文需要镶嵌的遥感影像并不含地理参考信 ...

  10. XAF Blazor TabbedMdi

    开源项目地址:https://gitee.com/easyxaf/blazor-tabbed-mdi 前言 XAF在WinForm中采用了多文档界面(MDI),但在Blazor中却没有,在官网中也有人 ...