itVincent Blog - Java Working Fun!

          技術(shù)引領(lǐng)時(shí)代!
          posts - 117, comments - 181, trackbacks - 0, articles - 12
          最近客戶提出某些業(yè)務(wù)查詢數(shù)據(jù)的速度特別慢,而且這種情況來的比較突然。

          情況:
          1.系統(tǒng)最近沒有更新
          2.數(shù)據(jù)庫結(jié)構(gòu)沒有更改
          3.沒有大量增加過數(shù)據(jù)

          分析:
          1.應(yīng)用服務(wù)器問題:嘗試把慢的業(yè)務(wù)的SQL語句取出到mysql命令行執(zhí)行,速度依然很慢
          2.VPN問題:把業(yè)務(wù)系統(tǒng)數(shù)據(jù)導(dǎo)出,再導(dǎo)入到本地?cái)?shù)據(jù)庫運(yùn)行,速度很快,沒有出現(xiàn)上述問題

          陷入困境,求教于DBA,DBA也很茫然,查看進(jìn)程,每次執(zhí)行那些SQL語句進(jìn)程占用CPU都非常高;沒有錯(cuò)誤的日志;MYSQL也運(yùn)行了2個(gè)多月沒重啟過;硬盤也檢查過OK的,也懷疑是raid有問題。

          查了這么多也沒有找到原因,包括mysql和應(yīng)用服務(wù)器都重啟過了。

          最后DBA說用Analyze Table的方法看看。

          語句是:
          ANALYZE TABLE MYTABLE;

          運(yùn)行后,問題解決,速度恢復(fù)正常。


          MySQL 的在優(yōu)化SQL語句時(shí),首先需要收集一些相關(guān)信息,其中就包括表的cardinality(可以翻譯為“散列程度”),它表示某個(gè)索引對(duì)應(yīng)的列包含多少個(gè)不同的值——如果cardinality大大少于數(shù)據(jù)的實(shí)際散列程度,那么索引就基本失效了。
          我們可以使用SHOW INDEX語句來查看索引的散列程度。

          TABLE         KEY_NAME       COLUMN_NAME CARDINALITY
          ------- -------- ----------- -----------
          MYTABLE   PRIMARY          ORG_ID_FK                   10

          此時(shí)可以看到,MYTABLE 數(shù)據(jù)有幾百,但是CARDINALITY只有10,可見CARDINALITY大大少于數(shù)據(jù)量,因此這個(gè)索引基本起不到作用,例如當(dāng)查詢語句對(duì)這個(gè)字段用到j(luò)oin連接時(shí),由于索引的失效,查詢就會(huì)變得很慢。

          在使用了ANALYZE TABLE后cardinality被增大到了500,因此查詢的性能得到了提高。

          Feedback

          # re: MySQL數(shù)據(jù)庫查詢變慢的分析及解決過程  回復(fù)  更多評(píng)論   

          2009-12-11 19:35 by feenn
          很好,受教!

          # re: MySQL數(shù)據(jù)庫查詢變慢的分析及解決過程  回復(fù)  更多評(píng)論   

          2009-12-12 13:25 by 久久書城
          十六大開發(fā)開始打開

          # re: MySQL數(shù)據(jù)庫查詢變慢的分析及解決過程  回復(fù)  更多評(píng)論   

          2009-12-15 18:02 by java狼
          @久久書城
          能舉報(bào)屏蔽了這個(gè)賤人么……

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 怀宁县| 西吉县| 翁源县| 乌审旗| 沧州市| 察哈| 成武县| 英超| 郧西县| 巫溪县| 德惠市| 漳州市| 绥宁县| 巩留县| 和龙市| 巫溪县| 昆明市| 普宁市| 周口市| 平顶山市| 龙州县| 渑池县| 忻州市| 怀柔区| 丹凤县| 惠州市| 南安市| 玛曲县| 南城县| 武山县| 清远市| 湘西| 宁津县| 华亭县| 翁牛特旗| 隆回县| 五指山市| 深水埗区| 崇义县| 凤山县| 甘洛县|