使用者抱怨mysqldump正在進行時系統執行緩慢
MYSQL 數據庫 (ibdata1) 大小為 73 GB,配置為在 Windows 2008 O/S 上作為 INNODB 表的專用數據庫伺服器執行。我們正在使用 mysqldump 執行備份 mysqldump –skip-opt –quick –single-transaction –create-options –extended-insert –disable-keys –add-drop-table –complete-insert – set-charset – 壓縮 –log-error=Proddb0635.err -u root -pjohndoe Proddb> \devNas\devNas\sqlbackup\LIVE\db\Proddb0635.sql
備份文件 Proddb0635.sql 儲存在與數據庫伺服器不同的伺服器上。記憶體為 12 GB。INNODB 緩衝池大小為 6 GB。額外的 mem.pool 為 32 MB。查詢記憶體大小為 2 GB 淨緩衝區長度為 16 M Max。數據包大小 1 GB。
mysql 版本是 5.0.67。
當備份未執行時,使用者對性能感到滿意。
備份執行時 INNODB 緩衝池命中率很高,接近 100%。沒有掛起的讀取或掛起的寫入。innodb 等待空閒為 0。CPU 使用率不高,最小 9% 到最大 15% 查詢記憶體命中率低約 40%,無論是否執行 mysqlbackup。目前 Windows 任務管理器顯示正在使用 10GB 的 RAM。我應該在只有 2GB 可用 RAM 的情況下增加查詢記憶體嗎?mysqlld-nt 佔用 9.2 GB 的 RAM,而 mysqldump 佔用 5 MB 的 RAM。Alos,注意到轉儲文件的大小在存在或不存在 –compress 選項時是相同的。
我應該減小 iNNODB 緩衝池的大小嗎?
謝謝
Windows 中存在一個已知問題,即當您將大文件推送到另一台伺服器時,所有記憶體最終都會分配給系統記憶體而不是使用者程序。您可以查看任務管理器的物理記憶體 (MB) 部分,了解分配給系統記憶體的記憶體量。
這可以通過備份到本地磁碟,然後讓遠端機器提取該文件來解決。
鑑於您的情況,以下是我對提高 mysqldump 性能的一些想法。這是你的命令:
mysqldump –skip-opt –quick –single-transaction –create-options –extended-insert –disable-keys –add-drop-table –complete-insert –set-charset –compress - -log-error=Proddb0635.err -u root -pjohndoe Proddb> \devNas\devNas\sqlbackup\LIVE\db\Proddb0635.sql
我注意到的第一件事是您將輸出重定向到文件系統。它說 ‘devNas’ 所以我假設這是Network Attached Storage。我是 NAS 備份的粉絲,但它必須連接到與生產流量不同的物理 NIC上。您可能沒有使頻寬飽和,但它們仍在競爭。由於 –quick 標誌,這將成為一個更大的問題,因為它刷新每一行而不是將其保存在記憶體中。
接下來我看到的是您呼叫了 –compress。看起來您正在本地執行 mysql,因為您沒有使用 -h 開關。這可能會使用在這種情況下不必要的本地 CPU。**–compress 是必要的嗎?**它只壓縮 mysqldump 客戶端和 mysql 伺服器之間的數據,而不是文件內容。
接下來,我看到您正在使用 –single-transaction 標誌。這將導致額外的 CPU,因為它作為 mysqldump 的一部分對每個選擇進行測試。
這與性能無關,但您使用的 –disable-keys 僅適用於 MyISAM (手冊)。
您可能想嘗試從離線主機遠端執行 mysqldump,並在完成後將轉儲文件移動到 NAS,以盡可能多地在帶外執行此操作。