Mysql
InnoDB 插入速度更快
我是一名研究生,正在與 Mondrian OLAP 一起研究 OLAP。所以我想在初始載入時更快地將數據插入 InnoDB (MySQL 5.5)。在這種環境下,唯一的使用者是我,所以我認為可以允許更寬鬆的插入速度設置。目前,我正在使用以下技術。
- 禁用
log_bin
- 使能夠
skip-innodb-doublewrite
- 設置
transaction_isolation
為READ-COMMITTED
或READ-UNCOMMITTED
(實際上READ-COMMITED
)- 設置
innodb_flush_log_at_trx_commit
為0
或2
(實際上0
)- 設置
innodb_buffer_pool_size
為 5GB(系統有 6GB RAM)是否有更多技術可以在 InnoDB 上更快地插入?我必須修改
innodb_io_read_thread
andinnodb_io_write_thread
嗎?如果您需要更多資訊,請告訴我。
建議 #1
如果您的機器有多個核心,則需要增加以下內容:
[mysqld] innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_io_capacity = 5000
這些是什麼?
- innodb_read_io_threads - InnoDB 中讀取操作的 I/O 執行緒數。
- innodb_write_io_threads - InnoDB 中寫入操作的 I/O 執行緒數。
- innodb_io_capacity - InnoDB 後台任務執行的 I/O 活動的上限,例如從緩衝池刷新頁面和從插入緩衝區合併數據。
建議 #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。已知文件句柄會被記憶體。如果您將其設置得非常高並迅速達到天花板,將會出現減速。如果您正在處理少量表,則不應出現這種情況。