Heim > Datenbank > MySQL-Tutorial > MySQL 5.7 vs. 8.0, Leistungs-PK

MySQL 5.7 vs. 8.0, Leistungs-PK

coldplay.xixi
Freigeben: 2020-11-02 17:36:25
nach vorne
3030 Leute haben es durchsucht

Die Spalte

MySQL-Tutorial stellt den Leistungsvergleich von MySQL 5.7 und MySQL 8.0 vor.

MySQL 5.7 vs. 8.0, Leistungs-PK

Hintergrund

Testen Sie die Leistung (tps, qps) von mysql5.7 und mysql8.0 im Lese-Schreib-, Nur-Lese- und Nur-Schreib-Modus bei verschiedenen Parallelitäten

Prämisse

  • Der Test Version ist mysql5 .7.22 und mysql8.0.15
  • Starten Sie den MySQL-Dienst vor dem Sysbench-Test neu und leeren Sie den Betriebssystem-Cache (um zu vermeiden, dass der Cache bei mehreren Tests erreicht wird).
  • Jedes Mal, wenn der Test durchgeführt wird, werden vor dem Testen neue Testdaten generiert mysql5.7- und mysql8.0-Test
  • Stellen Sie sicher, dass die Konfigurationsparameter von mysql5.7 und mysql8.0 während jedes Tests konsistent sind

Umgebung

Maschine

cat /etc/redhat-release | xargs echo '版本 ' && dmidecode -s system-product-name | xargs echo '是否虚拟化 ' && cat /proc/cpuinfo |grep "processor"|wc -l | xargs echo 'cpu核数 ' 
版本 CentOS Linux release 7.5.1804 (Core)  
是否虚拟化 KVM  
cpu核数 4复制代码
Nach dem Login kopieren

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复制代码
Nach dem Login kopieren

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复制代码
Nach dem Login kopieren

sysbench

sysbench -V
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)复制代码
Nach dem Login kopieren

Test

  • Leistung von mysql5.7 und mysql8.0 unter verschiedenen Persistenzstrategien (Binlog, Redo-Log-Persistenz) im Lese-/Schreibmodus, Lesemodus, Schreibmodus (oltp_read_write, oltp_read_only, oltp_write_only). )

  • Die Sysbench-Testzeit beträgt 60 Sekunden, die Anzahl der getesteten Tabellen beträgt 20 SHOW GLOBAL VARIABLES WHERE Variable_name IN('sync_binlog','innodb_flush_log_at_trx_commit'); +--------------------------------+-------+ |. Variablenname |. Wert | +--------------------------------+-------+ |. innodb_flush_log_at_trx_commit 1 | |. sync_binlog | +--------------------------------+------+

  • mysql5.7 und Leistung von mysql8.0 im Lese-/Schreibmodus

  • MySQL 5.7 vs. 8.0, Leistungs-PK

    Doppelte 1-Konfiguration, im Lese-/Schreibmodus haben mysql5.7.22 und mysql8.0.15 eine ähnliche TPS- und QPS-Leistung. Wenn mysql8.0.15 120 Threads gleichzeitig hat Leistung ist besser. Reduzierter Jitter:

  • Leistung von MySQL5.7 und MySQL8.0 im schreibgeschützten Modus

MySQL 5.7 vs. 8.0, Leistungs-PK

Doppelte 1-Konfiguration, im schreibgeschützten Modus sind die TPS und QPS von MySQL5.7.22 besser als mysql8.0.151 /3 oder so; nachdem die Anzahl gleichzeitiger Threads zugenommen hatte, stiegen tps und qps nicht an, sondern zeigten einen Abwärtstrend.
  • Leistung von MySQL5.7 und MySQL8.0 im Nur-Schreib-Modus

MySQL 5.7 vs. 8.0, Leistungs-PK

Doppelte 1-Konfiguration, im Nur-Schreib-Modus ist die Leistung von MySQL5.7.22 mit zunehmender Anzahl der Parallelitäten besser als das von mysql8.0.15 Ungefähr 1/4.
  • 0 2-Modus
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   |
+--------------------------------+-------+复制代码
Nach dem Login kopieren

Leistung von mysql5.7 und mysql8.0 im Lese-/Schreibmodus

MySQL 5.7 vs. 8.0, Leistungs-PK

  • 0 2-Konfiguration, im Lese-/Schreibmodus, wenn die Anzahl der Parallelitäten niedrig ist, mysql5. 7.22 hat eine gute Leistung Im Vergleich zu mysql8.0.15 ist die Leistung von mysql8.0.15 besser als die von mysql5.7.22; wenn die Anzahl der Parallelitäten 80 überschreitet, beginnt die Leistung zu sinken.

Leistung von MySQL5.7 und MySQL8.0 im schreibgeschützten Modus

  • 0 2配置,只读模式下,mysql5.7.22性能比mysql8.0.15 好1/3左右;随着并发数的上升,性能也没有上升,反而有下降的趋势.

mysql5.7和mysql8.0 在只写模式下的表现

MySQL 5.7 vs. 8.0, Leistungs-PK

  • 0 2 配置,只写模式下,mysql5.7.22的tps 抖动比较大;mysql5.7.22 的qps比mysql8.0.15好1/3左右

结论

  • 整体来看,mysql5.7.22在读写模式、只读模式、只写模式下的表现是优于mysql8.0.15的
  • 随着并行数的增加,性能表现不会也跟着增加,还会出现下降
  • 本次测试结果是在配置很低的情况下进行的,不代表绝对

注意

sysbench 需要设置--db-ps-mode=disable 禁用预编译语句,不然并发测试线程多时会报下面的错误

FATAL: mysql_stmt_prepare() failed
FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"
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 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复制代码
Nach dem Login kopieren

使用脚本

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 /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复制代码
Nach dem Login kopieren

更多相关免费学习推荐:mysql教程(视频)

Das obige ist der detaillierte Inhalt vonMySQL 5.7 vs. 8.0, Leistungs-PK. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage