MySQL 5.7 vs 8.0, performance PK
mysql tutorial column introduces the performance comparison between MySQL 5.7 and MySQL 8.0.
Background
Test the performance of mysql5.7 and mysql8.0 in different concurrency conditions in read-write, read-only, and write-only modes. (tps, qps)
Prerequisite
- The test version is mysql5.7.22 and mysql8.0.15
- Restart the mysql service before sysbench test, and clear the os cache (to avoid hitting the cache during multiple tests)
- Every time a test is performed, new test data is generated before testing mysql5.7 and mysql8.0
- Guarantee mysql5 during each test .7 The configuration parameters are consistent with mysql8.0
Environment
Machine
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复制代码
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
Under different persistence strategies (binlog, redo log persistence) mysql5.7 and mysql8.0 are reading and writing Performance in mode, read-only mode, write-only mode (oltp_read_write, oltp_read_only, oltp_write_only)
sysbench test time is 60s, and the number of tables tested is 20
The tests were conducted in double 1 mode (security) and 0 2 mode (high performance) respectively
-
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 | ------------------------ -------
Performance of mysql5.7 and mysql8.0 in read-write mode
- Double 1 configuration, in read-write mode, mysql5.7.22 and mysql8 .0.15 tps and qps have similar performance. When mysql8.0.15 has 120 threads concurrently, the performance drops and jitters:
Performance of mysql5.7 and mysql8.0 in read-only mode
- Double 1 configuration, in read-only mode, the tps and qps of mysql5.7.22 are about 1/3 better than mysql8.0.15; after the number of concurrent threads increases, the tps , qps did not increase, but showed a downward trend.
Performance of mysql5.7 and mysql8.0 in write-only mode
- ##Double 1 configuration, write-only In mode, as the number of concurrency increases, the performance of mysql5.7.22 is about 1/4 better than that of mysql8.0.15.
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 | +--------------------------------+-------+复制代码
- 0 2 configuration, in read-write mode, when the number of concurrency is low, the performance of mysql5.7.22 is better than that of mysql8.0.15; when the number of concurrency is relatively high, the performance of mysql8.0.15 is better than that of mysql5.7.22; in the concurrency of 80 threads Above that, performance begins to degrade.
- 0 2配置,只读模式下,mysql5.7.22性能比mysql8.0.15 好1/3左右;随着并发数的上升,性能也没有上升,反而有下降的趋势.
mysql5.7和mysql8.0 在只写模式下的表现
- 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复制代码
使用脚本
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复制代码
更多相关免费学习推荐:mysql教程(视频)
The above is the detailed content of MySQL 5.7 vs 8.0, performance PK. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



MySQL is suitable for beginners because it is simple to install, powerful and easy to manage data. 1. Simple installation and configuration, suitable for a variety of operating systems. 2. Support basic operations such as creating databases and tables, inserting, querying, updating and deleting data. 3. Provide advanced functions such as JOIN operations and subqueries. 4. Performance can be improved through indexing, query optimization and table partitioning. 5. Support backup, recovery and security measures to ensure data security and consistency.

Navicat itself does not store the database password, and can only retrieve the encrypted password. Solution: 1. Check the password manager; 2. Check Navicat's "Remember Password" function; 3. Reset the database password; 4. Contact the database administrator.

MySQL is an open source relational database management system. 1) Create database and tables: Use the CREATEDATABASE and CREATETABLE commands. 2) Basic operations: INSERT, UPDATE, DELETE and SELECT. 3) Advanced operations: JOIN, subquery and transaction processing. 4) Debugging skills: Check syntax, data type and permissions. 5) Optimization suggestions: Use indexes, avoid SELECT* and use transactions.

Create a database using Navicat Premium: Connect to the database server and enter the connection parameters. Right-click on the server and select Create Database. Enter the name of the new database and the specified character set and collation. Connect to the new database and create the table in the Object Browser. Right-click on the table and select Insert Data to insert the data.

MySQL and SQL are essential skills for developers. 1.MySQL is an open source relational database management system, and SQL is the standard language used to manage and operate databases. 2.MySQL supports multiple storage engines through efficient data storage and retrieval functions, and SQL completes complex data operations through simple statements. 3. Examples of usage include basic queries and advanced queries, such as filtering and sorting by condition. 4. Common errors include syntax errors and performance issues, which can be optimized by checking SQL statements and using EXPLAIN commands. 5. Performance optimization techniques include using indexes, avoiding full table scanning, optimizing JOIN operations and improving code readability.

You can open phpMyAdmin through the following steps: 1. Log in to the website control panel; 2. Find and click the phpMyAdmin icon; 3. Enter MySQL credentials; 4. Click "Login".

You can create a new MySQL connection in Navicat by following the steps: Open the application and select New Connection (Ctrl N). Select "MySQL" as the connection type. Enter the hostname/IP address, port, username, and password. (Optional) Configure advanced options. Save the connection and enter the connection name.

Steps to perform SQL in Navicat: Connect to the database. Create a SQL Editor window. Write SQL queries or scripts. Click the Run button to execute a query or script. View the results (if the query is executed).
