AliSQL 5.6 及其应用 阿里巴巴江疑
个人简介 花名 : 江疑 真名 : 章颖强 微博 : 小强 -zju AliSQL 内核主要维护者
AliSQL 的历史 摘要 AliSQL 5.6 的性能 & 功能 性能对比
AliSQL 的里程碑 2011 2012 2014 AliSQL 5.1 发布 AliSQL 5.5 发布 AliSQL 5.6 发布 并行复制热 点补丁 线程池 SQL hint 定向流 控
AliSQL 5.6 的功能 / 性能优化 累计修复 BUG 17 个 大部分回馈给了社区 BugFix 添加了共计 25 个新功能 功能优化 针对业务作出 了 19 处性能优化 性能优化
AliSQL 5.6 的性能优化点 线程池
MySQL 里面也是这样加塞的! AliSQL 5.6 之线程池
MySQL 也需要入口匝道控制 AliSQL 5.6 之线程池 入口匝道控制系统
AliSQL 5.6 之线程池 Thread Pool One Thread per Connection
AliSQL 5.6 之线程池 Thread Pool Memcache/Libevent
Architecture of Thread Pool AliSQL 5.6 之线程池 thread id 0 4 1 5 2 6 3 7 admin 用户连接 Listen & Dispatch MySQL Port Group 1 Group 2 Group 3 Extra Port 线程池 Timer Thread SQL Parser/Optimizer/Executer InnoDB Engine SQL 执行器
线程池遇到的问题及优化 AliSQL 5.6 之线程池 1 增加线程池内部信息输出 2 对 Dump thread 做特权处理 Binlog Dump thread 等长耗时命令阻塞部分 group 1 以单独线程服务 admin 用户 数据库过载时的策略 1 在高优先级队列判定中增加 MDL 显式锁的判定 高优先级队列和显式锁的冲突
线程池的性能对比 AliSQL 5.6 之线程池 60000 Read Only 50000 40000 30000 20000 10000 0 16 64 128 256 512 1024 2048 4096 8192 16100 AliSQL Without Thread Pool AliSQL With Thread Pool
线程池的性能对比 AliSQL 5.6 之线程池 60000 Read Write 50000 40000 30000 20000 10000 0 16 64 128 256 512 1024 2048 4096 8192 16000 AliSQL Without Thread Pool AliSQL With Thread Pool
AliSQL 5.6 的性能优化点 线程池 热点更新优化
双十一中的热点抢购 AliSQL 5.6 之热点抢购
Example: 1 begin; 2 update hot row; 3 update normal row; 4 select hot row; 5 commit; AliSQL 5.6 之热点抢购 消除浪费 T 1 T 4 T 3 InnoDB Concurrency InnoDB Row Locks T 2 hot rows 持有热点行锁, 但是不能进入 InnoDB 可以先进入 InnoDB, 但是得不到热点行锁, 空耗资源... normal rows normal rows normal rows
Example: 1 begin; 2 update hot row; 3 update normal row; 4 select hot row; 5 commit; InnoDB Strict Concurrency InnoDB Concurrency AliSQL 5.6 之热点抢购 InnoDB Row Locks T 4 T 3 T 2 T 1 hot rows 进入 InnoDB 的 session 过多时, 进行等待 让持有热点锁的事务无需等待, 即可以进入 InnoDB 执行下一步操作... normal rows normal rows normal rows
进一步优化 Example: 1 begin; 2 update hot row; 3 update normal row; 4 select hot row; 5 commit; 第一步 Example: 1 begin; 2 update normal row; 3 update hot row; 4 select hot row; 5 commit; 第二步 AliSQL 5.6 之热点抢购 强大的 SQL Hint 和语法 Example: 1 begin; 2 update normal row; 3 select from update commit_on_success rollback_on_fail hot row; 第三步 Example: 1 begin; 2 update normal row; 3 select from update hot row; 4 commit;
AliSQL 5.6 之热点抢购 只要大家按序购买, 再热的商品也不怕
AliSQL 5.6 的性能优化点 Online DDl 性能优化 线程池 热点更新优化 事务插入优化 事务提交过程优化 表级并行复制 日志系统大锁拆分 Semi-Sync 优化 事务合并 BINLOG 限流 只读事务链表移除 视图优化
定向流量控制 AliSQL 5.6 的功能点
AliSQL 5.6 之定向流控 业务发布功能 接口超量调用 用户行为热点 导致部分功能 过热 恶意攻击 DoS/DDoS DataBase 面对数据库流量过载 DBA 就 duang 了
数据库过载的现有方案 AliSQL 5.6 之定向流控 写 kill session 脚本 pt-kill DROP USER READ ONLY
定向流量控制系统 AliSQL 5.6 之定向流控 设置控制 SQL 类型 设置 SQL 匹配规则 设置控制 并发度 所有异常流量, 全部过滤干净!
定向流量控制系统 AliSQL 5.6 之定向流控 SQL Filter System is_match & get_ticket return_ticket Net I/O Parse Optimize Execute Storage/InnoDB
Flow Control in AliSQL AliSQL 5.6 之定向流控 High Watermark SQL Filter InnoDB Strict Concurrency Thread Pool Low Watermark Queue on PK Net I/O Parse Optimize Execute Storage/InnoDB
AliSQL 5.6 的功能点 主备不一致自动修复
Last_Errno: 1032 Last_Error: Worker 7 failed executing transaction '' at master log mysql-bin.000422, end_log_pos 1225; Could not execute Update_rows_v1 event on table rpl.tt; Can't find record in 'tt', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000422, end_log_pos 1225 Last_Errno: 1062 Last_Error: Worker 7 failed executing transaction '' at master log mysql-bin.000422, end_log_pos 1398; Could not execute Write_rows_v1 event on table rpl.tt; Duplicate entry '6' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000422, end_log_pos 1398 AliSQL 5.6 之主备修复 DBA 已吐血
大量复制报错的现有方案 AliSQL 5.6 之主备修复 sql_slave_skip_counter slave_skip_errors slave_exec_mode=idempotent pt-slave-restart 重搭备库
set global slave_exec_mode=smart AliSQL 5.6 之主备修复 错误类型事件类型策略其他 HA_ERR_KEY_N OT_FOUND/HA_ ERR_END_OF_FI LE UPDATE_ROWS_EVE NT DELETE_ROWS_EVE NT 1 写入记录前镜像 2 执行 update event 1 写入记录前镜像 2 执行 delete event 写入记录前镜像有可能导致 UK 冲突, 此时删除所有冲突记录 同上 WRITE_ROWS_EVEN T NA HA_ERR_FOU ND_DUPP_KEY UPDATE_ROWS_EVE NT 1 删除 UK 冲突的记录 2 执行 update event DELETE_ROWS_EVE NT NA WRITE_ROWS_EVEN T 1 采用 overwrite 机制这里和 IDEMPOTENT 类似
AliSQL 5.6 之定向流控
AliSQL 5.6 的功能点 定向流量控制 高低水位限流 在线执行计划优化 Select from update SQL 纬度锁超时设置 多功能 SQL Hint 快速获取 META DATA 主备不一致自动修复 列压缩 死锁信息丰富 微博 : 小强 -zju
大压力高并发下对比 版本 AliSQL with TP AliSQL without TP MySQL 5.6.24 without TP 场景 L1 L2 L3 L4 L1 L2 L3 L4 L1 L2 L3 L4 QPS 33.0K 34.4K 44.3K 56.6K 34.0K 34.3K 46.7K 27.3K 16.1K 7.8K NA NA TPS 11.0K 11.5K 14.8K 18.8K 11.4K 11.4K 15.4K 9.7K 5K 3K NA NA RT 1.3 ms 1.4 ms 6.4 ms 38.8 ms 4.2 ms 4.6 ms 10.3 ms 128.2 ms 105.1 ms 435.2 ms NA NA CS 23W 23W 26W 33W 30W 31W 33W 36W 40W 47W NA NA
AliSQL 5.6 在阿里集团的应用 承载了集团内部 90% 以上的产品线 支撑了整个核心交易链路的 100% 流量 完美支持双十一 571 亿交易额
欢迎你的加入携手共创未来 总结,