帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容


問題:

我們有一個正在運行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

希望這會有幫助。





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