mysql性能的檢查和調優方法

我一直是使用mysql這個數據庫軟件,它工做比較穩定,效率也很高。在遇到嚴重性能問題時,通常都有這麼幾種可能:

一、索引沒有建好;
二、sql寫法過於複雜;
三、配置錯誤;
四、機器實在負荷不了;

一、索引沒有建好

若是看到mysql消耗的cpu很大,能夠用mysql的client工具來檢查。

在linux下執行

/usr/local/mysql/bin/mysql -hlocalhost -uroot -p 

輸入密碼,若是沒有密碼,則不用-p參數就能夠進到客戶端界面中。

看看當前的運行狀況

show full processlist

能夠多運行幾回

這個命令能夠看到當前正在執行的sql語句,它會告知執行的sql、數據庫名、執行的狀態、來自的客戶端ip、所使用的賬號、運行時間等信息

在個人cache後端,這裏面大部分時間是看不到顯示任何sql語句的,我認爲這樣纔算比較正常。若是看到有不少sql語句,那麼這臺mysql就必定會有性能問題

若是出現了性能問題,則能夠進行分析:

一、是否是有sql語句卡住了?

這是出現比較多的狀況,若是數據庫是採用myisam,那麼有可能有一個寫入的線程會把數據表給鎖定了,若是這條語句不結束,則其它語句也沒法運行。

查看processlist裏的time這一項,看看有沒有執行時間很長的語句,要留意這些語句。

二、大量相同的sql語句正在執行

若是出現這種狀況,則有多是該sql語句執行的效率低下,一樣要留意這些語句。

而後把你所懷疑的語句通通集合一下,用desc(explain)來檢查這些語句。

首先看看一個正常的desc輸出:

mysql> desc select * from imgs where imgid=1651768337;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | imgs  | const | PRIMARY       | PRIMARY | 8       | const |    1 |       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)

注意key、rows和Extra這三項,這條語句返回的結果說明了該sql會使用PRIMARY主鍵索引來查詢,結果集數量爲1條,Extra沒有顯示,證實沒有用到排序或其餘操做。由此結果能夠推斷,mysql會從索引中查詢imgid=1651768337這條記錄,而後再到真實表中取出全部字段,是很簡單的操做。
相關文章
相關標籤/搜索