程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 【體系結構】MySQL日志文件--慢查詢日志

【體系結構】MySQL日志文件--慢查詢日志

編輯:MySQL綜合教程

【體系結構】MySQL日志文件--慢查詢日志   顧名思義,慢查詢日志中記錄的是執行時間較長的 query    可以設一個閥值、將運行時間超過該值的所有SQL語句都記錄到慢查詢日志文件中    該閥值可以通過參數long_query_time來設置、默認是10秒    這裡需要一點、對於運行時間正好等於long_query_time的情況、並不會被記錄    因為、在源代碼裡是判斷大於long_query_time、而非大於等於   [plain]  mysql> show variables like 'log_slow_queries';   +------------------+-------+   | Variable_name    | Value |   +------------------+-------+   | log_slow_queries | ON    |   +------------------+-------+   1 row in set (0.00 sec)      mysql> show variables like 'long_query_time';   +-----------------+-----------+   | Variable_name   | Value     |   +-----------------+-----------+   | long_query_time | 10.000000 |   +-----------------+-----------+   1 row in set (0.00 sec)        另一個和慢查詢日志相關的參數是log_queries_not_using_indexes    如果運行的SQL沒有使用索引、則MySQL同樣會將這條語句記錄到慢查詢日志文件   [plain]  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語句:   [plain]  [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   Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts          更多用法、請咨詢 ./mysqldumpslow --help        從5.1.6版本開始,慢查詢日志即可以是個文件,也可以保存在數據庫中的指定表    參數log_output指定了慢查詢輸出的格式、默認為file、你也可以將它設為table    參數log_output是動態的、並且是全局的、我們能夠在線進行變更   [plain]  mysql> show variables like 'log_output';   +---------------+-------+   | Variable_name | Value |   +---------------+-------+   | log_output    | FILE  |   +---------------+-------+   1 row in set (0.00 sec)      mysql> set global log_output='TABLE';   Query OK, 0 rows affected (0.00 sec)      mysql> show variables like 'log_output';   +---------------+-------+   | Variable_name | Value |   +---------------+-------+   | log_output    | TABLE |   +---------------+-------+   1 row in set (0.00 sec)      mysql> select sleep(15);   +-----------+   | sleep(15) |   +-----------+   |         0 |   +-----------+   1 row in set (15.02 sec)      mysql> select * from mysql.slow_log\G;   *************************** 1. row ***************************       start_time: 2013-04-14 01:22:29        user_host: root[root] @ localhost []       query_time: 00:00:15        lock_time: 00:00:00        rows_sent: 1    rows_examined: 0               db: test   last_insert_id: 0        insert_id: 0        server_id: 1         sql_text: select sleep(15)   1 row in set (0.00 sec)        在這個例子裡、我設置了睡眠15秒、那麼這句SQL就會被記錄到slow_log表        需要注意的是,慢查詢日志中有可能記錄到與用戶權限或密碼相關的語句,因此慢查詢日志文件的保存也要注意安全

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved