我們知道,有時候為了debug或跟蹤友善,會臨時打開MySQL的general log。如果線上業務請求比較頻繁的話,會導緻瞬間産生大量的日志,一定程度上會影響IOPS性能。
此外,我們還有一種變通的辦法,那就是打開slow query log,然後設定 long_query_time = 0,這樣也可以記錄所有請求log,而且記錄的log比general log還要來的小,他産生的IOPS性能影響可能會比直接打開general log的影響來的小,可事實果真如此嗎?我們來對比測試下就知道了。
測試試用MySQL版本:5.5.5-10.0.11-MariaDB-log MariaDB Server
測試工具: tpcc-mysql
測試Warehouse數: 100
warmup time: 60s
run time: 600s
并發線程數: 512
測試結果對比見下:
在“一般場景”下,我是設定 long_query_time = 1,并且關閉general log。
記錄全部general log時的TpmC大約是不打開log時的73.28%,而記錄全部slow log時的TpmC大約是不打開log時的59.53%。可見,直接打開general log對TpmC的影響更小一些,而且這種模式下産生的log其實也更小一些。是不是有點毀三觀,哈哈O(∩_∩)O~
此外,如果 log-output = TABLE 時結果會怎樣,請讀者自行測試 :)
備注:MySQL 5.1及以上版本,才支援将long_query_time設定為0秒,在這之前的版本,其最小值是1秒。
關于MySQL的方方面面大家想了解什麼,可以直接留言回複,我會從中選擇一些熱門話題進行分享。 同時希望大家多多轉發,多一些閱讀量是老葉繼續努力分享的絕佳助力,謝謝大家 :)