Mysql
MariaDB 10.5.4 上的高記憶體使用故障排除
我在 MariaDB 伺服器上遇到了非常高的記憶體使用情況。我不確定這是由於配置錯誤還是錯誤。
Server: MariaDB Server version: 10.5.4-MariaDB MariaDB Server
我們正在執行 MariaDB 10.5.4
我們的伺服器配置為使用 140G 的 bugger 和 9G 的日誌。
innodb_buffer_pool_size=140G innodb_log_file_size=9G max_heap_table_size = 8G tmp_table_size = 8G
但是,我們的伺服器目前使用 225G,伺服器上沒有任何負載,並且在查詢期間經常超過 240G。
所有表都是 InnoDB。根據資訊模式的記憶體緩衝區使用情況如下:
MariaDB [db]> SELECT ENGINE, ROUND(SUM(data_length) /1024/1024, 1) AS "Data MB", ROUND(SUM(index_length)/1024/1024, 1) AS "Index MB", ROUND(SUM(data_length + index_length)/1024/1024, 1) AS "Total MB", COUNT(*) "Num Tables" FROM INFORMATION_SCHEMA.TABLES WHERE table_schema not in ("information_schema", "PERFORMANCE_SCHEMA", "SYS_SCHEMA", "ndbinfo") GROUP BY ENGINE; +--------+-----------+----------+-----------+------------+ | ENGINE | Data MB | Index MB | Total MB | Num Tables | +--------+-----------+----------+-----------+------------+ | NULL | NULL | NULL | NULL | 20 | | Aria | 0.8 | 0.3 | 1.1 | 24 | | CSV | 0.0 | 0.0 | 0.0 | 2 | | InnoDB | 1952761.3 | 284144.6 | 2236905.9 | 2517 | | MEMORY | 0.0 | 0.0 | 0.0 | 3 | +--------+-----------+----------+-----------+------------+ Total large memory allocated 151397597184 Dictionary memory allocated 899109080 Buffer pool size 9019360 Free buffers 1024 Database pages 9018336 Old database pages 3329014 Modified db pages 0 Percent of dirty pages(LRU & free pages): 0.000 Max dirty pages percent: 75.000 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 47473690, not young 10534657191 0.00 youngs/s, 0.00 non-youngs/s Pages read 192376965, created 62530810, written 146872114 0.00 reads/s, 0.00 creates/s, 0.00 writes/s No buffer pool page gets since the last printout Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 9018336, unzip_LRU len: 0 I/O sum[0]:cur[0], unzip sum[0]:cur[0]
伺服器記憶體使用量開始正常,但在幾天內大幅增加,直到最終消耗所有伺服器資源並重新啟動。
從舊版本的 MariaDB 升級後不久,我們就開始遇到這個問題。(不記得是哪一個,但它非常過時)。
如何進一步解決此問題,如何確保記憶體使用不超過 160G?
可能的記憶體洩漏問題
自 10.5.4 版以來已經發布了三個版本
03 Nov 2020
: MariaDB 10.5.707 Oct 2020
: MariaDB 10.5.610 Aug 2020
: MariaDB 10.5.5自 10.5.4 版以來修復了一些記憶體問題
10.5.5 中修復的記憶體問題
- 2020-06-24 12:51:55 +0300
- 修復了 item_sum.cc::report_cut_value_error() 中的記憶體洩漏
- 2020-06-19 15:24:16 +0530
- MDEV-22931:mtr_t::mtr_t() 分配一些記憶體
10.5.6 中修復的記憶體問題
10.5.7 中修復的記憶體問題
- 2020-10-22 17:09:18 +0300
- 修復 Alter_drop 分配上的記憶體洩漏
- 2020-08-21 11:54:16 +0300
- MDEV-23526 InnoDB 洩漏一些靜態對象的記憶體
你接下來可以做什麼
您可能需要在 Staging Server 上更新到 MariaDB 10.5.7,將數據載入到其中。完成此操作後,您可以進行一些基準測試。
- 也許您可以 mysqlbinlog 從 10.5.4 伺服器中的二進制日誌中轉儲所有內容,並將生成的 SQL 導入執行 10.5.7 的 Staging Server。
- 您還可以將慢速日誌從 10.5.4 伺服器導入到 10.5.7 Staging Server。
看看記憶體是否膨脹。
如果記憶體沒有膨脹,那麼您應該將 prod 伺服器升級到 10.5.7。