本文目錄一覽:
- 1、Mysql資料庫CPU佔用過高原因排查 show processlist
- 2、如何排查mysql cpu利用率高
- 3、mysqld佔用CPU過高是什麼原因
- 4、Mysql佔用CPU過高如何優化
- 5、mysql伺服器cpu高的原因
- 6、MySQL CPU佔用過高怎麼辦
Mysql資料庫CPU佔用過高原因排查 show processlist
mysql伺服器最近偶爾出現cpu百分百居高不下的情況,所以需要進行分析
兄弟命令 show processlist;只列出前100條,如果想全列出請使用show full processlist;
先 簡單說一下各列的含義和用途:
正在將表中修改的數據刷新到磁碟中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁碟空間是否已經滿了或者磁碟是否正處於重負中。
Connect Out
複製從伺服器正在連接主伺服器。
Copying to tmp table on disk
由於臨時結果集大於 tmp_table_size,正在將臨時表從內存存儲轉為磁碟存儲以此節省內存。
Creating tmp table
正在創建臨時表以存放部分查詢結果。
deleting from main table
伺服器正在執行多表刪除中的第一部分,剛刪除第一個表。
deleting from reference tables
伺服器正在執行多表刪除中的第二部分,正在刪除其他表的記錄。
Flushing tables
正在執行 FLUSH TABLES,等待其他線程關閉數據表。
Killed
發送了一個kill請求給某線程,那麼這個線程將會檢查kill標誌位,同時會放棄下一個kill請求。MySQL會在每次的主循環中檢查kill標誌 位,不過有些情況下該線程可能會過一小段才能死掉。如果該線程程被其他線程鎖住了,那麼kill請求會在鎖釋放時馬上生效。
Locked
被其他查詢鎖住了。
Sending data
正在處理 SELECT 查詢的記錄,同時正在把結果發送給客戶端。
Sorting for group
正在為 GROUP BY 做排序。
Sorting for order
正在為 ORDER BY 做排序。
Opening tables
這個過程應該會很快,除非受到其他因素的干擾。例如,在執 ALTER TABLE 或 LOCK TABLE 語句行完以前,數據表無法被其他線程打開。 正嘗試打開一個表。
Removing duplicates
正在執行一個 SELECT DISTINCT 方式的查詢,但是MySQL無法在前一個階段優化掉那些重複的記錄。因此,MySQL需要再次去掉重複的記錄,然後再把結果發送給客戶端。
Reopen table
獲得了對一個表的鎖,但是必須在表結構修改之後才能獲得這個鎖。已經釋放鎖,關閉數據表,正嘗試重新打開數據表。
Repair by sorting
修復指令正在排序以創建索引。
Repair with keycache
修復指令正在利用索引緩存一個一個地創建新索引。它會比 Repair by sorting 慢些。
Searching rows for update
正在講符合條件的記錄找出來以備更新。它必須在 UPDATE 要修改相關的記錄之前就完成了。
Sleeping
正在等待客戶端發送新請求.
System lock
正在等待取得一個外部的系統鎖。如果當前沒有運行多個 mysqld 伺服器同時請求同一個表,那麼可以通過增加 –skip-external-locking參數來禁止外部系統鎖。
U pgrading lock
INSERT DELAYED 正在嘗試取得一個鎖表以插入新記錄。
Updating
正在搜索匹配的記錄,並且修改它們。
User Lock
正在等待 GET_LOCK()。
Waiting for tables
該線程得到通知,數據表結構已經被修改了,需要重新打開數據表以取得新的結構。然後,為了能的重新打開數據表,必須等到所有其他線程關閉這個表。以下幾種 情況下會產生這個通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。
waiting for handler insert
INSERT DELAYED 已經處理完了所有待處理的插入操作,正在等待新的請求。
大部分狀態對應很快的操作,只要有一個線程保持同一個狀態好幾秒鐘,那麼可能是有問題發生了,需要檢查一下。
還有其他的狀態沒在上面中列出來,不過它們大部分只是在查看伺服器是否有存在錯誤是才用得著。
文章轉自:
如何排查mysql cpu利用率高
MySQL處在高負載環境下,磁碟IO讀寫過多,肯定會佔用很多資源,必然CP會U佔用過高。
佔用CPU過高,可以做如下考慮:
1.打開慢查詢日誌,查詢是否是某個SQL語句佔用過多資源,如果是的話,可以對SQL語句進行優化,比如優化 insert 語句、優化 group by 語句、優化 order by 語句、優化 join 語句等等;
2.考慮索引問題;
3.定期分析表,使用optimize table;
4.優化資料庫對象;
5.考慮是否是鎖問題;
6.調整一些MySQL Server參數,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;
7.如果數據量過大,可以考慮使用MySQL集群或者搭建高可用環境。
mysqld佔用CPU過高是什麼原因
一般是睡眠連接過多,嚴重消耗mysql伺服器資源(主要是cpu, 內存),並可能導致mysql崩潰。
解決辦法 :
mysql的配置my.ini文件中,有一項:
wait_timeout, 即可設置睡眠連接超時秒數,如果某個連接超時,會被mysql自然終止。
wait_timeout過大有弊端,其體現就是MySQL里大量的SLEEP進程無法及時釋放,拖累系統性能,不過也不能把這個指設置的過小,否則你可能會遭遇到「MySQL has gone away」之類的問題,通常來說,我覺得把wait_timeout設置為10是個不錯的選擇,但某些情況下可能也會出問題,比如說有一個CRON腳本,其中兩次SQL查詢的間隔時間大於10秒的話,那麼這個設置就有問題了(當然,這也不是不能解決的問題,你可以在程序里時不時mysql_ping一下,以便伺服器知道你還活著,重新計算wait_timeout時間):
mysql show global variables like ‘wait_timeout’;
+—————————-+——-+
| Variable_name | Value |
+—————————-+——-+
| wait_timeout | 120 |
+—————————-+——-+
mysql set global wait_timeout=20;
至此,mysql佔用cpu下降了
Mysql佔用CPU過高如何優化
CPU佔用過高診斷思路
mpstat -P ALL 1,查看cpu使用情況,主要消耗在sys即os系統調用上
perf top,cpu主要消耗在_spin_lock
生成perf report查看詳細情況
CPU主要消耗在mutex爭用上,說明有鎖熱點。
採用pt-pmp跟蹤mysqld執行情況,熱點主要集中在mem_heap_alloc和mem_heap_free上。
Pstack提供更詳細的API調用棧
Innodb在讀取數據記錄時的API路徑為
row_search_for_mysql –》row_vers_build_for_consistent_read –》mem_heap_create_block_func –》mem_area_alloc –》malloc –》 _L_unlock_10151 –》__lll_unlock_wait_private
row_vers_build_for_consistent_read會陷入一個死循環,跳出條件是該條記錄不需要快照讀或者已經從undo中找出對應的快照版本,每次循環都會調用mem_heap_alloc/free。
而該表的記錄更改很頻繁,導致其undo history list比較長,搜索快照版本的代價更大,就會頻繁的申請和釋放堆內存。
Linux原生的內存庫函數為ptmalloc,malloc/free調用過多時很容易產生鎖熱點。
當多條 SQL 並發執行時,會最終觸發os層面的spinlock,導致上述情形。
解決方案
將mysqld的內存庫函數替換成tcmalloc,相比ptmalloc,tcmalloc可以更好的支持高並發調用。
修改my.cnf,添加如下參數並重啟
[mysqld_safe]malloc-lib=tcmalloc
上周五早上7點執行的操作,到現在超過72小時,期間該實例沒有再出現cpu長期飆高的情形。
以下是修改前後cpu使用率對比
mysql伺服器cpu高的原因
CPU高主要是因為內存的問題,這樣你要考慮兩點,一是伺服器配置太低了不能承載當前的用戶量,這樣的話你升級就可以解決!二是有人在用流量攻擊你的網站這樣你就要考慮怎麼抵禦,一般情況下故意有人刷流量的可能性不是很大,
MySQL CPU佔用過高怎麼辦
MySQL CPU佔用高辦
簡單面幾步驟解決問題:
1、mysql運行能同步設置問題導致
2、mysql運行php些sql語句導致問題發現用root用戶進入mysql管理
mysql -u root -p
輸入密碼
mysql:show processlist 語句查找負荷重 SQL 語句優化該SQL比適建立某欄位索引
–
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/283705.html