我正在使用MySQL 5.5.25服務器和InnoDB作爲我的數據庫。MySQL查詢隨機掛在'發送數據'狀態?
很多時候,由於mysqld進程大約一分鐘,服務器的CPU通常工作在100%。使用SHOW PROCESSLIST:
Command | Time | State | Info
Query | 100 | Sending data | SELECT a.prefix, a...
Query | 107 | Sending data | SELECT a.prefix, a...
Query | 50 | Sending data | SELECT a.prefix, a...
有問題的查詢是:
SELECT a.prefix, a.test_id, a.method_id, b.test_id
FROM a
LEFT JOIN b ON b.test_id = a.test_id
AND user_id = ?
AND year = ?
所有這些列索引,因此這不是問題。另外,當我在phpMyAdmin中運行查詢(具有足夠的LIMIT)時,需要0.05秒才能完成。另外,我發現無法自己再現這個問題,即使同時執行兩次查詢併發送垃圾郵件只能給我40%的CPU帶來麻煩,這也是非常令人沮喪的。
前綴來查詢說明的結果:
Id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | a | ALL | NULL | NULL | NULL | NULL | 1169 |
1 | SIMPLE | b | ref | user_id,year,test_id | test_id | 4 | db.a.test_id | 58 |
除非我不能看到什麼是正確的在我的面前,我尋找各種方法來發現如何調試這樣的問題。我已經記錄了所有的查詢和執行時間,以及它們的值等等。但是由於我無法複製它,所以我被卡住了。我該怎麼做才能弄清楚這個問題是關於什麼的?
根據行數,表格的大小是多少。禁用查詢緩存,如果它啓用,然後再現。你有什麼CPU,線程數等exucute顯示引擎innodb狀態\ G,爲僵局年輕人/非年輕人loog,然後開始挖掘問題... –
感謝您的評論,如果它是一個答案,而不是評論我會接受它。 – Yeti