mysql慢查詢配置和測試

在系統的優化過程中,對SQL語句的優化更是非常重要的一部分。系統上線後發現了許多對性能有影響的SQL。本文主要是講解利用MySQL的一些狀態分析並且記錄影響數據庫性能的語句

MySQL狀態查詢

show status;//MySQL狀態查詢
分析其中相對好理解的幾點
show status like 'com_insert';---顯示執行了多少次插入操作
show status like 'com_update';---顯示執行了多少次更新
show status like  'com_delete';---顯示執行了多少次刪除
show status like 'com_select';---顯示執行多少次查詢
show status like 'uptime';---顯示mysql數據庫啓動多長時間,如果時間很長,數據庫表的存儲引擎是MyISAM,這個時候要注意碎片整理。


顯示慢查詢
顯示慢查詢需要先開始慢查詢,MySQL中慢查詢默認爲關閉狀態,查詢慢SQL是否開啓

show variables like 'slow_query_log';默認爲OFF狀態


查詢記錄沒有使用索引的查詢是否開啓(默認沒有開啓)

show variables like 'log_queries_not_using_indexes'


查詢時間慢查詢的sql語句的時長(默認10秒)

show variables like 'long_query_time'; 顯示慢查詢的時間,默認情況下是10秒一個慢查詢


開啓慢查詢後查詢慢查詢的條數

show status like 'slow_queries';顯示慢查詢的條數


查看記錄慢查詢的sql的位置

show variables like 'slow_query_log_file';#爲慢查詢文件的位置


如何修改配置默認配置?
方式一(需要重啓mysql服務,但是配置可以持續保留)

#開啓慢查詢日誌記錄  
slow_query_log=1  
#查詢時間超過0.1秒的sql語句會被記錄  
long_query_time=0.1  
#記錄沒有使用索引的查詢  
log_queries_not_using_indexes=1  
#記錄慢查詢日誌的文件地址  
slow-query-log-file=/var/lib/mysql/localhost-slow.log

測試:

select sleep(5);

關於long_query_time設置

通常我們設置long_query_time的值爲2,表示查詢SQL語句超過兩秒的就記錄,通常2秒就夠了,默認是10秒。然而,對於許多WEB程序來說,2秒的查詢還是太長了。的確在許多站點中,一個SQL語句超過1秒的執行時間都算慢的了。

mysql5.1.21以後才提供更細粒度的long_query_time設定,之前的版本只能以秒做單位。

查看日誌

[root@lizhong tmp]# tail -f /tmp/mysql_slow.log

Time: 120815 23:22:11

User@Host: root[root] @ localhost []

Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774

SET timestamp=1294388531;

select count(*) from blog;

第一行:執行時間

第二行:執行用戶

第三行(重要):

Query_time SQL執行的時間,越長則越慢

Lock_time 在MySQL服務器階段(不是在存儲引擎階段)等待表鎖時間

Rows_sent 查詢返回的行數

Rows_examined 查詢檢查的行數

最後

1、日誌不能說明一切問題,知識表象,可能跟鎖表、系統繁忙的偶發性有關,當然,如果某條SQL語句經常查詢慢那基本可以判斷是可以再次優化的。

2、不要開啓log-queries-not-using-indexes沒有索引查詢記錄功能,這個功能實際用處不大。就是記錄SQL查詢的時候,沒有索引的通通記錄。雖然索引對查詢的速度有影響,但要看數據量大小。因爲開啓了這個功能以後,select * from tab這樣的查詢也會被記錄在日誌中,很快日誌文件就會被垃圾信息給充滿,從而影響主要的查詢慢日誌記錄的查看。

3、MySQL自帶了mysqldumpslow工具用來分析slow query日誌,或者其它工具也可以,通過工具配合可以更好的分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章