如何提高MySql写入性能--菜鸟随笔

如何提高MySql写入性能--菜鸟随笔

  • 问题表征
  • 调整方法

问题表征

MySql高并发写入速度缓慢,期间查询正常。

调整方法

  1. 调整参数innodb_buffer_pool_size 默认值在各个版本有所不同,最小8M,最大默认可能为1G,可以视情况调整为2-3G甚至更高;

  2. 调整参数innodb_flush_log_at_trx_commit = 2

  • 值为0 : 提交事务的时候,不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。此时可能你提交事务了,结果 mysql 宕机了,然后此时内存里的数据全部丢失。
  • 值为1 (默认值): 提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。
  • 值为2 : 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。
    可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我们知道写磁盘的速度是很慢的,因此 MySQL 的性能会明显地下降。如果不在乎事务丢失,0和2能获得更高的性能。

显然0和2能获得更高的性能,而1更能保证事务一致性
性能高–>低
2 --> 0 – > 1

3.调整参数sync_binlog = N
表示执行每写N次操作系统缓冲就执行一次刷新操作,配合innodb_flush_log_at_trx_commit参数可以控制数据丢失的范围。

你可能感兴趣的:(mysql)