ino*_*iro 10 mysql innodb insert mysql-5.5
我是一名研究生,正在使用 Mondrian OLAP 研究 OLAP。所以我想在初始加载时更快地将数据插入 InnoDB (MySQL 5.5)。在这种环境下,唯一的用户是我,所以我认为可以对插入速度进行更宽松的设置。目前,我正在使用以下技术。
log_binskip-innodb-doublewritetransaction_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和innodb_io_write_thread吗?如果您需要更多信息,请告诉我。
Rol*_*DBA 12
如果你的机器有多个核心,则需要增加以下内容:
[mysqld]
innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_io_capacity = 5000
Run Code Online (Sandbox Code Playgroud)
这些是什么?
为了从系统表空间 (ibdata1) 中分离数据和索引,您需要对 InnoDB 执行完整的重构。听起来很复杂,但非常简单。我在DBA StackExchange(2012 年 8 月 29 日)和StackOverflow(2010 年 10 月 29 日)中对此进行了介绍。基本步骤是
SET GLOBAL innodb_fast_shutdown = 0;service mysql stopibdata1ib_logfile0ib_logfile1service mysql start在运行之前service mysql start,将此行添加到my.cnf
innodb_open_files=32768
Run Code Online (Sandbox Code Playgroud)
这样,就会有专用于每个单独表的文件句柄。默认值为 300。已知文件句柄会被缓存。如果您将其设置得非常高并迅速达到上限,那么速度将会放缓。如果您正在处理少量表,情况就不应该如此。
有一个完整的文档专门用于将数据批量加载到 InnoDB 中。要点:
SET autocommit=0;...sql import;COMMIT;禁用外部和唯一检查(您不能完全禁用所有索引):
SET unique_checks=0;
SET foreign_key_checks=0;
Run Code Online (Sandbox Code Playgroud)第三个可能对您有帮助,也可能没有帮助,因此我建议您阅读该链接以了解您最初是如何加载数据的。例如,如果您将负载分解为多个插入以并发运行,那么将值设置为 2 肯定会帮助您。如果您正在执行一个大型多行插入,它不会做太多(如果有的话)帮助。
由于您正在为这个初始插入转换二进制日志,因此您不应该关心自动增量数字中的差距(如果进行并发插入)。