MySQL服務器查詢慢緣由分析方法

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會被裝載到內存。那樣會增長數據庫訪問速度。

相關文章
相關標籤/搜索