Mysql
MariaDB 記憶體使用量超過配置大小
我注意到我跟踪到 MariaDB 的系統記憶體使用百分比(由 sar 報告)穩步增加。這似乎與數據庫負載無關:這種增加與查詢數量的增加不匹配。
我有以下尺寸配置:
key_buffer_size = 400000000 innodb_buffer_pool_size = 1210612736
總共有 1.5GB,但現在在 RSS 記憶體上已達到 2.3GB。
為什麼越來越貪心?我可以讓它更好地堅持它的極限嗎?或者它可能堅持 InnoDB 的限制,但正在將記憶體用於其他用途,如果是這樣,有沒有辦法理解這一點,以便我可以調整配置以將總記憶體使用量保持在一定水平?或者它可能就像 Linux 核心一樣,只是在空閒時使用所有空閒記憶體進行記憶體,但在需要時很樂意放棄它?
我在 Debian 10 (Buster) 上使用 MariaDB 10.3.22。工作負載是一個網路伺服器(所以我需要為其他程序保留一些記憶體:nginx+php)。如果需要,很高興發布更多配置。
您列出的記憶體設置是共享的。每個執行緒還分配了各種緩衝區。這是 MySQL 記憶體計算器的連結:
由於 Gordon 的回答和其中的連結,由於論壇的功勞,以下命令將告訴您 MySQL/MariaDB 數據庫需要多少:
SELECT ROUND( ( @@GLOBAL.key_buffer_size + @@GLOBAL.query_cache_size + @@GLOBAL.tmp_table_size + @@GLOBAL.innodb_buffer_pool_size + @@GLOBAL.innodb_log_buffer_size + @@GLOBAL.max_connections * ( @@GLOBAL.sort_buffer_size + @@GLOBAL.read_buffer_size + @@GLOBAL.read_rnd_buffer_size + @@GLOBAL.join_buffer_size + @@GLOBAL.thread_stack + @@GLOBAL.binlog_cache_size) ) / 1024 / 1024, 1) `total MB`;
(我是 OP,這提供了 2.9GB 作為我的總配置使用量 - 是時候降低一些數字了!)