故障排除指南:MySQL執行記憶體不足怎麼辦?
故障排除對於所有人來說都不會是一件有趣的事情,尤其是在沒有崩潰報告的情況下。如果MySQL因記憶體不足而崩潰時應該怎麼辦?Peter Zaitsev曾在2012年寫過的一篇部落格中給出了許多有用的提示,而利用新版本的MySQL(5.7及以上)和performance_schema,我們可以更輕鬆地解決MySQL記憶體分配問題。
本文將向大家介紹如何解決MySQL記憶體分配問題。
首先,我們先來看一下在哪些情況下MySQL會因記憶體不足而崩潰:
-
當MySQL嘗試分配比可用記憶體更多的記憶體時,例如沒有正確設定innodb_buffer_pool_size;
-
伺服器上還有一些其他程式可以分配RAM,比如它應用程式(java,python,php)、Web伺服器,或者是備份(即mysqldump)。
-
MySQL中的記憶體洩漏。這是最糟糕的情況,我們需要進行故障排除。
以上,就是常見的三種MySQL因記憶體不足而崩潰的情況,其中前兩種情況比較好解決,而第三種情況就比較棘手。
從哪裡開始排除MySQL記憶體洩漏問題
假設這是一個Linux伺服器,首先我們要 檢查Linux作業系統和配置 ,
-
檢查mysql錯誤日誌和Linux日誌檔案(即/ var / log / messages或/ var / log / syslog)來識別崩潰。你可能會看到OOM Killer殺死MySQL的條目,可以使用“dmesg”來顯示相關的詳細資訊。
-
檢查可用的RAM: free -g cat / proc / meminfo
-
檢查哪些應用程式正在使用RAM: “top”或“htop”
-
檢查mysql配置: /etc/my.cnf 或general /etc/my* (including /etc/mysql/*等檔案),MySQL可能正在執行不同的my.cnf(run ps ax | grep mysql )
-
執行 vmstat 5 5 以檢視系統是否正在通過虛擬記憶體進行讀/寫以及是否正在進行交換
-
對於非生產環境,我們可以使用其他工具(如Valgrind,gdb等)來檢查MySQL的使用情況.
檢查MySQL內部
我們也可以通過檢查MySQL內部來發現潛在的MySQL記憶體洩露。MySQL在很多地方都會有記憶體分配,尤其是在以下情況下:
現在我們可以檢查MySQL內部的東西來尋找潛在的MySQL記憶體洩漏。
MySQL在很多地方分配記憶體。特別:
-
Table cache
-
Performance_schema(執行: show engine performance_schema status ,並檢視最後一行)。
-
InnoDB(執行 show engine innodb status 並檢查緩衝池部分,為buffer_pool和相關快取分配的記憶體)
-
RAM中的臨時表(通過執行以下語句查詢所有記憶體表: select * from information_schema .tables where engine ='MEMORY' )
-
Prepared statements。
不過,從MySQL 5.7版本開始,我們就可以在performance_schema中檢視記憶體分配。那麼,如何使用呢?
首先,我們需要啟用收集記憶體指標。Run:
UPDATE setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'memory/%';
sys schema 執行 report :
select event_name, current_alloc, high_alloc from sys.memory_global_by_current_bytes where current_count > 0;
通常,分配記憶體時會提供程式碼,所以在某些情況下搜尋某些錯誤時,我們可能需要檢查
MySQL
原始碼。例如,對於在觸發器中過度分配記憶體的錯誤:
某些情況下搜尋某些錯誤時,我們可能需要檢查MySQL原始碼。例如,對於在觸發器中過度分配記憶體的錯誤:
mysql> select event_name, current_alloc, high_alloc from memory_global_by_current_bytes where current_count > 0; +--------------------------------------------------------------------------------+---------------+-------------+ | event_name | current_alloc | high_alloc | +--------------------------------------------------------------------------------+---------------+-------------+ | memory/innodb/buf_buf_pool | 7.29 GiB | 7.29 GiB | | memory/sql/sp_head::main_mem_root | 3.21 GiB | 3.62 GiB
RAM中最大的塊通常是緩衝池,但儲存過程中的3G似乎也太高了。
根據MySQL原始碼文件,SPHead表示儲存程式的一個例項,該程式可能是任何型別(儲存過程、函式、觸發器、事件)。在這種情況下,就會有潛在的記憶體洩漏。此外,如果我們想要更清楚的知道MySQL記憶體情況,還可以得到一個更高階別的總報告。
mysql> select substring_index( -> substring_index(event_name, '/', 2), -> '/', -> -1 -> ) as event_type, -> round(sum(CURRENT_NUMBER_OF_BYTES_USED)/1024/1024, 2) as MB_CURRENTLY_USED -> from performance_schema.memory_summary_global_by_event_name -> group by event_type -> having MB_CURRENTLY_USED>0; +--------------------+-------------------+ | event_type | MB_CURRENTLY_USED | +--------------------+-------------------+ | innodb | 0.61 | | memory | 0.21 | | performance_schema | 106.26 | | sql | 0.79 | +--------------------+-------------------+ 4 rows in set (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31137683/viewspace-2158344/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pycharm提示記憶體不足怎麼辦PyCharm記憶體
- win10記憶體不足怎麼解決_win10記憶體不足怎麼辦Win10記憶體
- Linux 硬體故障排除指南Linux
- win10記憶體不足會黑屏嗎_win10電腦記憶體不足黑屏了怎麼辦Win10記憶體
- mongodb記憶體不足怎麼解決?MongoDB記憶體
- win10遊戲記憶體不足怎麼辦_win10玩遊戲提示記憶體不足處理方法Win10遊戲記憶體
- 虛擬記憶體有什麼用 虛擬記憶體不足怎麼解決記憶體
- w10計算機記憶體不足怎麼辦_w10計算機記憶體不足請關閉以下程式解決方法計算機記憶體
- w10老顯示記憶體不足怎麼解決 w10記憶體總是顯示記憶體不足處理方法記憶體
- MacBook 執行 Final Cut Pro X 空間不足怎麼辦?Mac
- 執行Final Cut Pro X 提示空間不足怎麼辦?
- 如何檢視MySQL資料庫佔多大記憶體,佔用太多記憶體怎麼辦?MySql資料庫記憶體
- win10遠端記憶體不足怎麼解決_win10遠端提示記憶體不足如何處理Win10記憶體
- Mac記憶體空間不足怎麼辦?試試刪除這幾個資料夾!Mac記憶體
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- win10開機記憶體佔用60%怎麼辦 解決開機執行記憶體佔用率過高的方法Win10記憶體
- win10更新失敗提示記憶體不足怎麼回事_win10記憶體不足導致更新失敗如何修復Win10記憶體
- MySQL記憶體執行緒獨享使用的方法MySql記憶體執行緒
- Allowed memory size 記憶體不足記憶體
- MySQL 執行DDL語句 hang住了怎麼辦?MySql
- Kubernetes故障排除的直觀指南 - Daniele Polencic
- iOS記憶體不夠怎麼辦?-底層原理iOS記憶體
- win10遊戲提示視訊記憶體不足如何處理 win10玩遊戲提示視訊記憶體不足怎麼解決Win10遊戲記憶體
- win10開啟office提示記憶體或磁碟不足怎麼解決Win10記憶體
- 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南
- Java 執行緒記憶體模型Java執行緒記憶體模型
- 設定SQLserver執行記憶體SQLServer記憶體
- win10執行框無法儲存記憶上次使用的命令怎麼辦Win10
- 電腦記憶體不夠用了怎麼辦 電腦記憶體不夠用的方法記憶體
- vertica記憶體不足的解決方案記憶體
- [20201110]伺服器記憶體不足.txt伺服器記憶體
- Linux記憶體不足的處理方法Linux記憶體
- Longhorn 雲原生容器分散式儲存 - 故障排除指南分散式
- win10執行記憶體多大才夠用?windows10需要多大執行記憶體Win10記憶體Windows
- 電腦記憶體條怎麼選?通俗易懂的電腦記憶體選購知識指南記憶體
- 深入理解Java的堆記憶體和執行緒記憶體Java記憶體執行緒
- win10系統怎麼檢視推薦的故障排除歷史記錄Win10
- 故障分析 | MySQL 耗盡主機記憶體一例分析MySql記憶體