AliSQL 20180124 版本发布 支持 CPU TIME 和优化 BINLOG 应用时索引选择-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

AliSQL 20180124 版本发布 支持 CPU TIME 和优化 BINLOG 应用时索引选择

简介: AliSQL 在线程级别增加了 CPU time 的性能指标,可以用来度量某个SQL或者执行单元所耗费的CPU 时间片,便于性能诊断。 当 Binlog 为 Row 模式的情况下,备库在同步更新时,索引的选择是基于简单规则的,没有走优化器的代价模型,所以有可能会因为索引选择不当导致主备有较大的延迟。

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 格式下,备库在同步更新时,索引的选择规则如下:

  1. PK
  2. UK(不含 NULL 值)
  3. 一般索引或者 UK (包含 NULL 值)
  4. 全表扫描

从1到4,优先级依次递减,在选择时,只要有索引满足规则,就选择这个索引,并不再往下找了。实际上在第三个规则中应该优先选择带有自增属性的列作为索引,修改之后的优先级如下:

  1. PK
  2. UK(不含 NULL 值)
  3. 带有自增属性的索引
  4. 一般索引或者 UK (包含 NULL 值)
  5. 全表扫描

3. 备库仍然可以使用 Invisible index

概要

Invisible Index 的属性表示了在 SQL 语句执行过程中,这个索引将不会被优化器采用,但在备库 Row 模式复制的情况下, Invisible Index 仍然可能会被采用,用于 Row Event Apply。 这个 Bug 已经提交给了官方 bug#88847, 在 AliSQL 中首先修复掉了,具体分析过程可以参考201801 期月报

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: