我们有一个运行 MariaDB 的容器,以及主机上的一些其他小型容器。Mysql 容器被分配了 21G 内存(总共 32G),以及一些其他参数,在 docker-compose 中使用以下命令:
db:
command:
- --innodb_buffer_pool_size=4294967296
- --query_cache_size=268435456
- --tmp_table_size=1073741824
- --max_heap_table_size=1073741824
- --table_open_cache=20000
- --max_connections=1000
- --performance_schema
mem_limit: 21g
Run Code Online (Sandbox Code Playgroud)
我们遇到的问题是,mysql 容器在某些例行备份操作(即命令)期间内存不足mysqldump
,并且容器崩溃。
基本上,在大约一周的使用过程中,容器的内存使用量逐渐上升到 21G,我认为如果我们不启动任何“大”操作,就可以保持这个状态,但如果mysqldump
启动命令,则在转储期间的某个时刻,它超过了分配的限制,并且崩溃了(当我们在本周早些时候没有达到约 95% 的内存使用量时,它就不会崩溃)。
我不明白为什么 MySQL 不能更好地管理其内存并释放其中一些内存来启动它需要执行的新命令?
我们尝试将mysqldump
命令放在不同的容器中,试图“隔离”这个大操作,但这似乎没有改变任何东西,大部分工作仍然由 Mysql 容器完成,当其他容器执行时,它最终会崩溃倾倒。
我们应该研究什么?我们的设置是否完全不正常?我们在运行 mysqltuner.pl 后设置它们,如果您认为这就是问题所在,我可以重新运行。
我们有大约 700 个数据库,每个数据库大约有 40 个表,平均大约有 10 个并发 mysql 连接,峰值为 30 或 50 个。数据库运行大小在 10Mb 到 200Mb 之间。
任何帮助表示赞赏,谢谢!