之前有做過一個 binlog 壓縮能節約多少空間的測試,效果上看還是比較理想的,可以節約一半以上的空間。但是這個又引出了一個新的問題,那就是這個功能對性能有多大影響呢?于是我又在測試環境試了一下,測試環境的物理配置如下。
根據之前的經驗這套測試環境在 120 個表 + 240 個并發的情況,可以取得一個性能上的極大值;所以在這里就直接使用這個作為測試壓力。
8.0.19 場景第一步:安裝。
dbma-cli-single-instance --port=3306 --max-mem=131072 \--pkg=mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz install
第二步:創建測試用戶。
create user sysbench@'%' identified by 'sysbench';create database tempdb;grant all on tempdb.* to sysbench@'%';
第三步:填充數據并進行壓力測試。
sysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select preparesysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select run
性能表現。
資源消耗情況。
8.0.20 + binlog 壓縮第一步:安裝。
dbma-cli-single-instance --port=3306 --max-mem=131072 \--pkg=mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz install
第二步:創建測試用戶。
create user sysbench@'%' identified by 'sysbench';create database tempdb;grant all on tempdb.* to sysbench@'%';-- dbm-agent 默認會開啟 binlog 壓縮show global variables like 'binlog_transaction_compression%';+-------------------------------------------+-------+| Variable_name | Value |+-------------------------------------------+-------+| binlog_transaction_compression | ON || binlog_transaction_compression_level_zstd | 3 |+-------------------------------------------+-------+2 rows in set (0.00 sec)
第三步:填充數據并進行壓力測試。
sysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select preparesysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select run
性能表現。
資源消耗情況。
8.0.20 + binlog 不壓縮
第一步: 關閉 binlog 壓縮功能。
set @@global.binlog_transaction_compression='OFF';show global variables like 'binlog_transaction_compression%';+-------------------------------------------+-------+| Variable_name | Value |+-------------------------------------------+-------+| binlog_transaction_compression | OFF || binlog_transaction_compression_level_zstd | 3 |+-------------------------------------------+-------+2 rows in set (0.01 sec)
第二步:進行壓力測試。
sysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select run
性能表現。
資源消耗情況。
結論開啟 binlog 壓縮會對性能有影響,大概會讓性能下降 1%,cpu 多消耗 1%。