2014-11-25 35 views
0

調用mysqldump爲包含innodb & myisam表的數據庫。 當涉及到11GB大小的胖MyISAM表時,轉儲仍然運行得非常快。快速意味着iotop顯示我的寫入性能超過70MB/s。 我在mytop中查看進程,所以我知道它發生在一個大桌子上。 轉儲文件增長到8GB,然後突然I/O只有大約1 MB/s。mysqldump大MyISAM錶快速啓動並突然減慢

服務器負載正常,沒有其他進程在運行。 試圖改變my.cnf設置,但沒有任何工作。

回答

0

性能取決於幾個因素。

我不得不創建an alternative solution to Mysqldump的客戶,使他們加載42GB轉儲文件(超過十億行)

參考:最初,mysqldump的了3.9天與64GB的RAM一個16核心服務器上,一個10磁盤SSD陣列。

使用uniVocity我們使用3年筆記本電腦在90分鐘內加載了相同的數據。您可以將其與30天的評估許可一起使用以加載此許可。

除此之外,這裏有可能影響性能的幾件事情:

檢查,如果你有這對您的轉儲文件禁用約束:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 
SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' 

如果它不添加他們或更改創建表腳本以刪除所有約束。如果您在運行轉儲加載時啓用了約束(主鍵,外鍵等),則隨着時間的推移,該過程將變得更慢,因爲數據庫將根據越來越多的可能性驗證每個插入的這些約束(更多PK和FK) 。

如果你正使用InnoDB(不完全是你的情況,但它可以幫助別人),將它添加到您的my.cfg文件:

innodb_doublewrite = 0 
innodb_buffer_pool_size = 8000M 
# innodb_log_file_size = 512M - If I enable this one the server won't start. Couldn't identify why. 
log-bin = 0 
innodb_support_xa = 0 
innodb_flush_log_at_trx_commit = 0