Mysql

InnoDB 插入速度更快

  • December 9, 2016

我是一名研究生,正在與 Mondrian OLAP 一起研究 OLAP。所以我想在初始載入時更快地將數據插入 InnoDB (MySQL 5.5)。在這種環境下,唯一的使用者是我,所以我認為可以允許更寬鬆的插入速度設置。目前,我正在使用以下技術。

  • 禁用log_bin
  • 使能夠skip-innodb-doublewrite
  • 設置transaction_isolationREAD-COMMITTEDREAD-UNCOMMITTED(實際上READ-COMMITED
  • 設置innodb_flush_log_at_trx_commit02(實際上0
  • 設置innodb_buffer_pool_size為 5GB(系統有 6GB RAM)

是否有更多技術可以在 InnoDB 上更快地插入?我必須修改innodb_io_read_threadandinnodb_io_write_thread嗎?如果您需要更多資訊,請告訴我。

建議 #1

如果您的機器有多個核心,則需要增加以下內容:

[mysqld]
innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_io_capacity = 5000

這些是什麼?

建議 #2

為了從系統表空間(ibdata1)中分離數據和索引,您需要執行 InnoDB 的完整重組。聽起來很複雜,但非常簡單。我在DBA StackExchange(2012 年 8 月 29 日)StackOverflow(2010 年 10 月 29 日)中對此進行了介紹。基本步驟是

  • 跑步SET GLOBAL innodb_fast_shutdown = 0;

  • mysqldump 所有數據到 SQL 轉儲

  • service mysql stop

  • 刪除以下文件

    • ibdata1
    • ib_logfile0
    • ib_logfile1
  • service mysql start

在執行之前service mysql start,將此行添加到my.cnf

innodb_open_files=32768

這樣,將有專用於每個單獨表的文件句柄。預設值為 300。已知文件句柄會被記憶體。如果您將其設置得非常高並迅速達到天花板,將會出現減速。如果您正在處理少量表,則不應出現這種情況。

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