先挖坑,待测试!
参考: 深入浅出MYSQL di
1、控制 innodb buffer 刷新,延长数据缓存时间,减缓磁盘I/O
*innodb_max_dirty_pages_pct --控制缓存池中脏页的最大比例,默认是75%
*innodb_io_capacity -- 代表磁盘的能力,默认200,磁盘转速低时可以适当调低(7200转可调整为100)
例:
若 innodb_buffer_pool_wait_free 的值增长较快,说明Innodb经常在等待空闲缓存页,可以增大 innodb_buffer_pool_instances (缓存池),或者应将 innodb_max_dirty_pages_pct 调小,或将 innodb_io_capacity 提高,以加快脏页的刷新
2、Innodb 脏页刷新双写策略(doublewrite)
*buffer 会同时写到doubewrite buffer 和 redo ,如果要求超高性能,有能容忍极端情况下少量数据的丢失。
可以通过在配置文件中增加 innodb_doublewrite=0 来关闭doublewrite
3、调整排序缓存区
*sort_buffer_size
如果通过 show global status 看到 sort_merge_passes 的值很大,可以考虑调整 sort_buffer_size 的值来增大排序缓存区,改善order by 和 group by的性能
4、设置合理的log file size ,控制检查点
当一个日志文件写满后,innodb会自动切换到另一个日志文件,但切换时会触发数据库检查点,将导致innodb 缓存脏页的小批量刷新。
但是 innodb_log_file_size 设置太大,恢复时将需要更长时间。 一般来说,每半个小时写满1个日志文件比较合适
计算每分钟产生的日志量:
mysql> pager grep -i "Log sequence number";
mysql>show engine innodb status\G select sleep(60); show engine innodb status\G
mysql>nopager
mysql>select ROUND((90110000 - 901022222)) /1024 / 1024)as MB;
得出每分钟产生的日志大小(MB)
5、调整 innodb_log_buffer_size
innodb_log_buffer_size 决定INNODB 重做日志缓存池的大小,默认是8M.对于大量更新记录的大事务,增加 innodb_log_buffer_size 可以避免INNODB 在事务提交前就执行不必要的日志写入磁盘操作
(可以理解为,至少要调整到=最大事务的大小。)
阅读(1694) | 评论(0) | 转发(0) |