Abstract
AliSQL 在线程级别增加了 CPU time 的性能指标,可以用来度量某个SQL或者执行单元所耗费的CPU 时间片,用于性能诊断。
当 Binlog 为 Row 模式的情况下,备库在同步更新时,索引的选择是基于简单规则的,没有走优化器的代价模型,所以有可能会因为索引选择不当导致主备有较大的延迟。AliSQL 针对有自增列的索引,优化备库索引选择规则。
在 AliSQL 20170716 版本 中发布了 Invisible Indexes 功能,但是在备库中 Invisible Indexes 却会被备库的 SQL 线程使用,这次发布修复了这个 BUG。
AliSQL REPO: https://github.com/alibaba/AliSQL
AliSQL Release Notes: https://github.com/alibaba/AliSQL/wiki/Changes-in-AliSQL-5.6.32-(2018-01-24))
1. 获取 CPU time
概要
支持使用 SQL 语句来获取当前线程的 CPU time,用来协助诊断 SQL 的性能问题,支持两种获取方式:
SHOW STATUS LIKE 'cpu_time';
SHOW FULL PROCESSLIST;
在 SHOW FULL PROCESSLIST
` 中增加一列 cpu_time。
2. 当备库应用 Binlog 时优先选择有自增属性的列
概要
在 ROW 格式下,备库在同步更新时,索引的选择规则如下:
- PK
- UK(不含 NULL 值)
- 一般索引或者 UK (包含 NULL 值)
- 全表扫描
从1到4,优先级依次递减,在选择时,只要有索引满足规则,就选择这个索引,并不再往下找了。实际上在第三个规则中应该优先选择带有自增属性的列作为索引,修改之后的优先级如下:
- PK
- UK(不含 NULL 值)
- 带有自增属性的索引
- 一般索引或者 UK (包含 NULL 值)
- 全表扫描
3. 备库仍然可以使用 Invisible index
概要
Invisible Index 的属性表示了在 SQL 语句执行过程中,这个索引将不会被优化器采用,但在备库 Row 模式复制的情况下, Invisible Index 仍然可能会被采用,用于 Row Event Apply。 这个 Bug 已经提交给了官方 bug#88847, 在 AliSQL 中首先修复掉了,具体分析过程可以参考201801 期月报