innodb io优化

15
InnoDB IO优化 淘宝希羽

Upload: hui-liu

Post on 24-Jul-2015

888 views

Category:

Technology


12 download

TRANSCRIPT

Page 1: InnoDB IO优化

InnoDB IO优化

淘宝希羽

Page 2: InnoDB IO优化

议程

• 高性能存储引发的参数调整

• InnoDB IO原理及实现

• 模拟AIO与AIO的区别

• IO性能与稳定之间的妥协

• Percona对IO的改进

• 备库的IO优化

Page 3: InnoDB IO优化

高性能存储引发的参数调整: 文件存储相关参数

• 日志文件 – 由group内的几个日志文件rotate – 每个文件大小默认设置过小,影响性能 – 顺序读写,建议存储于普通硬盘上

• 系统表空间文件 – 建议存入于普通硬盘上

• 数据文件 – 每个InnoDB表对应一个数据文件 – 固定大小的自增长 – 随机读写,存储于高性能存储介质 – O_DIRECT,无需OS的pagecache干预

Page 4: InnoDB IO优化

高性能存储引发的参数调整: 读写线程相关参数

• 读写线程

– 默认设置过小,不能发挥硬件性能

– 建议读写16,太大作用不明显

• IO吞吐能力

– 默认过小,影响刷脏能力

– 建议2000,过大无优势

Page 5: InnoDB IO优化

高性能存储引发的参数调整: 内核IO调度策略参数

• 四种调度策略

– noop/deadline/AS/CFQ

• 建议选择noop/deadline中之一

Page 6: InnoDB IO优化

InnoDB IO原理及实现: 异步IO

• 读同步IO

– 如果page不在buffer pool中,则从存储层读入

– 当buffer-pool满时,从LRU_LIST尾剔

– 特殊的读,如read-ahead,则是异步

• 写异步IO

– 在buffer pool中修改完成则返回

– 由主线程定时从FLUSH_LIST刷到存储层

– 特殊的写也可以是同步

Page 7: InnoDB IO优化

InnoDB IO原理及实现: IO 工作流程

Page 8: InnoDB IO优化

模拟AIO与AIO的区别: 模拟AIO

• 模拟AIO的优化之处(写入)

– 相邻的IO合并

– 批量的写入

– 大量的slot,sem_wait/full控制,sem触发刷脏

– 可以更多的slot

• 模拟AIO的缺点

– 大量复杂逻辑,触发条件多

– Bug难排查,如DDL丢表问题

Page 9: InnoDB IO优化

模拟AIO与AIO的区别: native AIO

• 易用,让系统去完成之前的绝大部分内容

• 稳定,更广泛的使用与考验

• 恢复更快,提速近1/3

Page 10: InnoDB IO优化

IO性能与稳定之间的妥协: buffer pool中的脏页比例

• 脏页比越高,IO活动可能会减少,恢复越久

• 脏页30%到50%,为的是更快的恢复

Page 11: InnoDB IO优化

Percona对IO的改进: 可分离的doublewrite buffer

• doublewrite buffer

– 位于存储层的系统表空间文件中

– 为保证页写入的一致性

– 如果开启doublewrite,则次先写doublewrite buffer,再写其它文件

– 将其分离到另外的存储分区

Page 12: InnoDB IO优化

Percona对IO的改进: 可配的purge线程

• purge函数

– 寄宿于主线程内,”垃圾回收器”

– 当写入量大时,性能差,可能是瓶颈

– 将其分离到独立的线程,并且线程数可配

Page 13: InnoDB IO优化

Percona对IO的改进: 多buffer pool实例

• 减少buffer pool操作的mutex粒度

• 太多则增加CPU开销

• 线上还没有配置,没有完备的测试验证

Page 14: InnoDB IO优化

Percona对IO的改进: 可配的页大小

• 系统为4K,为何InnoDB采用16K?

– 5分钟原则

• 可配,4K/8K等,增加更的记录命中率

Page 15: InnoDB IO优化

备库的IO优化: 预热工具

• 备库的瓶颈

– 主库的多线程,最终在备库上变成单线程

– 备库有延时

• 解决策略

– Transfer/DRC/relay-fetch

• relay-fetch的实现原理

• relay-fetch开源化