mirror of
https://gitee.com/openeuler/A-Tune.git
synced 2025-12-06 08:08:59 +08:00
fix bugfixs for mariadb_distributed
Signed-off-by: jinsaihang <jinsaihang@h-partners.com>
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
|
||||
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
|
||||
|
||||
mysql -h SERVER_IP_1 -u root -e "SHOW VARIABLES LIKE '$1';" | grep -i "$1" | awk '{print $2}'
|
||||
@@ -1,28 +1,28 @@
|
||||
# 本地文件检查与等待逻辑
|
||||
LOG_FILE="PATH/mariadb_tpmc.out"
|
||||
MAX_WAIT=60
|
||||
for ((i=0; i<MAX_WAIT; i++)); do
|
||||
# 如果文件存在,打印信息并继续
|
||||
if [ -f "$LOG_FILE" ]; then
|
||||
break
|
||||
fi
|
||||
# 如果文件不存在,等待1秒
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# 如果超时后文件仍然不存在,退出
|
||||
if [ ! -f "$LOG_FILE" ]; then
|
||||
echo "Local file $LOG_FILE does not exist after waiting $MAX_WAIT seconds!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取本地文件内容
|
||||
local_value=$(cat PATH/mariadb_tpmc.out)
|
||||
|
||||
# 检查远程文件是否存在并获取内容
|
||||
ssh -q root@CLIENT_IP_2 'sleep 1'
|
||||
remote_value=$(ssh -q root@9.82.199.187 'if [ -f PATH/mariadb_tpmc.out ]; then cat PATH/mariadb_tpmc.out; else echo "Remote file does not exist!"; exit 1; fi')
|
||||
|
||||
# 将两个值相加并输出结果
|
||||
sum=$((local_value + remote_value))
|
||||
echo $sum
|
||||
# 本地文件检查与等待逻辑
|
||||
LOG_FILE="PATH/tpcc/mariadb_tpmc.out"
|
||||
MAX_WAIT=60
|
||||
for ((i=0; i<MAX_WAIT; i++)); do
|
||||
# 如果文件存在,打印信息并继续
|
||||
if [ -f "$LOG_FILE" ]; then
|
||||
break
|
||||
fi
|
||||
# 如果文件不存在,等待1秒
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# 如果超时后文件仍然不存在,退出
|
||||
if [ ! -f "$LOG_FILE" ]; then
|
||||
echo "Local file $LOG_FILE does not exist after waiting $MAX_WAIT seconds!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取本地文件内容
|
||||
local_value=$(cat PATH/mariadb_tpmc.out)
|
||||
|
||||
# 检查远程文件是否存在并获取内容
|
||||
ssh -q root@CLIENT_IP_2 'sleep 1'
|
||||
remote_value=$(ssh -q root@CLIENT_IP_2 'if [ -f PATH/tpcc/mariadb_tpmc.out ]; then cat PATH/tpcc/mariadb_tpmc.out; else echo "Remote file does not exist!"; exit 1; fi')
|
||||
|
||||
# 将两个值相加并输出结果
|
||||
sum=$((local_value + remote_value))
|
||||
echo $sum
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd PATH
|
||||
sh tpcc_benchmark.sh >> debug_tpcc1.log 2>&1 &
|
||||
local=$!
|
||||
sh remote_benchmark.sh >> debug_tpcc2.log 2>&1 &
|
||||
remote=$!
|
||||
|
||||
wait $local
|
||||
#!/bin/bash
|
||||
set -x
|
||||
rm -rf debug_tpcc1.log
|
||||
rm -rf debug_tpcc2.log
|
||||
|
||||
cd PATH
|
||||
sh tpcc_benchmark.sh > debug_tpcc1.log 2>&1 &
|
||||
local=$!
|
||||
sh remote_benchmark.sh > debug_tpcc2.log 2>&1 &
|
||||
remote=$!
|
||||
|
||||
wait $local
|
||||
wait $remote
|
||||
@@ -1,12 +1,12 @@
|
||||
project: "mariadb"
|
||||
engine: "gbrt"
|
||||
iterations: 30
|
||||
random_starts: 10
|
||||
|
||||
benchmark: "sh PATH/mariadb_benchmark.sh"
|
||||
evaluations:
|
||||
- name: "tpmc"
|
||||
info:
|
||||
get: "sh PATH/get_tpmc.sh"
|
||||
type: "negative"
|
||||
weight: 100
|
||||
project: "mariadb"
|
||||
engine: "gbrt"
|
||||
iterations: 30
|
||||
random_starts: 10
|
||||
|
||||
benchmark: "sh PATH/mariadb_benchmark.sh"
|
||||
evaluations:
|
||||
- name: "tpmc"
|
||||
info:
|
||||
get: "sh PATH/get_tpmc.sh"
|
||||
type: "negative"
|
||||
weight: 100
|
||||
|
||||
@@ -1,215 +1,215 @@
|
||||
project: "mariadb"
|
||||
maxiterations: 100
|
||||
startworkload: "sh PATH/start_maraidb.sh"
|
||||
stopworkload: "sh PATH/stop_maraidb.sh"
|
||||
object :
|
||||
-
|
||||
name : "mariadb.key_buffer_size"
|
||||
info :
|
||||
desc : "Index parameters of the myisam storage engine"
|
||||
get : "sh PATH/get_mariadb_param_info.sh key_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh key_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 1048576
|
||||
- 53687091
|
||||
step : 5048576
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.max_allowed_packet"
|
||||
info :
|
||||
desc : "Maximum number of received packets"
|
||||
get : "sh PATH/get_mariadb_param_info.sh max_allowed_packet"
|
||||
set : "sh PATH/set_mariadb_param_info.sh max_allowed_packet $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10485760
|
||||
- 104857600
|
||||
step : 5048576
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.table_open_cache"
|
||||
info :
|
||||
desc : "Table cache for storing data"
|
||||
get : "sh PATH/get_mariadb_param_info.sh table_open_cache"
|
||||
set : "sh PATH/set_mariadb_param_info.sh table_open_cache $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 16000
|
||||
- 1000000
|
||||
step : 50000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.back_log"
|
||||
info :
|
||||
desc : "The number of new requests stored in the stack"
|
||||
get : "sh PATH/get_mariadb_param_info.sh back_log"
|
||||
set : "sh PATH/set_mariadb_param_info.sh back_log $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 500
|
||||
- 4096
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.sort_buffer_size"
|
||||
info :
|
||||
desc : "Cache used for sorting"
|
||||
get : "sh PATH/get_mariadb_param_info.sh sort_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh sort_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 2560000
|
||||
- 10485760
|
||||
step : 102400
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.read_buffer_size"
|
||||
info :
|
||||
desc : "the buffer allocated to each thread during sequential table scanning."
|
||||
get : "sh PATH/get_mariadb_param_info.sh read_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh read_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10240000
|
||||
- 104857600
|
||||
step : 1024000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.read_rnd_buffer_size"
|
||||
info :
|
||||
desc : "the buffer allocated to each thread when the table is read randomly"
|
||||
get : "sh PATH/get_mariadb_param_info.sh read_rnd_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh read_rnd_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10240000
|
||||
- 104857600
|
||||
step : 1024000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.thread_cache_size"
|
||||
info :
|
||||
desc : "Number of threads saved in the cache that are reused"
|
||||
get : "sh PATH/get_mariadb_param_info.sh thread_cache_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh thread_cache_size $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 8
|
||||
- 500
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.max_connections"
|
||||
info :
|
||||
desc : "the max number of connections"
|
||||
get : "sh PATH/get_mariadb_param_info.sh max_connections"
|
||||
set : "sh PATH/set_mariadb_param_info.sh max_connections $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 300
|
||||
- 1500
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.max_heap_table_size"
|
||||
info :
|
||||
desc : "size of a memory table that can be created"
|
||||
get : "sh PATH/get_mariadb_param_info.sh max_heap_table_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh max_heap_table_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10240000
|
||||
- 104857600
|
||||
step : 1024000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.innodb_log_buffer_size"
|
||||
info :
|
||||
desc : "size of innodb log buffer"
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_log_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_log_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10485760
|
||||
- 104857600
|
||||
step : 1048576
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.innodb_write_io_threads"
|
||||
info :
|
||||
desc : "size of innodb log buffer"
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_write_io_threads"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_write_io_threads $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 4
|
||||
- 16
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.innodb_read_io_threads"
|
||||
info :
|
||||
desc : "size of innodb log buffer"
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_read_io_threads"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_read_io_threads $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 4
|
||||
- 16
|
||||
dtype : "int"
|
||||
-
|
||||
name : "innodb_buffer_pool_size"
|
||||
info :
|
||||
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_size'."
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 21474836480
|
||||
- 26843545600
|
||||
step : 1073741824
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "innodb_buffer_pool_instances"
|
||||
info :
|
||||
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_instances'."
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_instances"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_instances $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 1
|
||||
- 8
|
||||
dtype : "int"
|
||||
-
|
||||
name : "innodb_io_capacity"
|
||||
info :
|
||||
desc : "MySQL [mysqld] parameters 'innodb_io_capacity'."
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_io_capacity"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_io_capacity $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 100
|
||||
- 2000
|
||||
dtype : "int"
|
||||
project: "mariadb"
|
||||
maxiterations: 100
|
||||
startworkload: "sh PATH/start_maraidb.sh"
|
||||
stopworkload: "sh PATH/stop_maraidb.sh"
|
||||
object :
|
||||
-
|
||||
name : "mariadb.key_buffer_size"
|
||||
info :
|
||||
desc : "Index parameters of the myisam storage engine"
|
||||
get : "sh PATH/get_mariadb_param_info.sh key_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh key_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 1048576
|
||||
- 53687091
|
||||
step : 5048576
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.max_allowed_packet"
|
||||
info :
|
||||
desc : "Maximum number of received packets"
|
||||
get : "sh PATH/get_mariadb_param_info.sh max_allowed_packet"
|
||||
set : "sh PATH/set_mariadb_param_info.sh max_allowed_packet $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10485760
|
||||
- 104857600
|
||||
step : 5048576
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.table_open_cache"
|
||||
info :
|
||||
desc : "Table cache for storing data"
|
||||
get : "sh PATH/get_mariadb_param_info.sh table_open_cache"
|
||||
set : "sh PATH/set_mariadb_param_info.sh table_open_cache $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 16000
|
||||
- 1000000
|
||||
step : 50000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.back_log"
|
||||
info :
|
||||
desc : "The number of new requests stored in the stack"
|
||||
get : "sh PATH/get_mariadb_param_info.sh back_log"
|
||||
set : "sh PATH/set_mariadb_param_info.sh back_log $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 500
|
||||
- 4096
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.sort_buffer_size"
|
||||
info :
|
||||
desc : "Cache used for sorting"
|
||||
get : "sh PATH/get_mariadb_param_info.sh sort_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh sort_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 2560000
|
||||
- 10485760
|
||||
step : 102400
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.read_buffer_size"
|
||||
info :
|
||||
desc : "the buffer allocated to each thread during sequential table scanning."
|
||||
get : "sh PATH/get_mariadb_param_info.sh read_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh read_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10240000
|
||||
- 104857600
|
||||
step : 1024000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.read_rnd_buffer_size"
|
||||
info :
|
||||
desc : "the buffer allocated to each thread when the table is read randomly"
|
||||
get : "sh PATH/get_mariadb_param_info.sh read_rnd_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh read_rnd_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10240000
|
||||
- 104857600
|
||||
step : 1024000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.thread_cache_size"
|
||||
info :
|
||||
desc : "Number of threads saved in the cache that are reused"
|
||||
get : "sh PATH/get_mariadb_param_info.sh thread_cache_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh thread_cache_size $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 8
|
||||
- 500
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.max_connections"
|
||||
info :
|
||||
desc : "the max number of connections"
|
||||
get : "sh PATH/get_mariadb_param_info.sh max_connections"
|
||||
set : "sh PATH/set_mariadb_param_info.sh max_connections $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 300
|
||||
- 1500
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.max_heap_table_size"
|
||||
info :
|
||||
desc : "size of a memory table that can be created"
|
||||
get : "sh PATH/get_mariadb_param_info.sh max_heap_table_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh max_heap_table_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10240000
|
||||
- 104857600
|
||||
step : 1024000
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.innodb_log_buffer_size"
|
||||
info :
|
||||
desc : "size of innodb log buffer"
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_log_buffer_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_log_buffer_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 10485760
|
||||
- 104857600
|
||||
step : 1048576
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.innodb_write_io_threads"
|
||||
info :
|
||||
desc : "size of innodb log buffer"
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_write_io_threads"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_write_io_threads $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 4
|
||||
- 16
|
||||
dtype : "int"
|
||||
-
|
||||
name : "mariadb.innodb_read_io_threads"
|
||||
info :
|
||||
desc : "size of innodb log buffer"
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_read_io_threads"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_read_io_threads $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 4
|
||||
- 16
|
||||
dtype : "int"
|
||||
-
|
||||
name : "innodb_buffer_pool_size"
|
||||
info :
|
||||
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_size'."
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_size"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_size $value"
|
||||
needrestart : "true"
|
||||
type : "discrete"
|
||||
scope :
|
||||
- 21474836480
|
||||
- 26843545600
|
||||
step : 1073741824
|
||||
items :
|
||||
dtype : "int"
|
||||
-
|
||||
name : "innodb_buffer_pool_instances"
|
||||
info :
|
||||
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_instances'."
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_instances"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_instances $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 1
|
||||
- 8
|
||||
dtype : "int"
|
||||
-
|
||||
name : "innodb_io_capacity"
|
||||
info :
|
||||
desc : "MySQL [mysqld] parameters 'innodb_io_capacity'."
|
||||
get : "sh PATH/get_mariadb_param_info.sh innodb_io_capacity"
|
||||
set : "sh PATH/set_mariadb_param_info.sh innodb_io_capacity $value"
|
||||
needrestart : "true"
|
||||
type : "continuous"
|
||||
scope :
|
||||
- 100
|
||||
- 2000
|
||||
dtype : "int"
|
||||
|
||||
@@ -1,389 +1,370 @@
|
||||
压力机(客户端)两台:压力机1(9.82.230.66)、压力机2(9.82.199.187)
|
||||
测试机(服务端)两台:测试机1(9.82.179.1)、压力机2(9.82.199.161)
|
||||
# 1.环境准备
|
||||
## 1.1 下载JDK文件
|
||||
在两台物理机上执行
|
||||
JDK下载链接:
|
||||
https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz
|
||||
下载后解压到opt目录下
|
||||
```bash
|
||||
tar -zxvf jdk-21_linux-aarch64_bin.tar.gz -C /opt/
|
||||
```
|
||||
## 1.2 配置临时java环境
|
||||
```bash
|
||||
export JAVA_HOME=/opt/jdk-21.0.6
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
```
|
||||
## 1.3 配置永久java环境(可选)
|
||||
|
||||
打开bashrc文件
|
||||
```bash
|
||||
vim ~/.bashrc
|
||||
```
|
||||
将以下命令追加到文件末尾,并source生效
|
||||
```bash
|
||||
export JAVA_HOME=/opt/jdk-21.0.6
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
```
|
||||
使用source命令使修改生效
|
||||
```bash
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
该步骤在两台压力机上都要执行
|
||||
## 1.4 部署A-Tune环境
|
||||
具体安装启动方式参考A-Tune README-zh 文档第一节“安装A-Tune”,A-Tune仓库链接:https://gitee.com/openeuler/A-Tune
|
||||
|
||||
```bash
|
||||
yum install -y atune atune-engine
|
||||
```
|
||||
加载并启动atuned和atune-engine服务:
|
||||
```bash
|
||||
systemctl start atuned
|
||||
systemctl start atune-engine
|
||||
```
|
||||
下载A-Tune源码,具体操作如下
|
||||
```bash
|
||||
cd ~
|
||||
git clone https://gitee.com/openeuler/A-Tune.git
|
||||
cd A-Tune/examples/tuning/mariadb_distributed
|
||||
```
|
||||
进入目录A-Tune/examples/tuning/mariadb_distributed,并为tpcc创建目录
|
||||
```bash
|
||||
cd A-Tune/examples/tuning/mariadb_distributed
|
||||
mkdir tpcc
|
||||
```
|
||||
|
||||
## 1.5 tpcc部署
|
||||
两台压力机都需要部署
|
||||
下载链接:
|
||||
https://master.dl.sourceforge.net/project/tpccruner/TPCCRunner_SRC_V1.00.zip?viasf=1
|
||||
### 1.5.1 编译
|
||||
在两台压力机上执行
|
||||
将压缩包copy到A-Tune/examples/tuning/mariadb_distributed/tpcc目录下,进入A-Tune/examples/tuning/mariadb_distributed/tpcc目录然后执行如下命令
|
||||
```bash
|
||||
cd tpcc
|
||||
unzip TPCCRunner_SRC_V1.00.zip
|
||||
mkdir log
|
||||
javac -d bin src/iomark/TPCCRunner/*.java
|
||||
```
|
||||
### 1.5.2 修改loader.properties文件
|
||||
在两台压力机上修改conf/example/mysql/loader.properties
|
||||
应手动修改对应测试机的ip,因为两台测试机中mariadb数据库中数据相似,因此这里的ip设置为其中一个测试机的ip即可
|
||||
修改内容如下:
|
||||
```bash
|
||||
driver=com.mysql.jdbc.Driver
|
||||
url=jdbc:mysql://9.82.179.1/hsdb
|
||||
user=root
|
||||
#password=huawei
|
||||
threads=8
|
||||
warehouses=5
|
||||
```
|
||||
### 1.5.3 修改master.properties文件
|
||||
在两台压力机上修改conf/example/mysql/master.properties
|
||||
修改内容如下:
|
||||
```bash
|
||||
listenPort=27891
|
||||
slaves=slave1,slave2
|
||||
|
||||
runMinutes=5
|
||||
warmupMinutes=2
|
||||
|
||||
newOrderPercent=1
|
||||
paymentPercent=1
|
||||
orderStatusPercent=45
|
||||
deliveryPercent=43
|
||||
stockLevelPercent=10
|
||||
|
||||
newOrderThinkSecond=0
|
||||
paymentThinkSecond=0
|
||||
orderStatusThinkSecond=0
|
||||
deliveryThinkSecond=0
|
||||
stockLevelThinkSecond=0
|
||||
```
|
||||
### 1.5.4 修改slave1.properties文件
|
||||
在两台压力机上修改conf/example/mysql/slave1.properties
|
||||
应手动修改对应测试机1的ip
|
||||
修改内容如下:
|
||||
```bash
|
||||
name=slave1
|
||||
masterAddress=127.0.0.1
|
||||
masterPort=27891
|
||||
|
||||
driver=com.mysql.jdbc.Driver
|
||||
url=jdbc:mysql://9.82.179.1/hsdb
|
||||
user=root
|
||||
#password=huawei
|
||||
poolSize=120
|
||||
|
||||
userCount=100
|
||||
warehouseCount=500
|
||||
startWarehouseID=1
|
||||
```
|
||||
### 1.5.5 修改slave2.properties文件
|
||||
在两台压力机上修改conf/example/mysql/slave2.properties
|
||||
应手动修改对应测试机2的ip
|
||||
修改内容如下:
|
||||
```bash
|
||||
name=slave2
|
||||
masterAddress=127.0.0.1
|
||||
masterPort=27891
|
||||
|
||||
driver=com.mysql.jdbc.Driver
|
||||
url=jdbc:mysql://9.82.179.1/hsdb
|
||||
user=root
|
||||
#password=huawei
|
||||
poolSize=96
|
||||
|
||||
userCount=100
|
||||
warehouseCount=500
|
||||
startWarehouseID=1
|
||||
```
|
||||
|
||||
|
||||
## 1.6 安装mariadb数据库
|
||||
在两台测试机上安装数据库mariadb
|
||||
```bash
|
||||
yum install mariadb -y
|
||||
yum install mariadb-server -y
|
||||
```
|
||||
## 1.7 配置数据库免密登录
|
||||
修改/etc/my.cnf文件,在[mysqld]后添加skip-grant-tables(登录时跳过权限检查)
|
||||
```bash
|
||||
skip-grant-tables
|
||||
```
|
||||
## 1.8 写入数据
|
||||
|
||||
在两台测试机上执行,在解压后的tpcc目录,在数据库中创建数据
|
||||
```bash
|
||||
mysql -uroot -phuawei -vvv -n < sql/example/mysql/create_database.sql
|
||||
mysql -uroot -phuawei -vvv -n < sql/example/mysql/create_table.sql
|
||||
```
|
||||
在两台压力机上执行,向数据库中加载数据
|
||||
```bash
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Loader conf/example/mysql/loader.properties
|
||||
```
|
||||
在两台测试机上执行,在数据库中创建索引,加快查找速度
|
||||
```bash
|
||||
mysql -uroot -phuawei -vvv -n < sql/example/mysql/create_index.sql
|
||||
```
|
||||
# 2.调优环境准备
|
||||
压力机相当于客户端节点
|
||||
## 2.1 运行环境准备
|
||||
克隆A-Tune仓库
|
||||
```bash
|
||||
cd ~
|
||||
git clone https://gitee.com/openeuler/A-Tune.git
|
||||
cd /root/A-Tune/examples/tuning/mariadb_distributed
|
||||
```
|
||||
在压力机1上执行,运行prepare.sh脚本来替换调优文件中的路径,执行后还需输入压力机2的ip,和两台对应测试机的ip。
|
||||
```bash
|
||||
sh prepare.sh
|
||||
```
|
||||
客户端ip相当于压力机ip,服务端ip相当于测试机ip,执行结果如下:
|
||||
```bash
|
||||
[root@localhost mariadb_distributed]# sh prepare.sh
|
||||
path: /root/gitee/A-Tune/examples/tuning/mariadb_distributed
|
||||
[INPUT] enter client_ip_2 of testbench to used:9.82.199.187
|
||||
[INPUT] enter server_ip_1 of testbench to used:9.82.179.1
|
||||
[INPUT] enter server_ip_2 of testbench to used:9.82.199.161
|
||||
[INFO] update path for mariadb files
|
||||
[INFO] update ip for mariadb files
|
||||
cp mariadb_server.yaml to/etc/atuned/tuning
|
||||
finish prepare
|
||||
```
|
||||
## 2.2 测试benchmark脚本能否正常运行
|
||||
在压力机1上的A-Tune/examples/tuning/mariadb_distributed目录下执行tpcc_benchmark.sh脚本,测试benchmark能否在调优环境中运行:
|
||||
```bash
|
||||
sh tpcc_benchmark.sh
|
||||
```
|
||||
可以通过观察mariadb.log,slave1.log,slave2.log日志文件来查看benchmark运行过程
|
||||
```bash
|
||||
tail -f tpcc/mariadb.log
|
||||
tail -f tpcc/slave1.log
|
||||
tail -f tpcc/slave2.log
|
||||
```
|
||||
## 2.3 测试benchmark脚本在远程机器上能否正常运行
|
||||
在压力机1上的A-Tune/examples/tuning/mariadb_distributed目录下执行tmp-remote.sh脚本,测试benchmark能否在调优环境中运行:
|
||||
```bash
|
||||
sh tmp-remote.sh
|
||||
```
|
||||
在压力机2上,A-Tune/examples/tuning/mariadb_distributed目录下可以观察mariadb.log,slave1.log,slave2.log日志文件来查看benchmark运行过程
|
||||
```bash
|
||||
tail -f tpcc/mariadb.log
|
||||
tail -f tpcc/slave1.log
|
||||
tail -f tpcc/slave2.log
|
||||
```
|
||||
## 2.4 运行总的benchmark脚本(可选)
|
||||
在压力机1上运行mariadb_benchmark.sh,该脚本同时进行本地和远程的benchmark运行,可以观察本地压力机mariadb.log日志来查看运行过程:
|
||||
```bash
|
||||
sh mariadb_benchmark.sh
|
||||
```
|
||||
该脚本正常运行后证明benchmark基线数据可以正常获取。
|
||||
|
||||
## 2.5 atune调优
|
||||
atune-adm tuning 是 A-Tune 的调优命令,它会根据mariadb_client.yaml中的配置文件对mariadb数据库进行调优。会根据环境和性能数据自动选择合适的调优策略,优化集群的性能。调优过程中,可以通过查看mariadb.log、debug.log日志来确定服务是否正常执行:
|
||||
```bash
|
||||
atune-adm tuning --project mariadb --detail mariadb_client.yaml
|
||||
```
|
||||
|
||||
执行调优命令后,会先执行benchmark获取基线数据,然后加载mariadb项目的调优配置文件,输出如下:
|
||||
第一轮输出:
|
||||
Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
|
||||
代表最优的性能指标,以及性能提升比例,对比基线是第一轮benchmark的结果。
|
||||
```bash
|
||||
[root@localhost mariadb_distributed]# atune-adm tuning --project mariadb --detail mariadb_client.yaml
|
||||
Start to benchmark baseline...
|
||||
1.Loading its corresponding tuning project: mariadb
|
||||
2.Start to tuning the system......
|
||||
Current Tuning Progress......(1/30)
|
||||
Used time: 10m27s, Total Time: 10m27s, Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
|
||||
The 1th recommand parameters is: mariadb.key_buffer_size=1048576,mariadb.max_allowed_packet=20582912,mariadb.table_open_cache=66000,mariadb.back_log=3677,mariadb.sort_buffer_size=6963200,mariadb.read_buffer_size=16384000,mariadb.read_rnd_buffer_size=54272000,mariadb.thread_cache_size=462,mariadb.max_connections=1169,mariadb.max_heap_table_size=20480000,mariadb.innodb_log_buffer_size=63963136,mariadb.innodb_write_io_threads=5,mariadb.innodb_read_io_threads=10,innodb_buffer_pool_size=26843545000,innodb_buffer_pool_instances=3,innodb_io_capacity=1843
|
||||
The 1th evaluation value: (tpmc=396916.00)(3.95%)
|
||||
```
|
||||
|
||||
## 2.6 恢复原有的配置参数(可选)
|
||||
原始的参数配置文件为/var/atuned/ceph-tuning-restore.conf。
|
||||
可以先执行如下命令恢复调优前的环境配置:
|
||||
```bash
|
||||
atune-adm tuning --restore --project mariadb
|
||||
```
|
||||
# 3.主要文件功能介绍
|
||||
## set_mariadb_param_info.sh
|
||||
该脚本在mariadb_server.yaml中使用,获取测试机1中mariadb相关的参数值,用来进行本地调优。(因为测试机1和测试机2中生成的mariadb数据比较接近,因此用使用第一个测试机的数据来进行调优)
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
|
||||
|
||||
mysql -h SERVER_IP_1 -u root -e "SHOW VARIABLES LIKE '$1';" | grep -i "$1" | awk '{print $2}'
|
||||
```
|
||||
## set_mariadb_param_info.sh
|
||||
该脚本在mariadb_server.yaml中使用,分发获取到的mariadb调优参数到各个测试机中,提升mariadb服务的性能。
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
value=$2
|
||||
|
||||
# 构建命令
|
||||
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
|
||||
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
```
|
||||
## mariadb_benchmark.sh
|
||||
该脚本是总的benchmark执行脚本,用于获取基线数据,其中包含了本地执行benchmark和远程执行benchmark两个步骤。本地和远程执行benchmark脚本后会获取进程号,通过wait命令来保证同时结束。同时会将执行过程重定向到debug.log日志文件中。
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd PATH
|
||||
sh tpcc_benchmark.sh >> debug_tpcc1.log 2>&1 &
|
||||
local=$!
|
||||
sh remote_benchmark.sh >> debug_tpcc2.log 2>&1 &
|
||||
remote=$!
|
||||
|
||||
wait $local
|
||||
wait $remote
|
||||
```
|
||||
## tpcc_benchmark.sh
|
||||
该脚本用来进行本地benchmark基线运行,主要是运行基于java的tpcc基准测试程序。三条命令执行后会将结果重定向mariadb.log、slave1.log、slave2.log日志文件中,可以通过观察该日志文件来获取执行信息。
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd tpcc
|
||||
rm -rf mariadb.log
|
||||
rm -rf slave1.log
|
||||
rm -rf slave2.log
|
||||
rm -rf mariadb_tpmc.out
|
||||
|
||||
pkill bash
|
||||
sleep 1
|
||||
pkill java
|
||||
sleep 1
|
||||
ps -ef|grep java
|
||||
echo 'start runing'
|
||||
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
|
||||
master_pid=$!
|
||||
echo "Starting Master..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
|
||||
slave1_pid=$!
|
||||
echo "Starting Slave1..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
|
||||
slave2_pid=$!
|
||||
echo "Starting Slave2..."
|
||||
sleep 1
|
||||
|
||||
# 监控 slave1.log
|
||||
tail -f slave1.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave1.log detected, killing process..."
|
||||
kill $slave1_pid # 杀死 slave1 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 slave2.log
|
||||
tail -f slave2.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave2.log detected, killing process..."
|
||||
kill $slave2_pid # 杀死 slave2 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 mariadb.log
|
||||
tail -f mariadb.log | while read line; do
|
||||
if [[ "$line" == *"terminate users"* ]]; then
|
||||
echo "Terminating users at mariadb1.log detected, killing process..."
|
||||
kill $master_pid # 杀死 master 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 等待所有后台任务完成
|
||||
wait $slave1_pid
|
||||
wait $slave2_pid
|
||||
wait $master_pid
|
||||
|
||||
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
|
||||
echo $total > mariadb_tpmc.out
|
||||
```
|
||||
## remote_benchmark.sh
|
||||
该脚本用来在远程执行压力机2的benchmark基线,需要保证远程压力机的路径和当前环境的中的路径一致,
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# 在远程服务器上执行脚本并放入后台
|
||||
ssh -q root@CLIENT_IP_2 "cd PATH && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
|
||||
|
||||
sleep 5
|
||||
|
||||
# 监控远程日志,检测到特定日志内容时终止
|
||||
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
|
||||
|
||||
# # 等待所有后台进程完成
|
||||
wait
|
||||
```
|
||||
压力机(客户端)两台:压力机1(9.82.230.66)、压力机2(9.82.199.187)
|
||||
测试机(服务端)两台:测试机1(9.82.179.1)、压力机2(9.82.199.161)
|
||||
# 1.环境准备
|
||||
## 1.1 下载JDK文件
|
||||
在两台物理机上执行
|
||||
JDK下载链接:
|
||||
https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz
|
||||
下载后解压到opt目录下
|
||||
```bash
|
||||
tar -zxvf jdk-21_linux-aarch64_bin.tar.gz -C /opt/
|
||||
```
|
||||
## 1.2 配置临时java环境
|
||||
```bash
|
||||
export JAVA_HOME=/opt/jdk-21.0.6
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
```
|
||||
## 1.3 配置永久java环境(可选)
|
||||
|
||||
打开bashrc文件
|
||||
```bash
|
||||
vim ~/.bashrc
|
||||
```
|
||||
将以下命令追加到文件末尾,并source生效
|
||||
```bash
|
||||
export JAVA_HOME=/opt/jdk-21.0.6
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
```
|
||||
使用source命令使修改生效
|
||||
```bash
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
该步骤在两台压力机上都要执行,包括A-Tune源码也需要下载到相同的路径,否则可能无法远程执行另外一台压力机的benchmark。
|
||||
## 1.4 部署A-Tune环境
|
||||
部署环境时,需要保证两台压力机上的源代码路径是一致的,下文给出的参考方法是两台压力机都到root目录下克隆仓库,也可以根据实际环境进行路径的更改,但都需要保证两个压力机中代码路径的一致,便于后续远程执行benchmark命令。
|
||||
具体安装启动方式参考A-Tune README-zh 文档第一节“安装A-Tune”,A-Tune仓库链接:https://gitee.com/openeuler/A-Tune
|
||||
|
||||
```bash
|
||||
yum install -y atune atune-engine
|
||||
```
|
||||
加载并启动atuned和atune-engine服务:
|
||||
```bash
|
||||
systemctl start atuned
|
||||
systemctl start atune-engine
|
||||
```
|
||||
下载A-Tune源码,具体操作如下
|
||||
```bash
|
||||
cd ~
|
||||
git clone https://gitee.com/openeuler/A-Tune.git
|
||||
```
|
||||
进入目录A-Tune/examples/tuning/mariadb_distributed,并为tpcc创建目录
|
||||
```bash
|
||||
cd A-Tune/examples/tuning/mariadb_distributed
|
||||
mkdir tpcc
|
||||
```
|
||||
|
||||
## 1.5 tpcc部署
|
||||
两台压力机都需要部署,可以在一台压力机上配置完成后拷贝到另一台压力机上的相同路径。
|
||||
下载链接:
|
||||
https://master.dl.sourceforge.net/project/tpccruner/TPCCRunner_SRC_V1.00.zip?viasf=1
|
||||
### 1.5.1 编译
|
||||
在两台压力机上执行
|
||||
将压缩包copy到A-Tune/examples/tuning/mariadb_distributed/tpcc目录下,进入A-Tune/examples/tuning/mariadb_distributed/tpcc目录然后执行如下命令
|
||||
```bash
|
||||
cd tpcc
|
||||
unzip TPCCRunner_SRC_V1.00.zip
|
||||
mkdir log
|
||||
javac -d bin src/iomark/TPCCRunner/*.java
|
||||
```
|
||||
### 1.5.2 修改loader.properties文件
|
||||
在两台压力机上修改conf/example/mysql/loader.properties文件。
|
||||
应手动修改对应测试机的ip,一台压力机对应一台测试机。
|
||||
修改内容如下:
|
||||
```bash
|
||||
driver=com.mysql.jdbc.Driver
|
||||
url=jdbc:mysql://9.82.179.1/hsdb
|
||||
user=root
|
||||
#password=huawei
|
||||
threads=8
|
||||
warehouses=5
|
||||
```
|
||||
### 1.5.3 修改master.properties文件
|
||||
在两台压力机上修改conf/example/mysql/master.properties
|
||||
修改内容如下:
|
||||
```bash
|
||||
listenPort=27891
|
||||
slaves=slave1,slave2
|
||||
|
||||
runMinutes=5
|
||||
warmupMinutes=2
|
||||
|
||||
newOrderPercent=1
|
||||
paymentPercent=1
|
||||
orderStatusPercent=45
|
||||
deliveryPercent=43
|
||||
stockLevelPercent=10
|
||||
|
||||
newOrderThinkSecond=0
|
||||
paymentThinkSecond=0
|
||||
orderStatusThinkSecond=0
|
||||
deliveryThinkSecond=0
|
||||
stockLevelThinkSecond=0
|
||||
```
|
||||
### 1.5.4 修改slave1.properties文件
|
||||
在两台压力机上修改conf/example/mysql/slave1.properties
|
||||
应手动修改对应测试机1的ip
|
||||
修改内容如下:
|
||||
```bash
|
||||
name=slave1
|
||||
masterAddress=127.0.0.1
|
||||
masterPort=27891
|
||||
|
||||
driver=com.mysql.jdbc.Driver
|
||||
url=jdbc:mysql://9.82.179.1/hsdb
|
||||
user=root
|
||||
#password=huawei
|
||||
poolSize=120
|
||||
|
||||
userCount=100
|
||||
warehouseCount=500
|
||||
startWarehouseID=1
|
||||
```
|
||||
### 1.5.5 修改slave2.properties文件
|
||||
在两台压力机上修改conf/example/mysql/slave2.properties
|
||||
应手动修改对应测试机2的ip
|
||||
修改内容如下:
|
||||
```bash
|
||||
name=slave2
|
||||
masterAddress=127.0.0.1
|
||||
masterPort=27891
|
||||
|
||||
driver=com.mysql.jdbc.Driver
|
||||
url=jdbc:mysql://9.82.199.161/hsdb
|
||||
user=root
|
||||
#password=huawei
|
||||
poolSize=120
|
||||
|
||||
userCount=100
|
||||
warehouseCount=500
|
||||
startWarehouseID=1
|
||||
```
|
||||
|
||||
|
||||
## 1.6 安装mariadb数据库
|
||||
在两台测试机上安装数据库mariadb
|
||||
```bash
|
||||
yum install mariadb -y
|
||||
yum install mariadb-server -y
|
||||
```
|
||||
## 1.7 配置数据库免密登录
|
||||
修改/etc/my.cnf文件,在[mysqld]后添加skip-grant-tables(登录时跳过权限检查)
|
||||
```bash
|
||||
skip-grant-tables
|
||||
```
|
||||
## 1.8 写入数据
|
||||
|
||||
在两台测试机上执行,下载TPCCRunner_SRC_V1.00.zip压缩包,解压后,在数据库中创建数据
|
||||
```bash
|
||||
mysql -uroot -vvv -n < sql/example/mysql/create_database.sql
|
||||
mysql -uroot -vvv -n < sql/example/mysql/create_table.sql
|
||||
```
|
||||
在两台压力机上执行,向数据库中加载数据
|
||||
```bash
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Loader conf/example/mysql/loader.properties
|
||||
```
|
||||
在两台测试机上执行,在数据库中创建索引,加快查找速度
|
||||
```bash
|
||||
mysql -uroot -vvv -n < sql/example/mysql/create_index.sql
|
||||
```
|
||||
# 2.调优环境准备
|
||||
压力机相当于客户端节点
|
||||
## 2.1 运行环境准备
|
||||
进入A-Tune仓库
|
||||
```bash
|
||||
cd /root/A-Tune/examples/tuning/mariadb_distributed
|
||||
```
|
||||
在压力机1上执行,运行prepare.sh脚本来替换调优文件中的路径,执行后还需输入压力机2的ip,和两台对应测试机的ip。
|
||||
在压力机1上执行后,可以使用scp命令拷贝到另一台压力机
|
||||
```bash
|
||||
sh prepare.sh
|
||||
```
|
||||
本地执行命令的机器为client_ip_1,
|
||||
压力机2的为client_ip_2,
|
||||
两个mariadb数据库所在的测试机分别为server_ip_1、server_ip_2,
|
||||
执行结果如下:
|
||||
```bash
|
||||
[root@localhost mariadb_distributed]# sh prepare.sh
|
||||
path: /root/gitee/A-Tune/examples/tuning/mariadb_distributed
|
||||
[INPUT] enter client_ip_2 of testbench to used:9.82.199.187
|
||||
[INPUT] enter server_ip_1 of testbench to used:9.82.179.1
|
||||
[INPUT] enter server_ip_2 of testbench to used:9.82.199.161
|
||||
[INFO] update path for mariadb files
|
||||
[INFO] update ip for mariadb files
|
||||
cp mariadb_server.yaml to/etc/atuned/tuning
|
||||
finish prepare
|
||||
```
|
||||
|
||||
## 2.2 运行总的benchmark脚本
|
||||
在压力机1上运行mariadb_benchmark.sh,该脚本同时进行本地和远程的benchmark运行,可以观察本地压力机debug_tpcc1.log日志、tpcc目录下的mariadb.log日志来查看运行过程:
|
||||
```bash
|
||||
sh mariadb_benchmark.sh
|
||||
```
|
||||
|
||||
## 2.3 atune调优
|
||||
atune-adm tuning 是 A-Tune 的调优命令,它会根据mariadb_client.yaml中的配置文件对mariadb数据库进行调优。会根据环境和性能数据自动选择合适的调优策略,优化集群的性能。调优过程中,可以通过查看mariadb.log、debug.log日志来确定服务是否正常执行:
|
||||
```bash
|
||||
atune-adm tuning --project mariadb --detail mariadb_client.yaml
|
||||
```
|
||||
|
||||
执行调优命令后,会先执行benchmark获取基线数据,然后加载mariadb项目的调优配置文件,输出如下:
|
||||
第一轮输出:
|
||||
Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
|
||||
代表最优的性能指标,以及性能提升比例,对比基线是第一轮benchmark的结果。
|
||||
```bash
|
||||
[root@localhost mariadb_distributed]# atune-adm tuning --project mariadb --detail mariadb_client.yaml
|
||||
Start to benchmark baseline...
|
||||
1.Loading its corresponding tuning project: mariadb
|
||||
2.Start to tuning the system......
|
||||
Current Tuning Progress......(1/30)
|
||||
Used time: 10m27s, Total Time: 10m27s, Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
|
||||
The 1th recommand parameters is: mariadb.key_buffer_size=1048576,mariadb.max_allowed_packet=20582912,mariadb.table_open_cache=66000,mariadb.back_log=3677,mariadb.sort_buffer_size=6963200,mariadb.read_buffer_size=16384000,mariadb.read_rnd_buffer_size=54272000,mariadb.thread_cache_size=462,mariadb.max_connections=1169,mariadb.max_heap_table_size=20480000,mariadb.innodb_log_buffer_size=63963136,mariadb.innodb_write_io_threads=5,mariadb.innodb_read_io_threads=10,innodb_buffer_pool_size=26843545000,innodb_buffer_pool_instances=3,innodb_io_capacity=1843
|
||||
The 1th evaluation value: (tpmc=396916.00)(3.95%)
|
||||
```
|
||||
|
||||
## 2.4 恢复原有的配置参数(可选)
|
||||
原始的参数配置文件为/var/atuned/ceph-tuning-restore.conf。
|
||||
可以先执行如下命令恢复调优前的环境配置:
|
||||
```bash
|
||||
atune-adm tuning --restore --project mariadb
|
||||
```
|
||||
# 3.主要文件功能介绍
|
||||
## set_mariadb_param_info.sh
|
||||
该脚本在mariadb_server.yaml中使用,获取测试机1中mariadb相关的参数值,用来进行本地调优。(因为两台测试机硬件规格和环境比较相似,因此用使用第一个测试机的数据来进行调优即可)
|
||||
如果需要扩展为不同机器的mariadb下发参数不同,可以扩展该脚本为两个参数,指定IP和参数名,用于给对应机器的参数进行下发。
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
|
||||
|
||||
mysql -h SERVER_IP_1 -u root -e "SHOW VARIABLES LIKE '$1';" | grep -i "$1" | awk '{print $2}'
|
||||
```
|
||||
## set_mariadb_param_info.sh
|
||||
该脚本用于下发参数到mariadb测试机节点,设置一对参数和值之后会将两个测试机节点设置相同的参数值,若需要多台机器设置不同的值此脚本需额外扩展一个参数IP用于指定对应机器进行参数下发
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
value=$2
|
||||
|
||||
# 构建命令
|
||||
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
|
||||
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
```
|
||||
## mariadb_benchmark.sh
|
||||
该脚本是整体的benchmark执行脚本,用于在两台压力机执行性能压测并汇总结果到压力机1上。tpcc_benchmark.sh为本地执行benchmark脚本,remote_benchmark.sh为远程执行另一台压力机的脚本,该脚本会阻塞进程直到所有机器执行完benchmark结果并输出到mariadb_tpmc.out文件,最终通过get_tpmc.sh脚本将结果求和得到最终tpmc指标反馈给atune。
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd PATH
|
||||
sh tpcc_benchmark.sh >> debug_tpcc1.log 2>&1 &
|
||||
local=$!
|
||||
sh remote_benchmark.sh >> debug_tpcc2.log 2>&1 &
|
||||
remote=$!
|
||||
|
||||
wait $local
|
||||
wait $remote
|
||||
```
|
||||
## tpcc_benchmark.sh
|
||||
该脚本用来执行本地benchmark,基于tpcc-runner基准测试程序进行压测。命令执行后会将结果重定向mariadb.log、slave1.log、slave2.log日志文件中,可以通过观察该日志文件来获取执行信息。
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd tpcc
|
||||
rm -rf mariadb.log
|
||||
rm -rf slave1.log
|
||||
rm -rf slave2.log
|
||||
rm -rf mariadb_tpmc.out
|
||||
|
||||
pkill bash
|
||||
sleep 1
|
||||
pkill java
|
||||
sleep 1
|
||||
ps -ef|grep java
|
||||
echo 'start runing'
|
||||
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
|
||||
master_pid=$!
|
||||
echo "Starting Master..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
|
||||
slave1_pid=$!
|
||||
echo "Starting Slave1..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
|
||||
slave2_pid=$!
|
||||
echo "Starting Slave2..."
|
||||
sleep 1
|
||||
|
||||
# 监控 slave1.log
|
||||
tail -f slave1.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave1.log detected, killing process..."
|
||||
kill $slave1_pid # 杀死 slave1 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 slave2.log
|
||||
tail -f slave2.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave2.log detected, killing process..."
|
||||
kill $slave2_pid # 杀死 slave2 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 mariadb.log
|
||||
tail -f mariadb.log | while read line; do
|
||||
if [[ "$line" == *"terminate users"* ]]; then
|
||||
echo "Terminating users at mariadb1.log detected, killing process..."
|
||||
kill $master_pid # 杀死 master 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 等待所有后台任务完成
|
||||
wait $slave1_pid
|
||||
wait $slave2_pid
|
||||
wait $master_pid
|
||||
|
||||
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
|
||||
echo $total > mariadb_tpmc.out
|
||||
```
|
||||
## remote_benchmark.sh
|
||||
该脚本用来在远程执行压力机2的benchmark,需要保证远程压力机的路径和当前环境的中的路径一致。
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# 在远程服务器上执行脚本并放入后台
|
||||
ssh -q root@CLIENT_IP_2 "cd PATH && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
|
||||
|
||||
sleep 5
|
||||
|
||||
# 监控远程日志,检测到特定日志内容时终止
|
||||
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
|
||||
|
||||
# # 等待所有后台进程完成
|
||||
wait
|
||||
```
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
[client]
|
||||
port = 3306
|
||||
|
||||
[mysqld]
|
||||
port = 3306
|
||||
key_buffer_size = 8388608
|
||||
max_allowed_packet = 16777216
|
||||
table_open_cache = 2000
|
||||
back_log = 900
|
||||
sort_buffer_size = 1048576
|
||||
read_buffer_size = 1048576
|
||||
read_rnd_buffer_size = 262144
|
||||
myisam_sort_buffer_size = 262144
|
||||
thread_cache_size = 9
|
||||
|
||||
max_connections = 5000
|
||||
max_heap_table_size = 67108864
|
||||
|
||||
innodb_buffer_pool_size = 134217728
|
||||
innodb_log_buffer_size = 16777216
|
||||
|
||||
[client]
|
||||
port = 3306
|
||||
|
||||
[mysqld]
|
||||
port = 3306
|
||||
key_buffer_size = 8388608
|
||||
max_allowed_packet = 16777216
|
||||
table_open_cache = 2000
|
||||
back_log = 900
|
||||
sort_buffer_size = 1048576
|
||||
read_buffer_size = 1048576
|
||||
read_rnd_buffer_size = 262144
|
||||
myisam_sort_buffer_size = 262144
|
||||
thread_cache_size = 9
|
||||
|
||||
max_connections = 5000
|
||||
max_heap_table_size = 67108864
|
||||
|
||||
innodb_buffer_pool_size = 134217728
|
||||
innodb_log_buffer_size = 16777216
|
||||
|
||||
skip-grant-tables
|
||||
@@ -1,34 +1,36 @@
|
||||
#!/bin/sh
|
||||
|
||||
path=$(
|
||||
cd "$(dirname "$0")"
|
||||
pwd
|
||||
)
|
||||
echo "path: ${path}"
|
||||
|
||||
read -p "[INPUT] enter client_ip_2 of testbench to used:" CLIENT_IP_2
|
||||
read -p "[INPUT] enter server_ip_1 of testbench to used:" SERVER_IP_1
|
||||
read -p "[INPUT] enter server_ip_2 of testbench to used:" SERVER_IP_2
|
||||
|
||||
echo "[INFO] update path for mariadb files"
|
||||
sed -i "s#PATH#${path}#g" ${path}/get_mariadb_param_info.sh
|
||||
sed -i "s#PATH#${path}#g" ${path}/get_tmpc.sh
|
||||
sed -i "s#PATH#${path}#g" ${path}/mariadb_benchmark.sh
|
||||
sed -i "s#PATH#${path}#g" ${path}/mariadb_client.yaml
|
||||
sed -i "s#PATH#${path}#g" ${path}/mariadb_server.yaml
|
||||
sed -i "s#PATH#${path}#g" ${path}/tmp-remote.sh
|
||||
|
||||
echo "[INFO] update ip for mariadb files"
|
||||
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/get_mariadb_param_info.sh
|
||||
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/set_mariadb_param_info.sh
|
||||
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/set_mariadb_param_info.sh
|
||||
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/start_mariadb.sh
|
||||
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/start_mariadb.sh
|
||||
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/stop_mariadb.sh
|
||||
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/stop_mariadb.sh
|
||||
|
||||
echo "cp mariadb_server.yaml to/etc/atuned/tuning"
|
||||
mkdir -p /etc/atuned/tuning
|
||||
cp $path/mariadb_server.yaml /etc/atuned/tuning
|
||||
|
||||
echo "finish prepare"
|
||||
#!/bin/sh
|
||||
|
||||
path=$(
|
||||
cd "$(dirname "$0")"
|
||||
pwd
|
||||
)
|
||||
echo "path: ${path}"
|
||||
|
||||
read -p "[INPUT] enter client_ip_2 of testbench to used:" CLIENT_IP_2
|
||||
read -p "[INPUT] enter server_ip_1 of testbench to used:" SERVER_IP_1
|
||||
read -p "[INPUT] enter server_ip_2 of testbench to used:" SERVER_IP_2
|
||||
|
||||
echo "[INFO] update path for mariadb files"
|
||||
sed -i "s#PATH#${path}#g" ${path}/get_mariadb_param_info.sh
|
||||
sed -i "s#PATH#${path}#g" ${path}/get_tpmc.sh
|
||||
sed -i "s#PATH#${path}#g" ${path}/mariadb_benchmark.sh
|
||||
sed -i "s#PATH#${path}#g" ${path}/mariadb_client.yaml
|
||||
sed -i "s#PATH#${path}#g" ${path}/mariadb_server.yaml
|
||||
sed -i "s#PATH#${path}#g" ${path}/remote_benchmark.sh
|
||||
|
||||
echo "[INFO] update ip for mariadb files"
|
||||
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/get_mariadb_param_info.sh
|
||||
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/set_mariadb_param_info.sh
|
||||
sed -i "s#SERVER_IP_2#$SERVER_IP_2#g" ${path}/set_mariadb_param_info.sh
|
||||
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/start_mariadb.sh
|
||||
sed -i "s#SERVER_IP_2#$SERVER_IP_2#g" ${path}/start_mariadb.sh
|
||||
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/stop_mariadb.sh
|
||||
sed -i "s#SERVER_IP_2#$SERVER_IP_2#g" ${path}/stop_mariadb.sh
|
||||
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/remote_benchmark.sh
|
||||
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/get_tpmc.sh
|
||||
|
||||
echo "cp mariadb_server.yaml to/etc/atuned/tuning"
|
||||
mkdir -p /etc/atuned/tuning
|
||||
cp $path/mariadb_server.yaml /etc/atuned/tuning
|
||||
|
||||
echo "finish prepare"
|
||||
@@ -1,12 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 在远程服务器上执行脚本并放入后台
|
||||
ssh -q root@CLIENT_IP_2 "cd PATH && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
|
||||
|
||||
sleep 5
|
||||
|
||||
# 监控远程日志,检测到特定日志内容时终止
|
||||
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
|
||||
|
||||
# # 等待所有后台进程完成
|
||||
wait
|
||||
#!/bin/bash
|
||||
|
||||
# 在远程服务器上执行脚本并放入后台
|
||||
ssh -q root@CLIENT_IP_2 "cd PATH && rm -rf tpcc_benchmark.log && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
|
||||
|
||||
sleep 5
|
||||
|
||||
# 监控远程日志,检测到特定日志内容时终止
|
||||
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
|
||||
|
||||
# 等待所有后台进程完成
|
||||
wait
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
value=$2
|
||||
|
||||
# 构建命令
|
||||
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
|
||||
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# 检查是否传入参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "请提供一个参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取传入的参数
|
||||
param=$1
|
||||
value=$2
|
||||
|
||||
# 构建命令
|
||||
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
|
||||
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
ssh -q root@SERVER_IP_1 "systemctl start mariadb"
|
||||
ssh -q root@SERVER_IP_2 "systemctl start mariadb"
|
||||
ssh -q root@SERVER_IP_1 "systemctl start mariadb"
|
||||
ssh -q root@SERVER_IP_2 "systemctl start mariadb"
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
ssh -q root@SERVER_IP_1 "systemctl stop mariadb"
|
||||
ssh -q root@SERVER_IP_2 "systemctl stop mariadb"
|
||||
ssh -q root@SERVER_IP_1 "systemctl stop mariadb"
|
||||
ssh -q root@SERVER_IP_2 "systemctl stop mariadb"
|
||||
|
||||
@@ -1,63 +1,65 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd tpcc
|
||||
rm -rf mariadb.log
|
||||
rm -rf slave1.log
|
||||
rm -rf slave2.log
|
||||
rm -rf mariadb_tpmc.out
|
||||
|
||||
pkill bash
|
||||
sleep 1
|
||||
pkill java
|
||||
sleep 1
|
||||
ps -ef|grep java
|
||||
echo 'start runing'
|
||||
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
|
||||
master_pid=$!
|
||||
echo "Starting Master..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
|
||||
slave1_pid=$!
|
||||
echo "Starting Slave1..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
|
||||
slave2_pid=$!
|
||||
echo "Starting Slave2..."
|
||||
sleep 1
|
||||
|
||||
# 监控 slave1.log
|
||||
tail -f slave1.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave1.log detected, killing process..."
|
||||
kill $slave1_pid # 杀死 slave1 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 slave2.log
|
||||
tail -f slave2.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave2.log detected, killing process..."
|
||||
kill $slave2_pid # 杀死 slave2 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 mariadb.log
|
||||
tail -f mariadb.log | while read line; do
|
||||
if [[ "$line" == *"terminate users"* ]]; then
|
||||
echo "Terminating users at mariadb1.log detected, killing process..."
|
||||
kill $master_pid # 杀死 master 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 等待所有后台任务完成
|
||||
wait $slave1_pid
|
||||
wait $slave2_pid
|
||||
wait $master_pid
|
||||
|
||||
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
|
||||
echo $total > mariadb_tpmc.out
|
||||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
cd tpcc
|
||||
rm -rf mariadb.log
|
||||
rm -rf slave1.log
|
||||
rm -rf slave2.log
|
||||
rm -rf mariadb_tpmc.out
|
||||
|
||||
pkill bash
|
||||
sleep 1
|
||||
pkill java
|
||||
sleep 1
|
||||
ps -ef|grep java
|
||||
echo 'start runing'
|
||||
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
|
||||
master_pid=$!
|
||||
echo "Starting Master..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
|
||||
slave1_pid=$!
|
||||
echo "Starting Slave1..."
|
||||
sleep 1
|
||||
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
|
||||
slave2_pid=$!
|
||||
echo "Starting Slave2..."
|
||||
sleep 1
|
||||
|
||||
# 监控 slave1.log
|
||||
tail -f slave1.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave1.log detected, killing process..."
|
||||
kill $slave1_pid # 杀死 slave1 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 slave2.log
|
||||
tail -f slave2.log | while read line; do
|
||||
if [[ "$line" == *"Terminating users"* ]]; then
|
||||
echo "Terminating users at slave2.log detected, killing process..."
|
||||
kill $slave2_pid # 杀死 slave2 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 监控 mariadb.log
|
||||
tail -f mariadb.log | while read line; do
|
||||
if [[ "$line" == *"terminate users"* ]]; then
|
||||
echo "Terminating users at mariadb1.log detected, killing process..."
|
||||
kill $master_pid # 杀死 master 进程
|
||||
break
|
||||
fi
|
||||
done & # 将监控放到后台
|
||||
|
||||
# 等待所有后台任务完成
|
||||
wait $slave1_pid
|
||||
wait $slave2_pid
|
||||
wait $master_pid
|
||||
|
||||
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
|
||||
total=$(printf "%.0f" "$total")
|
||||
|
||||
echo $total > mariadb_tpmc.out
|
||||
|
||||
Reference in New Issue
Block a user