本文介紹當操作大表或遇到執行時間較長的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官網。