More Related Content
Similar to MySQL优化、新特性和新架构 彭立勋
Similar to MySQL优化、新特性和新架构 彭立勋 (20)
MySQL优化、新特性和新架构 彭立勋
- 2. Topics
• 挖掘MySQL性能
• InnoDB Plugin新特性
• Percona带来的改进
• “动静结合”的分布式数据库架构
• Q & A
- 3. 挖掘MySQL性能
• 优化编译:ICC取代GCC
• 优化文件系统:XFS取代EXT3
• 优化存储:SSD取代SAS
• 优化接口:Handler Socket取代SQL
- 7. EXT3 vs XFS
64K顺序INSERT效率
350
295
300
250
210
200
EXT3
150
140
XFS
100
100
50
0
插入速度(Rows/s)
相对比例(%)
- 11. InnoDB Plugin新特性
• 新的文件格式
– 可选择的页大小(Page Size)
– 可压缩的Blob Page
• 开放IO参数
– innodb_io_capity
– read/write_io_thread
• 脏页刷新方式改进
– innodb_adaptive_checkpoint(XtraDB)
– innodb_adaptive_flushing(InnoDB
Plugin)
- 12. Adaptive Flushing
• 通过日志剩余空间除以日志产生速度算
出切换前可以使用的时间:time_remainning
= log_capacity / redo_gen_rate
• 必须在日志切换前完成所有脏页的刷新,
所以可以计算出刷新速度:flush_rate =
dirty_page_numbers / time_remaining =
dairty_page_numbers * redo_gen_rate / log_capacity
• 将刷新速度减掉LRU_List刷新速度就可
以得出Adaptive Flush必须的速度了:
adaptive_flush_rate = flush_rate – lru_flush_rate
= dairty_page_numbers * redo_gen_rate /
log_capacity – lru_flush_rate
- 13. Adaptive Checkpoint
• None:关闭自适应刷新
• Reflex:脏页少于1/2则不刷新,超过
1/2则使用Weak Flush,超过3/4则使用
Strong Flush,大于7/8将不断刷新。
• Estimate:脏页少于1/2则不刷新,超过
1/2则基于未刷新的脏页量、日志产生速
度、刷新页的Modified Age来计算刷新
速度,大于7/8将不断刷新。
• keep_average:刷新周期从1s提高到
0.1s
- 16. Percona带来的改进(1)
• 提升Buffer
Pool的扩展性
XtraDB将Buffer
Pool的全局Mutex拆成了多个Mutex以减少争用
• 提高InnoDB
IO扩展性
XtraDB增加了许多变量去调整IO到最佳状态,包括调整
checkpoint、后台读写数据文件线程数等等的参数
• 多个回滚段
为提供一直读,InnoDB将事务修改的数据写到回滚段。回
滚段被一个独立的Mutex保护,这直接导致了写密集型的工作并发
不高。在 XtraDB可以改变回滚段的数目(innodb_extra_rsegments)
,在写密集型操作中可以大幅度提高性能
• 可以更高的并发数
InnoDB在回滚段只提供了1024个回滚槽,如果回滚槽用完
,新的事务将不能开始,直到有回滚槽被释放,XtraDB提供2047个
事务槽
- 17. Percona带来的改进(2)
• 专用的Purge线程
如果有很多事务,Purge线程清理空间不够快,共享表空间
将急剧增长。这 将导致性能严重下降,甚至可能用完所有的磁盘
空间。XtraDB使用了专用的线程来清理undo
space,这对undo
space
的清理速度可以提升很多。尽管这可能使整体的性能降低,但是可
以大大提高稳定性,因而整体性能略微降低是值得的
• 可配置的Doublewrite缓冲
XtraDB提供了一个选项将doublewrite
buffer放在一个独立
的磁盘来提升并发性能
• 删除过多的函数调用
当MySQL从socket读数据时,将产生很多fcntl(针对描述符
提供控制的函数)调用,导致并发性能下降。Percona移出了多于 的调
用
• 减少了Buffer
Pool
Mutex竞争
在InnoDB内核操作时减少了Buffer
Pool之间的Mutex争用(拆分
Mutex变量)