SlideShare a Scribd company logo
InnoDB IO优化

  淘宝希羽
议程
•   高性能存储引发的参数调整
•   InnoDB IO原理及实现
•   模拟AIO与AIO的区别
•   IO性能与稳定之间的妥协
•   Percona对IO的改进
•   备库的IO优化
高性能存储引发的参数调整:
       文件存储相关参数
• 日志文件
 – 由group内的几个日志文件rotate
 – 每个文件大小默认设置过小,影响性能
 – 顺序读写,建议存储于普通硬盘上
• 系统表空间文件
 – 建议存入于普通硬盘上
• 数据文件
 –   每个InnoDB表对应一个数据文件
 –   固定大小的自增长
 –   随机读写,存储于高性能存储介质
 –   O_DIRECT,无需OS的pagecache干预
高性能存储引发的参数调整:
    读写线程相关参数
• 读写线程
 – 默认设置过小,不能发挥硬件性能
 – 建议读写16,太大作用不明显
• IO吞吐能力
 – 默认过小,影响刷脏能力
 – 建议2000,过大无优势
高性能存储引发的参数调整:
    内核IO调度策略参数
• 四种调度策略
 – noop/deadline/AS/CFQ
• 建议选择noop/deadline中之一
InnoDB IO原理及实现:
             异步IO
• 读同步IO
 – 如果page不在buffer pool中,则从存储层读入
 – 当buffer-pool满时,从LRU_LIST尾剔
 – 特殊的读,如read-ahead,则是异步
• 写异步IO
 – 在buffer pool中修改完成则返回
 – 由主线程定时从FLUSH_LIST刷到存储层
 – 特殊的写也可以是同步
InnoDB IO原理及实现:
     IO 工作流程
模拟AIO与AIO的区别:
          模拟AIO
• 模拟AIO的优化之处(写入)
 – 相邻的IO合并
 – 批量的写入
 – 大量的slot,sem_wait/full控制,sem触发刷脏
 – 可以更多的slot
• 模拟AIO的缺点
 – 大量复杂逻辑,触发条件多
 – Bug难排查,如DDL丢表问题
模拟AIO与AIO的区别:
       native AIO
• 易用,让系统去完成之前的绝大部分内容
• 稳定,更广泛的使用与考验
• 恢复更快,提速近1/3
IO性能与稳定之间的妥协:
    buffer pool中的脏页比例
• 脏页比越高,IO活动可能会减少,恢复越久
• 脏页30%到50%,为的是更快的恢复
Percona对IO的改进:
      可分离的doublewrite buffer
• doublewrite buffer
  – 位于存储层的系统表空间文件中
  – 为保证页写入的一致性
  – 如果开启doublewrite,则次先写doublewrite
    buffer,再写其它文件

  – 将其分离到另外的存储分区
Percona对IO的改进:
         可配的purge线程
• purge函数
 – 寄宿于主线程内,”垃圾回收器”
 – 当写入量大时,性能差,可能是瓶颈

 – 将其分离到独立的线程,并且线程数可配
Percona对IO的改进:
       多buffer pool实例
• 减少buffer pool操作的mutex粒度
• 太多则增加CPU开销
• 线上还没有配置,没有完备的测试验证
Percona对IO的改进:
         可配的页大小
• 系统为4K,为何InnoDB采用16K?
 – 5分钟原则
• 可配,4K/8K等,增加更的记录命中率
备库的IO优化:
              预热工具
• 备库的瓶颈
 – 主库的多线程,最终在备库上变成单线程
 – 备库有延时
• 解决策略
 – Transfer/DRC/relay-fetch
• relay-fetch的实现原理
• relay-fetch开源化

More Related Content

PPTX
浅谈数据库优化
PDF
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
PPTX
对MySQL的一些改进想法和实现
PPT
百度分布式数据库 刘斌 Sacc2010
PPT
百度分布式数据库平台
PPTX
高性能队列Fqueue的设计和使用实践
PPTX
Mysql调优
PDF
吴岷 视频Cdn分发、调度与服务的探讨
浅谈数据库优化
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
对MySQL的一些改进想法和实现
百度分布式数据库 刘斌 Sacc2010
百度分布式数据库平台
高性能队列Fqueue的设计和使用实践
Mysql调优
吴岷 视频Cdn分发、调度与服务的探讨

What's hot (7)

PDF
Level db
PPT
性能优化
PPT
Php study.20130110
ODP
Fdfs for cnblogs 1th
PPT
OceanBase-破解数据库高可用难题
PDF
MySQL Tuning For CPU Bottleneck
PPT
MySQL调优
Level db
性能优化
Php study.20130110
Fdfs for cnblogs 1th
OceanBase-破解数据库高可用难题
MySQL Tuning For CPU Bottleneck
MySQL调优
Ad

Viewers also liked (7)

PDF
阿里集团MySQL并行复制特性
PDF
S1: InnoDB AIO原理及相关bug分析
PDF
阿里集团MySQL特性(5.5介绍)
PDF
InnoDB并发控制在密集型并发更新下的问题
PDF
DBA学院课程之:MySQL故障诊断案例
PPTX
5.6 nutshell - 性能优化
PDF
MariaDB 10 Tutorial - 13.11.11 - Percona Live London
阿里集团MySQL并行复制特性
S1: InnoDB AIO原理及相关bug分析
阿里集团MySQL特性(5.5介绍)
InnoDB并发控制在密集型并发更新下的问题
DBA学院课程之:MySQL故障诊断案例
5.6 nutshell - 性能优化
MariaDB 10 Tutorial - 13.11.11 - Percona Live London
Ad

Similar to InnoDB IO优化 (20)

PDF
MySQL优化、新特性和新架构 彭立勋
PPTX
Sth About SSD
PPTX
My sql 5.6新特性深入剖析——innodb引擎
PDF
Mysql体系结构及原理(innodb)公开版
PPT
MySQL新技术探索与实践
PPT
数据库性能模型与容量规划
PDF
My sql 5.5 innodb xtradb 性能诊断与优化
PPTX
MySQL和IO(下)
PPSX
MySQL应用优化实践
PPSX
浅谈 My sql 性能调优
PPT
数据库与ssd的实践与探索-2011数据库技术大会
PDF
对MySQL应用的一些总结
PDF
MySQL InnoDB 源码实现分析(一)
PPT
Alibaba数据库运维最佳实践
PPT
淘宝商品库MySQL优化实践
PDF
Taobao casestudy-yufeng-qcon
PDF
浅谈 MySQL 性能调优
PPT
Optimzing mysql
PPT
OTN软硬件结合数据库解决方案
PDF
MySQL运维那些事
MySQL优化、新特性和新架构 彭立勋
Sth About SSD
My sql 5.6新特性深入剖析——innodb引擎
Mysql体系结构及原理(innodb)公开版
MySQL新技术探索与实践
数据库性能模型与容量规划
My sql 5.5 innodb xtradb 性能诊断与优化
MySQL和IO(下)
MySQL应用优化实践
浅谈 My sql 性能调优
数据库与ssd的实践与探索-2011数据库技术大会
对MySQL应用的一些总结
MySQL InnoDB 源码实现分析(一)
Alibaba数据库运维最佳实践
淘宝商品库MySQL优化实践
Taobao casestudy-yufeng-qcon
浅谈 MySQL 性能调优
Optimzing mysql
OTN软硬件结合数据库解决方案
MySQL运维那些事

InnoDB IO优化

  • 1. InnoDB IO优化 淘宝希羽
  • 2. 议程 • 高性能存储引发的参数调整 • InnoDB IO原理及实现 • 模拟AIO与AIO的区别 • IO性能与稳定之间的妥协 • Percona对IO的改进 • 备库的IO优化
  • 3. 高性能存储引发的参数调整: 文件存储相关参数 • 日志文件 – 由group内的几个日志文件rotate – 每个文件大小默认设置过小,影响性能 – 顺序读写,建议存储于普通硬盘上 • 系统表空间文件 – 建议存入于普通硬盘上 • 数据文件 – 每个InnoDB表对应一个数据文件 – 固定大小的自增长 – 随机读写,存储于高性能存储介质 – O_DIRECT,无需OS的pagecache干预
  • 4. 高性能存储引发的参数调整: 读写线程相关参数 • 读写线程 – 默认设置过小,不能发挥硬件性能 – 建议读写16,太大作用不明显 • IO吞吐能力 – 默认过小,影响刷脏能力 – 建议2000,过大无优势
  • 5. 高性能存储引发的参数调整: 内核IO调度策略参数 • 四种调度策略 – noop/deadline/AS/CFQ • 建议选择noop/deadline中之一
  • 6. InnoDB IO原理及实现: 异步IO • 读同步IO – 如果page不在buffer pool中,则从存储层读入 – 当buffer-pool满时,从LRU_LIST尾剔 – 特殊的读,如read-ahead,则是异步 • 写异步IO – 在buffer pool中修改完成则返回 – 由主线程定时从FLUSH_LIST刷到存储层 – 特殊的写也可以是同步
  • 7. InnoDB IO原理及实现: IO 工作流程
  • 8. 模拟AIO与AIO的区别: 模拟AIO • 模拟AIO的优化之处(写入) – 相邻的IO合并 – 批量的写入 – 大量的slot,sem_wait/full控制,sem触发刷脏 – 可以更多的slot • 模拟AIO的缺点 – 大量复杂逻辑,触发条件多 – Bug难排查,如DDL丢表问题
  • 9. 模拟AIO与AIO的区别: native AIO • 易用,让系统去完成之前的绝大部分内容 • 稳定,更广泛的使用与考验 • 恢复更快,提速近1/3
  • 10. IO性能与稳定之间的妥协: buffer pool中的脏页比例 • 脏页比越高,IO活动可能会减少,恢复越久 • 脏页30%到50%,为的是更快的恢复
  • 11. Percona对IO的改进: 可分离的doublewrite buffer • doublewrite buffer – 位于存储层的系统表空间文件中 – 为保证页写入的一致性 – 如果开启doublewrite,则次先写doublewrite buffer,再写其它文件 – 将其分离到另外的存储分区
  • 12. Percona对IO的改进: 可配的purge线程 • purge函数 – 寄宿于主线程内,”垃圾回收器” – 当写入量大时,性能差,可能是瓶颈 – 将其分离到独立的线程,并且线程数可配
  • 13. Percona对IO的改进: 多buffer pool实例 • 减少buffer pool操作的mutex粒度 • 太多则增加CPU开销 • 线上还没有配置,没有完备的测试验证
  • 14. Percona对IO的改进: 可配的页大小 • 系统为4K,为何InnoDB采用16K? – 5分钟原则 • 可配,4K/8K等,增加更的记录命中率
  • 15. 备库的IO优化: 预热工具 • 备库的瓶颈 – 主库的多线程,最终在备库上变成单线程 – 备库有延时 • 解决策略 – Transfer/DRC/relay-fetch • relay-fetch的实现原理 • relay-fetch开源化