帮酷LOGO
0 0 评论
文章标签:内存  MEMO  Docker  DOCK  DOC  Contain  备份  DUMP  


问题:

我们有一个正在运行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



问题是,mysql容器在一些常规备份(即 mysqldump 命令)操作中会耗尽内存,而容器只是崩溃。

基本上,容器占用的内存在大约一周的使用期间会爬到 21G, 我认为,如果我们没有启动任何"大"的操作,我认为可以停留在那里,但是,如果启动了 mysqldump 命令,那么在转储过程中的某个时刻 将它超过其分配的限制,并且崩溃(当我们在本周早些时候没有达到~95%的内存使用量时,它就不会崩溃)。

我不明白为什么mysql不能更好地管理它的内存,并释放一些它来启动它需要执行的新命令?

我们尝试将 mysqldump 命令放在不同的容器中,尝试"隔离"这个大操作,但这似乎没有改变任何东西,大部分工作仍由MySQL容器完成,当另一个容器执行转储时,也会最终崩溃 。

我们应该研究什么? 我们的设置完全没有问题吗? 我们在运行mysqltuner.pl之后设置它们,如果你认为问题出在哪里,我就可以进行新的运行。

我们有大约700个数据库,每个数据库大约有40个表,平均可能有大约10个同步的mysql连接,其中一些峰值为30或50。 数据库的大小介于10Mb和200Mb之间。

感谢你的帮助,谢谢 !


回答 1:

使用 --quick 选项运行 mysqldump

默认情况下 MySQL dump会尝试一次性转储整个表,这意味着它必须将整个表加载到内存中,并且当内存受限时 mysqldump 可能会失败 。 --quick 选项切换到按行转储,这稍微慢一点并使转储文件略大,但使用的内存要少得多

不,我不知道他们为什么命名选项 --quick


回答 2:

如果你不想给mysql提供更多内存,你可以尝试设置复制服务器,并从那里执行mysqldump,问题是当你的服务器加载时mysqldump有风险。 请看一下与性能相关的参数,这些参数也可能有助于 https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#mysqldump-performance-options

希望这会有帮助。




文章标签:DOC  Docker  DOCK  Contain  MEMO  备份  内存  DUMP  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语