深度解析 AliSQL 8.0 特性和改进

深度解析 AliSQL 8.0 特性和改进
 Performance Insight & Diagnose
 New Feature
 Stability Improvement

展开查看详情

1. 冷香 阿里云智能高级技术专家

2.深度解析 AliSQL 8.0 特性和改进 赵建伟 高级技术专家 云智能-OLTP产品部-AliSQL 内核小组

3.Agenda  Performance Insight & Diagnose  New Feature  Stability Improvement

4.Agenda  Performance Insight & Diagnose  New Feature  Stability Improvement

5.Performance Insight 研发视角 DBA和开发视角 Transactio Performance Schema Object Statement n Binlog CPU / Elapsed Read Write Time Size Index MDL / Trans Lock Count Lock Usage Elapsed IO Stats Time Concurrency

6.Performance Insight  Object Statistics • Table statistics 是业务系统 scale 的数据支撑 • Index statistics 是业务系统优化 index 的数据支撑

7.Performance Insight  Statement Statistics CPU LOCK Concurrency IO • ELAPSED_TIME • SERVER_LOCK_TIME • MUTEX_SPINS • DATA_READS • CPU_TIME • TRANSACTION_LOCK_TIME • MUTEX_WAITS • DATA_WRITES • RWLOCK_SPIN_WAITS • LOGICAL_READS • RWLOCK_SPIN_ROUNDS • PHYSICAL_READS • PHYSICAL_ASYNC_READS

8.Performance Insight  Statement Statistics CPU Intensive MDL Block Trans Block

9.Performance Insight  Statement Statistics IO Concurrency Intensive

10.Performance Diagnose  云产品深度依赖,可诊断性至关重 要 InnoDB IO 表现 Slot: 10000 Interval: 2S Durable: 5H

11.Agenda  Performance Insight & Diagnose  New Feature  Stability Improvement

12.Sequence Engine Sequence Syntax: CREATE SEQUENCE [IF NOT EXISTS] schema.seq Sequence 访问 [START WITH <constant>] [MINVALUE <constant>] [MAXVALUE <constant>] 语法解析 Cache管理 自治事务 [INCREMENT BY <constant>] [CACHE <constant> | NOCACHE] Handler Interface [CYCLE | NOCYCLE] ; SELECT NEXTVAL(seq); InnoDB SELECT CURRVAL(seq);

13.Customized ReadView  自定义 ReadView(Cross-session consistent)  Syntax EXPORT CONSISTENT SNAPSHOT LOCAL RELEASE CONSISTENT SNAPSHOT '$snap_id’ START TRANSACTION WITH CONSISTENT SNAPSHOT '$snap_id' Session 1 Session 2  Proxy 将可以跨 session 做并行计算 Clone ReadView ReadView

14.Global ReadView (PolarDB)  全局 ReadView(Cross-Node consistent)  Syntax Client Client Client EXPORT CONSISTENT SNAPSHOT CLUSTER RELEASE CONSISTENT SNAPSHOT '$snap_id’ Create RV1 /*RV1*/ Query /*RV1*/Query START TRANSACTION WITH CONSISTENT SNAPSHOT '$snap_id' Master Replica Replica RV1 RV1  Proxy 将可以跨节点做并行计算 Redo log Data File Data File Data File file

15.Agenda  Performance Insight & Diagnose  New Feature  Stability Improvement

16.Statement Concurrency control 1. CCL 规则设计  SQL command 根据 statement 的类型,例如 ‘SELECT', 'UPDATE', 'INSERT', 'DELETE';  Object 根据 statement 操作的对象进行控制, 例如 TABLE,VIEW;  keywords 根据 statement 语句的关键字进行控制; 2. CCL 接口设计 DBMS_CCL.add_ccl_rule(); DBMS_CCL.del_ccl_rule(); DBMS_CCL.show_ccl_rule(); DBMS_CCL.flush_ccl_rule();

17.Statement Outline 1. Outline 规则设计  Optimizer Hint 根据作用域(query block)和 hint 对象, 分为:Global level hint,Table/Index level hint, Join order hint等等  Index Hint 主要根据 index hint 的类型 (USE, FORCE, IGNORE)和 scope (FOR JOIN, FOR ORDER BY, FOR GROUP BY)进行分类 2. Outline 接口设计  DBMS_OUTLN.add_index_outline(); 增加 index hint  DBMS_OUTLN.add_optimizer_outline(); 增加 optimizer hint  DBMS_OUTLN.preview_outline(); 预览某一个 SQL 语句命中 outline 的情况  DBMS_OUTLN.show_outline(); 展示内存中可用的所有 outline 及命中情况  DBMS_OUTLN.del_outline(); 删除内存和持久化表中的 outline  DBMS_OUTLN.flush_outline(); 刷新所有的 outline,从 mysql.outline 表中重新 load

18.Async Purge InnoDB Data File  Big Table drop 的成本  单机文件系统 EXT4 • Page Cache 回收 • Meta 信息 flush • Journal 日志写入

19.Async Purge InnoDB Data File  DDL Atomic 数据库和文件系统一致性保证(日志补偿机制) CREATE TABLE DROP TABLE 1.开启事务 1.开启事务 2.修改DD 2.修改DD 3.开启事务 3.插入DDL log 4.插入DDL log 4.提交事务 5.提交事务 5.开启事务 6.删除DDL log 6.Replay DDL log 删除表空间和文件 7.创建表空间和文件 7.删除 DDL log 8.提交 DD 事务 8.提交事务 如果 DD 事务失败,Do nothing; 如果DD 事务失败或者crash, 如果 crash,启动 DDL log recovery 清理文 Replay DDL log 清理文件

20.Async Purge InnoDB Data File DROP TABLE 1.开启事务 2.修改DD 3.插入DDL log InnoDB File Purge Thread 4.提交事务 5.Replay DDL log 1. 从队列中取一个文件 6. 开启事务 2. ftruncate 文件 7. 插入 Purge DDL log 3. 如果文件 < threshold: unlink文件;删除 Purge log 8. 提交事务 如果文件 > threshold: 9. Rename Data File 回到步骤1; 10. 插入队列 11.删除 DDL log 12.提交事务 如果 crash,DDL log recovery 保证atomic

21.Multi-Queue Thread Pool Thread Scheduling Multi-Queue Thread one-thread-per-connection Priority Thread Pool Pool  CPU 时间片公平调度  线程切换开销稳定  线程切换开销稳定  线程切换开销线性增长  业务识别,事务优先  针对不同的SQL,识别事  无业务识别能力  无 SQL 复杂度判断 务,复制查询,短平快 SQL 等建立多队列,提升稳定和 吞吐 TP :在大规模连接和复杂混合 SQL 模型下,保持MySQL 持续稳定吞吐能力

22.Implicit Primary Key  增加一个 implicit column 和 key  Slave SQL apply 索引选择优先 implicit key 背景:  分区表 Constraint 需要带分区键,所以 PK->Key  大量的 NULL 导致 UK 并不是 SQL apply 的优先选择

23.Transaction management Transaction Isolation comparison MySQL Oracle MySQL 各种阻塞频发 READ UNCOMMITTED READ COMMITTED VS READ COMMITTED(Default) REPEATABLE READ(Default) SERIALIZABLE SERIALIZABLE  Non-transaction First Query RR 级别以下的第一条 select 语句不启动事务  Kill idle transaction 事务空闲超时:Set kill_idle_transaction_timeout=xxx

24. 扫码加入社群 与志同道合的码友一起 粘贴二维码 Code Up 阿里云开发者社区 阿里云数据库微信公众号

25.谢谢!