MySQL 5.7 and 8.0 performance testing

background

Test mysql5.7 mysql8.0 respectively and write, read-only, write-only property (tps, qps) when a mode different concurrency

premise

  • Use test version mysql5.7.22 and mysql8.0.15
  • sysbench before testing before the restart mysql service, and empty the cache os (to avoid cache hit when several tests)
  • Mysql5.7 and mysql8.0 be tested each time the test is a new generation of test data and then
  • Every ensure consistent mysql5.7 and mysql8.0 configuration parameters test

surroundings

myql5.7.22

5.7.22-log
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

mysql8.0.15

8.0.15
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

sysbench

sysbench -V
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

test

  • Performance under different persistence strategy (binlog, redo log persistence) mysql5.7 and mysql8.0 in read-write mode, read-only, write-only mode (oltp_read_write, oltp_read_only, oltp_write_only) under
  • sysbench test time is 60s, the test number 20 in Table
  • Were tested in dual mode 1 (safety), and 02 mode (high performance)
parameter Optional value meaning
sync_binlog 0 binlog brush plate persistence done by the operating system, good performance, there is the risk of loss binlog
sync_binlog 1 After the transaction commits brush plate persistence, safest
sync_binlog N Brush plate persistence after each transaction commits N
innodb_flush_log_at_trx_commit 0 Per second write redo log and brush plate persistence
innodb_flush_log_at_trx_commit 1 After the transaction commits write redo log and brush plate persistence, safest
innodb_flush_log_at_trx_commit 2 After the transaction commits write redo log, brush persistent disk per second

Dual mode 1

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('sync_binlog','innodb_flush_log_at_trx_commit');
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
| sync_binlog                    | 1   |
+--------------------------------+-------+

mysql5.7 and mysql8.0 performance in read mode

  • 1 dual configuration, read-write mode, mysql5.7.22 and mysql8.0.15 tps, qps similar performance, mysql8.0.15-threaded at 120, there was a decrease jitter performance

mysql5.7 and mysql8.0 performance in read-only mode

  • 1 double configuration, in read-only mode, mysql5.7.22 of tps, qps about 1/3 better than mysql8.0.15; after increasing the number of concurrent threads, tps, qps and not with the increase, but there has been a downward trend

mysql5.7 and mysql8.0 performance in write-only mode

  • 1 double configuration, write-only mode, with the rise in the number of concurrent performance mysql5.7.22 better than mysql8.0.15 about 1/4

The mode 02

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('sync_binlog','innodb_flush_log_at_trx_commit');
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
| sync_binlog                    | 0   |
+--------------------------------+-------+

mysql5.7 and mysql8.0 performance in read mode

  • Disposed at 02, read-write mode, when the number of concurrent low, mysql5.7.22 performance is better than mysql8.0.15; when a relatively high number of concurrent, mysql8.0.15 performance is better than mysql5.7.22; for concurrent threads 80 above, performance begins decline

mysql5.7 and mysql8.0 performance in read-only mode

  • Disposed at 02, read-only mode, mysql5.7.22 mysql8.0.15 better performance than about 1/3; the number of concurrent with the increase, there is no increase in performance, but tends to decrease

mysql5.7 and mysql8.0 performance in write-only mode

  • 02 configuration, write-only mode, mysql5.7.22 of tps shake relatively large; mysql5.7.22 of about 1/3 qps better than mysql8.0.15

in conclusion

  • Overall, mysql5.7.22 in read-write mode, read-only, write-only mode is superior performance under the mysql8.0.15
  • With the increase in the number of parallel, performance does not also increase, but also declined
  • The test results are carried out under the configuration is low, does not mean absolute

Note
sysbench need to set --db-ps-mode = disable disable precompiled statements, or thread a long time concurrent test will be reported the following error
FATAL: mysql_stmt_prepare () failed The
FATAL: MySQL error: 1461 "of Can not the Create More Within last max_prepared_stmt_count statements ( value Current: of 16382) "
FATAL: the mysql_stmt_prepare () failed
FATAL: the MySQL error: 1461" Can Not Create More max_prepared_stmt_count Within last statements (Current value: of 16382) "
FATAL: thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:288: SQL API error FATAL: mysql_stmt_prepare() failed FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)" FATAL:thread_init 'function failed: / usr / local / Share / SysBench / oltp_common.lua: 288: SQL API error
FATAL: mysql_stmt_prepare () failed The

Using a script

 cat sysbench_test_mysql5.7_8.0_tps_qps.sh
#!/bin/bash
#用于sysbench 测试在读写模式、只读模式、只写模式下 mysql5.7和mysql8.0 的tps,qps
#nohup bash $0 >/tmp/sysbench_test 2>& 1 &
#

user=admin
passwd=admin
ports="8015 57222"
host=127.0.0.1
sysbench_test_mode="oltp_read_write oltp_read_only oltp_write_only"
sysbench_test_info_path=/tmp/sysbench-test

function red_echo () {

        local what="$*"
        echo -e "$(date +%F-%T) \e[1;31m ${what} \e[0m"
}

function check_las_comm(){
    if [ $1 -ne 0 ];then
        red_echo $2
        exit 1
    fi
}

function  restart_mysqld(){
  service mysqld${1} restart
  sleep 2
}

function  purge_binlog(){
port=$1
mysql -u$user -p$passwd -P$port -h$host<<EOF
purge binary logs before now();
EOF
}


function clean_os_cache(){
  echo 3 > /proc/sys/vm/drop_caches
}

function  sysbench_with_diff_thread(){


thread_num=$1
port=$2
order=$3
test_mode=$4
sysbench /usr/local/share/sysbench/${test_mode}.lua --mysql_storage_engine=innodb  --table-size=100000 --tables=20 --mysql-db=test_1 --mysql-user=$user --mysql-password=$passwd --mysql-port=$port  --mysql-host=$host --threads=$thread_num  --time=60 --report-interval=2 --db-ps-mode=disable --events=0 --db-driver=mysql $order

}

function  main(){
for test_mode in $sysbench_test_mode;do

  for port in $ports;do
    for thread_num in {5,10,20,30,40,80,120,200};do
      restart_mysqld "$port"
      check_las_comm  "$?" "restart mysqld${port} failed "
      clean_os_cache
      purge_binlog "$port"

      red_echo "sysbench $thread_num  threads cleanup mysqld${port}"
      sysbench_with_diff_thread "$thread_num" "$port" "cleanup" "$test_mode">/dev/null

      red_echo "sysbench $thread_num  threads prepare mysqld${port}"
      sysbench_with_diff_thread "$thread_num" "$port" "prepare" "$test_mode">/dev/null

      mkdir -p $sysbench_test_info_path
      red_echo "sysbench $thread_num  threads run mysqld${port} $test_mode"
      sysbench_with_diff_thread "$thread_num" "$port" "run" "$test_mode" > $sysbench_test_info_path/${test_mode}_${thread_num}_$port

      # service mysqld{port} stop
    done
  done
done

}

main

Guess you like

Origin www.linuxidc.com/Linux/2019-07/159522.htm