MySQL日志文件——慢查詢日志
顧名思義,慢查詢日志中記錄的是執行時間較長的 query
可以設一個閥值、將運行時間超過該值的所有SQL語句都記錄到慢查詢日志文件中
該閥值可以通過參數long_query_time來設置、默認是10秒
這里需要一點、對于運行時間正好等于long_query_time的情況、并不會被記錄
因為、在源代碼里是判斷大于long_query_time、而非大于等于
mysql> show variables like 'log_slow_queries'; mysql> show variables like 'long_query_time'; |
另一個和慢查詢日志相關的參數是log_queries_not_using_indexes
如果運行的SQL沒有使用索引、則MySQL同樣會將這條語句記錄到慢查詢日志文件
mysql> show variables like 'log_queries_not_using_indexes'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_not_using_indexes | OFF | +-------------------------------+-------+ 1 row in set (0.00 sec) |
在這里、我沒有開啟、但有點需要提醒、如果在線修改該參數、雖然沒有報錯、但是不會生效
MySQL 還提供了專門用來分析滿查詢日志的工具程序 mysqldumpslow、用來幫助MySQL DBA解決可能存在的性能問題
例子、獲得 TOP-5 SQL語句:
[mysql@localhost bin]$ ./mysqldumpslow -s al -n 5 /home/mysql/mysql/log/slow.log Reading mysql slow query log from /home/mysql/mysql/log/slow.log |
更多用法、請咨詢 ./mysqldumpslow --help
從5.1.6版本開始,慢查詢日志即可以是個文件,也可以保存在數據庫中的指定表
參數log_output指定了慢查詢輸出的格式、默認為file、你也可以將它設為table
參數log_output是動態的、并且是全局的、我們能夠在線進行變更
mysql> show variables like 'log_output'; mysql> set global log_output='TABLE'; mysql> show variables like 'log_output'; mysql> select sleep(15); mysql> select * from mysql.slow_log\G; |
在這個例子里、我設置了睡眠15秒、那么這句SQL就會被記錄到slow_log表
需要注意的是,慢查詢日志中有可能記錄到與用戶權限或密碼相關的語句,因此慢查詢日志文件的保存也要注意安全
posted on 2013-05-08 09:58 順其自然EVO 閱讀(272) 評論(0) 編輯 收藏 所屬分類: 數據庫