您好,登錄后才能下訂單哦!
下面一起來了解下如何壓測mysql5.6中audit.log插件性能損耗,相信大家看完肯定會受益匪淺,文字在精不在多,希望如何壓測mysql5.6中audit.log插件性能損耗這篇短內容是你想要的。
測試虛擬機環境:
主機:
CPU:Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz 4核
內存:1G
磁盤:SCSI硬盤 10G
數據庫:
版本:5.6.34
參數: innodb_buffer_pool_size = 128M、 innodb_io_capacity = 2000
以下是我的測試腳本:cat for_sysbench.sh
#!/bin/sh time=3600 #0.0 for thread in {16,32,64,128,256} do echo "now the number of theads is $thread" echo "============================================================================================================================================" /bin/sh /home/linzj/shell/mysql.sh restart sleep 30 sysbench --test=oltp --mysql-host=192.168.110.100 --mysql-port=3306 --mysql-user=root --mysql-password=root --mysql-db=sbtest1 --oltp-num-tables=10 --oltp-table-size=500000 --report-interval=10 --max-requests=0 --oltp-test-mode=nontrx --oltp-nontrx-mode=select --oltp-read-only=off --max-time=$time --num-threads=$thread run echo "============================================================================================================================================" done >> /tmp/sysbench.log.0.0 #1.1 sed -i 's/sync_relay_log=0/sync_relay_log=1/g' /etc/my.cnf sed -i 's/sync_binlog=0/sync_binlog=1/g' /etc/my.cnf sed -i 's/innodb_flush_log_at_trx_commit = 0/innodb_flush_log_at_trx_commit = 1/g' /etc/my.cnf for thread in {32,256} do echo "now the number of theads is $thread" echo "============================================================================================================================================" /bin/sh /home/linzj/shell/mysql.sh restart sleep 30 sysbench --test=oltp --mysql-host=192.168.110.100 --mysql-port=3306 --mysql-user=root --mysql-password=root --mysql-db=sbtest1 --oltp-num-tables=10 --oltp-table-size=500000 --report-interval=10 --max-requests=0 --oltp-test-mode=nontrx --oltp-nontrx-mode=select --oltp-read-only=off --max-time=$time --num-threads=$thread run echo "============================================================================================================================================" done >> /tmp/sysbench.log.1.1 #100.2 sed -i 's/sync_relay_log=1/sync_relay_log=100/g' /etc/my.cnf sed -i 's/sync_binlog=1/sync_binlog=100/g' /etc/my.cnf sed -i 's/innodb_flush_log_at_trx_commit = 1/innodb_flush_log_at_trx_commit = 2/g' /etc/my.cnf for thread in {32,256} do echo "now the number of theads is $thread" echo "============================================================================================================================================" /bin/sh /home/linzj/shell/mysql.sh restart sleep 30 sysbench --test=oltp --mysql-host=192.168.110.100 --mysql-port=3306 --mysql-user=root --mysql-password=root --mysql-db=sbtest1 --oltp-num-tables=10 --oltp-table-size=500000 --report-interval=10 --max-requests=0 --oltp-test-mode=nontrx --oltp-nontrx-mode=select --oltp-read-only=off --max-time=$time --num-threads=$thread run echo "============================================================================================================================================" done >> /tmp/sysbench.log.100.2
其實這里測試時間不應該只有3600s,表個數和行數也不是太大,如果要獲得更為準確的壓測值,建議調大測試時間、表的行數和線程并發數。
測試出來的數據如下:
not audit_log.so | sync_binlog=0 innodb_flush_log_at_trx_commit=0 innodb_io_capacity = 2000 innodb_buffer_pool_size = 128M | sync_binlog=1 innodb_flush_log_at_trx_commit=1 innodb_io_capacity = 2000 innodb_buffer_pool_size = 128M | sync_binlog=100 innodb_flush_log_at_trx_commit=2 innodb_io_capacity = 2000 innodb_buffer_pool_size = 128M | |||
thread number | transactions | 95% response time | transactions | 95% response time | transactions | 95% response time |
16 | 32213495 | 0.25ms | 29410504 | 0.25ms | 30523665 | 0.35ms |
32 | 26159190 | 0.98ms | 27709880 | 0.66ms | 26933062 | 0.68ms |
64 | 83298987 | 0.23ms | 86423634 | 0.23ms | 77157030 | 0.27ms |
128 | 88715124 | 0.34ms | 90817420 | 0.35ms | 81349362 | 0.41ms |
256 | 66369520 | 2.19ms | 69010422 | 1.98ms | 71505144 | 1.81ms |
audit_log.so | sync_binlog=0 innodb_flush_log_at_trx_commit=0 innodb_io_capacity = 2000 innodb_buffer_pool_size = 128M | sync_binlog=1 innodb_flush_log_at_trx_commit=1 innodb_io_capacity = 2000 innodb_buffer_pool_size = 128M | sync_binlog=100 innodb_flush_log_at_trx_commit=2 innodb_io_capacity = 2000 innodb_buffer_pool_size = 128M | |||
thread number | transactions | 95% response time | transactions | 95% response time | transactions | 95% response time |
16 | 28692966 | 0.50ms | 30227040 | 0.44ms | 30635231 | 0.43ms |
32 | 26350208 | 0.69ms | 26789217 | 0.64ms | 26515925 | 0.66ms |
64 | 58260078 | 0.45ms | 60129266 | 0.41ms | 62635925 | 0.37ms |
128 | 61384728 | 0.69ms | 62435697 | 0.67ms | 64455354 | 0.59ms |
256 | 55560177 | 2.83ms | 55683833 | 2.87ms | 56068342 | 2.79ms |
從測試的數據可以發現:
1、數據庫的audit插件的使用,確實損耗了一定的數據庫性能,如果以最佳壓測性能的128個線程并發的數據來看,有audit功能的數據庫在同等壓測時間下,事務數占比少了30%以上,響應時間延長了1倍。
2、數據庫性能并非同并發線程數呈線性關系,在并發數達到128時,事務數和響應時間均為最佳,接下來再繼續增加并發,性能反而下降。
3、這里測試數據sync_binlog和innodb_flush_log_at_trx_commit為雙1的時候,性能反而最高。這里應該是參數調整or壓測時間不足導致。至少innodb_buffer_pool_size應該調整為內存的80%。所以這份測試數據也僅僅作為參考,需要再繼續調整參數后再進行壓測才能得到更為準確的數值。
看完如何壓測mysql5.6中audit.log插件性能損耗這篇文章后,很多讀者朋友肯定會想要了解更多的相關內容,如需獲取更多的行業信息,可以關注我們的行業資訊欄目。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。