簡體   English   中英

如何像MyISAM一樣快速地將數據導入InnoDB表

[英]How to import data into InnoDB tables as fast as MyISAM

我是MySQL的新手,我對它知之甚少。

我面臨的問題如下所述:

以前我的數據有MyISAM作為它的MySQL引擎,過去需要大約15分鍾才能在任何機器上導入。 但是,當我將引擎更改為InnoDB時,需要花費大約90分鍾才能在任何機器上導入。 請建議我同樣的。

對於並發插入,Innodb表更快。 請參閱Innodb性能優化基礎知識

為獲得最佳性能,您需要在my.cnf文件中調整INNODB引擎。

假設,如果您有4GB RAM嘗試將my.cnf文件配置為:

#Innodb
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 512M
innodb_log_file_size = 1G
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 30
innodb_file_per_table=1
innodb_file_format=barracuda
innodb_strict_mode=1
innodb_autoinc_lock_mode = 0

然后重啟MySQL服務器。

@Omesh有一些很棒的提示,我認為這是我最新導入的4.5GB和5.0GB SQL的3600萬行成功的部分原因。 我想得到一個其他一些額外提示有幫助的地方。

  1. 關注@Omesh MySQL配置建議。

  2. 接下來,查看您嘗試導入的實際SQL文件。 我們用於轉儲數據的工具在INSERT語句之前添加了這些行:

    /*!40000 ALTER TABLE `table_name` DISABLE KEYS */;

    我所做的是取消注釋。 它在插入期間禁用主鍵檢查,使其更快。 如果您沒有該行,則可以手動添加它:

    ALTER TABLE `table_name` DISABLE KEYS;

    如果這是一個正在使用的實時數據庫,請小心使用。

  3. INSERT語句之后,該工具立即添加了該行。 刪除注釋以重新啟用主鍵:

    /*!40000 ALTER TABLE `table_name` ENABLE KEYS */;

    再次,它應該是這樣的:

    ALTER TABLE `table_name` ENABLE KEYS;

  4. 在實際運行insert語句之前, unique_checks使用查詢關閉autocommitunique_checksforeign_key_checks

    set autocommit=0; set unique_checks=0; set foreign_key_checks=0;

  5. 現在運行你的導入:

    source /path/to/your/file.sql

  6. 導入成功完成后,您將要提交然后重新啟用unique_checksforeign_key_checks

    commit; set unique_checks=1; set foreign_key_checks=1;

您可能需要考慮的進口的其他一些注意事項是:

  • 如果您正在使用虛擬機,請為VM啟動可用資源(RAM,CPU核心數),直到導入完成為止

  • 如果您使用的是物理機,可以從另一台機器借用一些RAM足夠長的時間來完成導入

  • 如果可能的話,使用2個不同的磁盤:1個專用於讀取(SQL文件源)和1個專用於寫入(DB或VM所在的位置)

希望這有助於其他人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM