
为了提高写入速度,我们主要从数据库日志和数据写入开始,可以将下面配置参数初始化到my.cnf 中去
innodb_log_buffer_size
事务日志所使用的缓冲区。InnoDB在写事务日志的时候,为了提高性能,先将信息写入Innodb Log Buffer 中,当满足innodb_flush_log_trx_commit 参数所设置的相应条件(或者日志缓冲区写满)时, 再将日志写到文件(或者同步到磁盘)中。
可以通过innodb_log_buffer_size 参数设置其可以使用的最大内存空间。 默认为8MB,一般设置为16~64MB即可。
innodb_flush_log_at_trx_commit
该参数可以理解为 InnoDB 在事务提交后的日志写入频率。默认值为1,有0、1、2三个可选值
0: log buffer 会 每秒写入到日志文件并刷写(flush)到磁盘。但每次事务提交不会有任何影响,也就是 log buffer 的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,
但如果 mysqld 进程崩溃,通常会导致最后 1s 的日志丢失。
1: 每次事务提交时,log buffer 会被写入到日志文件并刷写到磁盘。这也是默认值。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。
2:每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果 mysqld 进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。
上面说到的「最后 1s」并不是绝对的,有的时候会丢失更多数据。有时候由于调度的问题,每秒刷写(once-per-second flushing)并不能保证 100% 执行。对于一些数据一致性和完整性要求不高的应用,配置为 2 就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1.
这里我们建议设置为2 即 innodb_flush_log_at_trx_commit=2
innodb_log_file_size
默认是8MB,InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入Innofb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,
才会将日志写到文件 (或者同步到磁盘)中对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间
innodb_log_file_size = 512M