Mysql

MariaDB 10.5.4 上的高記憶體使用故障排除

  • November 11, 2020

我在 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.7
  • 07 Oct 2020: MariaDB 10.5.6
  • 10 Aug 2020: MariaDB 10.5.5

自 10.5.4 版以來修復了一些記憶體問題

10.5.5 中修復的記憶體問題

修訂 #d1bb7f9143

  • 2020-06-24 12:51:55 +0300
  • 修復了 item_sum.cc::report_cut_value_error() 中的記憶體洩漏

修訂 #572e53d8cc

  • 2020-06-19 15:24:16 +0530
  • MDEV-22931:mtr_t::mtr_t() 分配一些記憶體

10.5.6 中修復的記憶體問題

無(只是以前版本的分支合併)

10.5.7 中修復的記憶體問題

修訂 #0d581562d8

  • 2020-10-22 17:09:18 +0300
  • 修復 Alter_drop 分配上的記憶體洩漏

修訂 # d98ccbe1e1

  • 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。

引用自:https://dba.stackexchange.com/questions/279486