Mysql
mysqldump 5.5.25 使用交換而不是記憶體
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 中才有可能