天天看點

mysql查詢慢原因分析,MySQL伺服器查詢慢原因分析方法

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會被裝載到記憶體。那樣會增加資料庫通路速度。