5.6 nutshell  - 性能优化
Upcoming SlideShare
Loading in...5
×
 

5.6 nutshell - 性能优化

on

  • 388 views

 

Statistics

Views

Total Views
388
Views on SlideShare
378
Embed Views
10

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 10

http://hickey.in 10

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    5.6 nutshell  - 性能优化 5.6 nutshell - 性能优化 Presentation Transcript

    • 5.6 nutshell -- 性能优化 2014-04-15
    • 5.6的改进之处 可扩展性(性能) 优化器&执行 复制 可操作性 面向开发者的新功能 安全
    • 只读事务优化 • 问题:RO-TRX为rw-trx,ReadView构造开销 • 解决:1) 移植对Bug49169的修复 2)移除ro- trx-list 3)移植线程池(后面再提) • 效果: TC RO-TRX模型测试,比AliSQL-t1提高 36%,比AliSQL-5.5提高45%, 8.7WQPS/6msRT • 后续:1. RO移除RV 2)研究官方的100W QPS
    • 数据文件并发扩展优化 • 现象:一个ibd扩展空间,导致全局锁 • 本质:fio_io过程持有 fil_system->mutex (仅 扩展过程,正常读写不需要) • 解决:1)一把小锁来替代大锁 (AliSQL-5.5) 2) 对node新增标志位being_extended标记 (5.6)
    • 死锁检测算法优化 • 触发:加锁不成功需要等待时判断 • 本质:检测循环依赖 • 优化:典型的push-pop深度遍历
    • 死锁检测算法优化
    • 更快的锁原语 • 问题:flush pipeline • 解决:在spin-wait-delay中增加PAUSE,在在 退出spin时,给CPU一个hint, 避免引起内存 序列冲突,导致CPU不必要的预测(优化)
    • InnoDB并发控制的优化 • 5.5的FIFO— condwait/signal • 5.6的smart adaptive – sleep/retry • 矛盾: condwait/signal线程的上下文切换开 销 VS. sleep-retry的效率问题 • 求和:线程池 • 效果:不担心RT和大并发 (RO-TRX)
    • 多个独立的purge后台线程 • 目的:1) MVCC 2)DELETE • 改进: srv_master_thread中独立出来,并 且提供batch功能,限制一次最大purge数量 的间隔时间等 • 缺陷:稳定性
    • "Kernel Mutex"的拆分 • “巴黎会议”—G5 • Lock_sys->mutex • Trx_sys->mutex
    • 数据词典缓存 • 问题: 10W级别的表 • 解决:缓存,多了就踢
    • 改进自适应刷脏算法 • 问题:如何判断一次刷多少脏页? • 改进:待优化
    • CRC32 checksum算法 • 与fast-checksum兼容问题 • 效率:目前看最快
    • 全局锁LOCK_open的拆分 • 表的metadata(MySQL Server层)增加一系 列mutex • LOCK_open只保护新表的创建和表metadata 的变更 – metadata_locks_hash_instances – metadata_locks_cache_size
    • 支持多个 table_open_cache_instances实例 • 性能大概能有~10%的提升 Dim的blog, 线上环境 5.5中统配为table_open_cache为2000个,instance 推荐16(table_open_cache_instances)
    • ICP (Index Condition Pushdown) • 利用索引捞数据时,将可过滤的where条件 传递到SE层,减少回表的次数 • 典型的场景: select * from db.table where and idx_c1>? and idx_c2<? and non-idx_c3=? • 其执行的逻辑解释
    • MRR (Multi-Range-Read) • 顺序读非聚簇索引中结点, 将符合条件的PK 全部捞出来并排序,然后再到聚簇索引中 一次性把记录捞出来处理。 • 典型场景:SELECT * FROM t WHERE key_part1 >= 1000 AND key_part1 < 2000 AND key_part2 = 10000; • 其执行的逻辑解释
    • MRR
    • BKA(Batched Key Access)
    • 更快的ORDER BY ... LIMIT ... • 基本原理:filesort • 优化点:如果足够小,select部分全部放在 sort buffer中
    • 总结 • 5.6还不错,有优化空间,有期待! • 后期讨论:移步ATA