發現問題經常使用命令:sql
1.show status; 查詢服務器狀態信息數據庫
show status like 'Com_select%';能夠查詢select的執行次數,insert等操做查詢類同。緩存
注意:若是一個查詢的結果是從查詢緩存中獲得的,這會增長Qcache_hits,而不是Com_select。服務器
show status 還能夠指定統計範圍。統計範圍關鍵字分爲GLOBAL和SESSION(或LOCAL)兩種。session
不加的話默認是session性能
eg:spa
2.show variable; 查詢變量設置信息,可經過此變量查看各類變量是否設置正確。線程
用一個緩存變量的命令來舉例:索引
若要更全面的分析能夠結合以前的 show status命令:內存
SHOW STATUS LIKE 'Qcache%';
參數含義:
Qcache_free_blocks:表示查詢緩存中目前還有多少剩餘的blocks,若是該值顯示較大,則說明查詢緩存中的內存碎片過多了,可能在必定的時間進行整理。
Qcache_free_memory:查詢緩存的內存大小,經過這個參數能夠很清晰的知道當前系統的查詢內存是否夠用,是多了,仍是不夠用,DBA能夠根據實際狀況作出調整。
Qcache_hits:表示有多少次命中緩存。咱們主要能夠經過該值來驗證咱們的查詢緩存的效果。數字越大,緩存效果越理想。
Qcache_inserts: 表示多少次未命中而後插入,意思是新來的SQL請求在緩存中未找到,不得不執行查詢處理,執行查詢處理後把結果insert到查詢緩存中。這樣的狀況的次數,次數越多,表示查詢緩存應用到的比較少,效果也就不理想。固然系統剛啓動後,查詢緩存是空的,這很正常。
Qcache_lowmem_prunes:該參數記錄有多少條查詢由於內存不足而被移除出查詢緩存。經過這個值,用戶能夠適當的調整緩存大小。
Qcache_not_cached: 表示由於query_cache_type的設置而沒有被緩存的查詢數量。
Qcache_queries_in_cache:當前緩存中緩存的查詢數量。
Qcache_total_blocks:當前緩存的block數量。
3. 用explain來分析sql的執行計劃
用法:explain 後邊跟select語句,分析語句的鏈接關係和鏈接順序
須要關注的參數是下面這兩個
select_type:select類型,它有如下幾種值
A、simple 它表示簡單的select,沒有union和子查詢
B、 primary 最外面的select,在有子查詢的語句中,最外面的select查詢就是primary
C、union 指union語句的第二個或者說是後面那一個
D、subquery 指的是子查詢的第一個select
type: 訪問類型
性能由好到壞依次是
null>system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
all:全表掃描 ,index:索引全掃描 ,range:索引範圍掃描 ,ref:使用非惟一索引掃描,或者惟一索引的前綴掃描,eq_ref惟一索引掃描,const/system:表單中最多隻有一行匹配,null:不用訪問表或者索引直接就能取到結果。。。。。
4.經過show profile分析sql
4.1首先要確認你的數據庫支持
開啓
4.2 show profile的用法
A、先執行語句
B、執行show profile,能夠看到話費的總時間;
C、執行過程當中線程的每一個狀態和消耗的時間
注:本章只是引導如何去發現問題,解決問題會在後面的博客中介紹。