MySQL數據庫在查詢的時候會出現查詢結果很慢,例如超過1秒,項目中須要找出執行慢的sql進行優化,應該怎麼找呢,mysql數據庫提供了很好的方法。如下列出兩個比較經常使用的:mysql
1、mysql5.0以上的版本能夠支持將執行比較慢的SQL語句記錄下來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%';
2、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條裏面含有左鏈接的查詢語句。
最後總結一下節點監控的好處 :
一、輕量級的監控,並且是實時的,還能夠根據實際的狀況來定製和修改
二、設置了過濾程序,能夠對那些必定要跑的語句進行過濾
三、及時發現那些沒有用索引,或者是不合法的查詢,雖然這很耗時去處理那些慢語句,但這樣能夠避免數據庫掛掉,仍是值得的
4. 在數據庫出現鏈接數過多的時候,程序會自動保存當前數據庫的processlist,DBA進行緣由查找的時候這但是利器
五、使用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會被裝載到內存。那樣會增長數據庫訪問速度。