SlideShare a Scribd company logo
1 of 15
Download to read offline
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

What's hot

性能优化
性能优化性能优化
性能优化Lu Wei
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110bngoogle
 
Fdfs for cnblogs 1th
Fdfs for cnblogs 1thFdfs for cnblogs 1th
Fdfs for cnblogs 1thkevin zhang
 
OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题everestsun
 
MySQL Tuning For CPU Bottleneck
MySQL Tuning For CPU BottleneckMySQL Tuning For CPU Bottleneck
MySQL Tuning For CPU BottleneckSky Jian
 

What's hot (7)

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

Viewers also liked

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

Viewers also liked (7)

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

Similar to InnoDB IO优化

Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oraclefrogd
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期frogd
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事Chieh (Jack) Yu
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
数据库性能模型与容量规划
数据库性能模型与容量规划数据库性能模型与容量规划
数据库性能模型与容量规划freezr
 
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)frogd
 
Web并发模型粗浅探讨v3
Web并发模型粗浅探讨v3Web并发模型粗浅探讨v3
Web并发模型粗浅探讨v3乐费 胡
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)Feng Yu
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎frogd
 
Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版longxibendi
 
OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案freezr
 
MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋Lixun Peng
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 

Similar to InnoDB IO优化 (20)

Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracle
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
数据库性能模型与容量规划
数据库性能模型与容量规划数据库性能模型与容量规划
数据库性能模型与容量规划
 
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
 
Dfs ning
Dfs ningDfs ning
Dfs ning
 
Web并发模型粗浅探讨v3
Web并发模型粗浅探讨v3Web并发模型粗浅探讨v3
Web并发模型粗浅探讨v3
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
 
Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版Mysql体系结构及原理(innodb)公开版
Mysql体系结构及原理(innodb)公开版
 
OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案
 
MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discuss
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
MongoDB SHARE
MongoDB SHAREMongoDB SHARE
MongoDB SHARE
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 

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开源化