Mysql

mysqldump 5.5.25 使用交換而不是記憶體

  • September 11, 2019

mysql 版本 5.5.25,雖然使用 mysqldump 轉儲大表,但它會消耗大量交換空間,而有大量可用記憶體。

# free -m
            total       used       free     shared    buffers     cached
Mem:         32177      31427        749          0        208      10747
-/+ buffers/cache:      20471      11705
Swap:        16002      12952       3049

# cat /proc/sys/vm/swappiness 
5

#[mysqldump]
quick
max_allowed_packet = 16M

您的問題是,它mysqldump通常會記憶體它產生的結果。

您必須使用該--quick選項來防止這種情況。

--quick, -q

此選項對於轉儲大型表很有用。它強制mysqldump每次從伺服器檢索表的行,而不是檢索整個行集並在將其寫出之前將其緩沖在記憶體中。

在這種情況下,你只能做這麼多。我建議升級到 5.7

SUGGESTION 1:增加緩衝池實例

為了解決過去的一些交換問題,我將 innodb_buffer_pool_instances 設置為 CPU 的數量。(請參閱我對 如何調整 MySQL 以應對繁重的 InnoDB 工作負載的回答?

如果升級到 MySQL 5.7,則預設為 8。這將降低交換的發生率。

建議 #2:將緩衝池轉儲到磁碟

在 mysqldump 之前轉儲緩衝池

mysql> SET GLOBAL innodb_buffer_pool_dump_now = 1;

執行mysqldump,然後執行

mysql> SET GLOBAL innodb_buffer_pool_load_now = 1;

現在緩衝池具有與轉儲前相同的數據和索引頁面

這僅在 MySQL 5.6/5.7 中才有可能

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