我一直是使用mysql這個資料庫軟體,它工作比較穩定,效率也很高。在遇到嚴重性能問題時,一般都有這麼幾種可能:
1、索引沒有建好;
2、sql寫法過於複雜;
3、配置錯誤;
4、機器實在負荷不了;
1、索引沒有建好
如果看到mysql消耗的cpu很大,可以用mysql的client工具來檢查。
在linux下執行
/usr/local/mysql/bin/mysql -hlocalhost -uroot -p
輸入密碼,如果沒有密碼,則不用-p參數就可以進到用戶端介面中。
看看當前的運行情況
show full processlist
可以多運行幾次
這個命令可以看到當前正在執行的sql語句,它會告知執行的sql、資料庫名、執行的狀態、來自的用戶端ip、所使用的帳號、已耗用時間等資訊
在我的cache後端,這裡面大部分時間是看不到顯示任何sql語句的,我認為這樣才算比較正常。如果看到有很多sql語句,那麼這台mysql就一定會有效能問題
如果出現了效能問題,則可以進行分析:
1、是不是有sql語句卡住了?
這是出現比較多的情況,如果資料庫是採用myisam,那麼有可能有一個寫入的線程會把資料表給鎖定了,如果這條語句不結束,則其它語句也無法運行。
查看processlist裡的time這一項,看看有沒有執行時間很長的語句,要留意這些語句。
2、大量相同的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)