本文介绍当操作大表或遇到执行时间较长的DDL语句时,如何在列存索引(IMCI)和InnoDB两种场景下查看DDL语句的执行速度和构建进度。
列存索引(IMCI)场景
您可以在对应的表中查看您需要的信息:
在
INFORMATION_SCHEMA.IMCI_INDEXES
表中查看索引的状态信息;在
INFORMATION_SCHEMA.IMCI_INDEX_STATS
表中查看索引的写入速度;在
INFORMATION_SCHEMA.IMCI_ASYNC_DDL_STATS
表中查看列存索引从行存恢复数据或者通过异步DDL构建列存索引数据的过程,主要用于查看构建中的执行速度和任务进度。已完成数据构建的任务会在完成构建后的5~10分钟后被清理掉,如果需要查看完整的索引状态信息,您可以在INFORMATION_SCHEMA.IMCI_INDEXES
表中查看。PolarDB MySQL版企业版的集群版本为8.0.1.1.34及以下或8.0.2.2.15及以下时,
INFORMATION_SCHEMA.IMCI_ASYNC_DDL_STATS
表结构如下:CREATE TABLE: CREATE TEMPORARY TABLE `IMCI_ASYNC_DDL_STATS` ( `SCHEMA_NAME` varchar(193) NOT NULL DEFAULT '', -- 库名 `TABLE_NAME` varchar(193) NOT NULL DEFAULT '', -- 表名 `CREATED_AT` varchar(64) NOT NULL DEFAULT '', -- 任务创建时间戳 `STARTED_AT` varchar(64) NOT NULL DEFAULT '', -- 任务开始执行时间戳 `FINISHED_AT` varchar(64) NOT NULL DEFAULT '', -- 任务开始结束时间戳 `STATUS` varchar(128) NOT NULL DEFAULT '', -- 状态 `APPROXIMATE_ROWS` bigint(8) NOT NULL DEFAULT '0', -- 预估基线数据行数 `SCANNED_ROWS` bigint(8) NOT NULL DEFAULT '0', -- 已扫描行数,实际行数可大于预估行数 `AVG_SPEED` int(4) NOT NULL DEFAULT '0', -- 任务开始后的平均速度,单位行每秒 `SPEED_LAST_SECOND` int(4) NOT NULL DEFAULT '0', -- 前一秒速度,单位行每秒 `ESTIMATE_SECOND` bigint(8) NOT NULL DEFAULT '0' -- 预计剩余时间,单位秒 ) ENGINE=MEMORY DEFAULT CHARSET=utf8
PolarDB MySQL版企业版的集群版本为8.0.1.1.35及以上或8.0.2.2.16及以上时,
INFORMATION_SCHEMA.IMCI_ASYNC_DDL_STATS
表结构如下:Create Table: CREATE TEMPORARY TABLE `IMCI_ASYNC_DDL_STATS` ( `SCHEMA_NAME` varchar(193) NOT NULL DEFAULT '', -- 库名 `TABLE_NAME` varchar(193) NOT NULL DEFAULT '', -- 表名 `CREATED_AT` varchar(64) NOT NULL DEFAULT '', -- 任务创建时间戳 `STARTED_AT` varchar(64) NOT NULL DEFAULT '', -- 任务开始执行时间戳 `FINISHED_AT` varchar(64) NOT NULL DEFAULT '', -- 任务开始结束时间戳 `STATUS` varchar(128) NOT NULL DEFAULT '', -- 状态 `APPROXIMATE_ROWS` bigint(8) NOT NULL DEFAULT '0', -- 预估基线数据行数 `SCANNED_ROWS` varchar(128) NOT NULL DEFAULT '', -- 已扫描行数及百分比,实际行数可大于预估行数 `SCAN_SECOND` bigint(8) NOT NULL DEFAULT '0', -- 扫描已执行秒数 `SORT_ROUNDS` bigint(8) NOT NULL DEFAULT '0', -- 排序轮次,仅适用于带排序键场景 `SORT_SECOND` bigint(8) NOT NULL DEFAULT '0', -- 排序已执行秒数,仅适用于带排序键场景 `BUILD_ROWS` varchar(128) NOT NULL DEFAULT '', -- 排序结束写入行数及百分比,仅适用于带排序键场景 `BUILD_SECOND` bigint(8) NOT NULL DEFAULT '0', -- 排序结束写入执行秒数,仅适用于带排序键场景 `AVG_SPEED` int(4) NOT NULL DEFAULT '0', -- 任务开始后的平均速度,单位行每秒 `SPEED_LAST_SECOND` int(4) NOT NULL DEFAULT '0', -- 前一秒速度,单位行每秒,适用于扫描阶段和排序写入阶段 `ESTIMATE_SECOND` bigint(8) NOT NULL DEFAULT '0' -- 预计剩余时间,单位秒,适用于扫描阶段和排序写入阶段 ) ENGINE=MEMORY DEFAULT CHARSET=utf8
其中,前一秒速度
SPEED_LAST_SECOND
容易受到系统资源以及任务并发程度影响,可能存在一定的波动。预计剩余时间ESTIMATE_SECOND
根据剩余行数除以前一秒速度后评估而来,可能存在一定的波动。如果触发写入限速,那么前一秒的速度的值可能会为0,从而出现ESTIMATE_SECOND
取值为9223372036854775807的情况。
InnoDB场景
使用Online DDL添加列存索引或构建索引的过程中,AP节点的主要任务是回放Redo日志并将数据写入列存索引,主要受限于日志回放速度和主节点DDL执行速度,日志回放速度可以参考控制台的性能监控信息,主节点DDL的执行速度参考InnoDB DDL监控信息。
InnoDB DDL监控信息依赖于Performance Schema模块,您可以在events_stages_current
表中查询正在执行的DDL语句, 在events_stages_history
表中查询已执行结束的DDL语句,主要的监控指标为WORK_COMPLETED
和WORK_ESTIMATED
,单位为Page。详情可参考MySQL官网。