MySQL資料庫在查詢的時候會出現查詢結果很慢,例如超過1秒,項目中需要找出執行慢的sql進行優化,應該怎麼找呢,mysql資料庫提供了很好的方法。以下列出兩個比較常用的:
一、mysql5.0以上的版本可以支援将執行比較慢的SQL語句記錄下來
1.需要使用打開記錄查詢慢的sql記錄日志:
檢視慢查詢時間
show variables like 'slow%';
檢視設定多久是慢查詢
show variables like 'long%';
修改慢查詢時間
set long_query_time=1;
打開慢查詢記錄日志
set global slow_query_log='ON';
2.進入到log_file的目錄下即可查詢哪些sql執行慢了,如:
在/etc/my.cnf 裡面可以設定上面MYSQL全局變量的初始值。
long_query_time=1
日志路徑:slow_query_log_file=/tmp/slow.log
3.然後就是進行優化執行慢的sql,加索引、修改查詢方式等
4.另外比較有用的指令:
檢視哪些線程正在運作
show full processlist;
檢視最大連接配接數
show variables like '%max_connections%';
目前連接配接數
show status like 'Threads_connected%';
二、mysqldumpslow指令
/path/mysqldumpslow -s c -t 10 /tmp/slow-log,這會輸出記錄次數最多的10條SQL語句,其中:
-s, 是表示按照何種方式排序,c、t、l、r分别是按照記錄次數、時間、查詢時間、傳回的記錄數來排序,ac、at、al、ar,表示相應的倒叙;
-t, 是top n的意思,即為傳回前面多少條的資料;
-g, 後邊可以寫一個正則比對模式,大小寫不敏感的;
比如:
/path/mysqldumpslow -s r -t 10 /tmp/slow-log
得到傳回記錄集最多的10個查詢。
/path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log
得到按照時間排序的前10條裡面含有左連接配接的查詢語句。
最後總結一下節點監控的好處 :
1、輕量級的監控,而且是實時的,還可以根據實際的情況來定制和修改
2、設定了過濾程式,可以對那些一定要跑的語句進行過濾
3、及時發現那些沒有用索引,或者是不合法的查詢,雖然這很耗時去處理那些慢語句,但這樣可以避免資料庫挂掉,還是值得的
4. 在資料庫出現連接配接數過多的時候,程式會自動儲存目前資料庫的processlist,DBA進行原因查找的時候這可是利器
5、使用mysqlbinlog 來分析的時候,可以得到明确的資料庫狀态異常的時間段
有些人會建義我們來做mysql配置檔案設定,調節tmp_table_size 的時候發現另外一些參數
Qcache_queries_in_cache 在緩存中已注冊的查詢數目
Qcache_inserts 被加入到緩存中的查詢數目
Qcache_hits 緩存采樣數數目
Qcache_lowmem_prunes 因為缺少記憶體而被從緩存中删除的查詢數目
Qcache_not_cached 沒有被緩存的查詢數目 (不能被緩存的,或由于 QUERY_CACHE_TYPE)
Qcache_free_memory 查詢緩存的空閑記憶體總數
Qcache_free_blocks 查詢緩存中的空閑記憶體塊的數目
Qcache_total_blocks 查詢緩存中的塊的總數目
Qcache_free_memory 可以緩存一些常用的查詢,如果是常用的sql會被裝載到記憶體。那樣會增加資料庫通路速度。