联系我们
18591797788
hubin@rlctech.com
北京市海淀区中关村南大街乙12号院天作国际B座1708室
18681942657
lvyuan@rlctech.com
上海市浦东新区商城路660号乐凯大厦26c-1
18049488781
xieyi@rlctech.com
广州市越秀区东风东路华宫大厦808号1608房
029-81109312
service@rlctech.com
西安市高新区天谷七路996号西安国家数字出版基地C座501
在 OceanBase 早期版本的 Oracle 兼容模式中,对带有全局索引的 Interval 分区表执行 ALTER TABLE ... TRUNCATE/DROP PARTITION 操作时,存在以下问题:
而在OceanBase V4.4.2.1 版本针对该场景进行了优化,支持在 TRUNCATE/DROP PARTITION 操作中使用 UPDATE GLOBAL INDEXES 子句,实现异步维护全局索引,保证 DDL 秒级返回且索引全程可用。
应现场客户要求验证该新版本特性是否可靠,对于数据库性能是否有重大提升以及未来能否放心在业务高峰期间使用的问题准备了以下测试案例。
| 会话 | 操作 |
|---|---|
| 会话① | 执行 qps.sh 压测脚本,持续输出每秒瞬时 QPS |
| 会话② | 执行预先准备的存储过程,每秒记录索引状态 |
| 会话③ | 在压测脚本运行稳定后对目标分区执行 TRUNCATE/DROP PARTITION ... UPDATE GLOBAL INDEXES |
创建interval分区表
CREATE TABLE "T_BIG" (
"ID" NUMBER(18) NOT NULL,
"P_DATE" DATE NOT NULL,
"K" NUMBER(18) NOT NULL,
"PAD" VARCHAR2(200),
CONSTRAINT "PK_T_BIG" PRIMARY KEY ("ID", "P_DATE")
)
PARTITION BY RANGE ("P_DATE")
INTERVAL (INTERVAL '1' MONTH)
(
PARTITION "P_202401" VALUES LESS THAN (TO_DATE('2024-02-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN'))
);
创建全局索引
obclient(SYS@oracle)[SYS] > create index gi_k on t_big(k) global;
Query OK, 0 rows affected (0.116 sec)
通过 PL/SQL 匿名块分批插入 6400 万行数据,自动触发 Interval 分区扩展
declare
v_base number;
v_sql varchar2(4000);
begin
for i in 0..127 loop
v_base := i*500000;
v_sql := 'insert into t_big(id,p_date,k,pad) '
|| 'select level + ' || v_base || ','' '
|| 'to_date(''2024-01-01'',''YYYY-MM-DD'') + mod(level,32) '
|| '+ numtoyminterval(mod(level,32),''MONTH''), '
|| 'mod(level,10000000), '
|| 'lpad(''x'',200,''x'') '
|| 'from dual connect by level <= 500000';
execute immediate v_sql;
commit;
if mod(i+1,16) = 0 then
DBMS_OUTPUT.PUT_LINE('Batch ' || (i+1) || '/128 done at ' || TO_CHAR(SYSDATE,'HH24:MI:SS'));
END IF;
end loop;
end;
/
select count(*) from t_big
+----------+
| COUNT(*) |
+----------+
| 64000000 |
+----------+
1 row in set (27.284 sec)
obclient(SYS@oracle)[SYS]>; select partition_name,high_value from user_tab_partitions where table_name = 'T_BIG' order by partition_position;
+----------------+-----------------------------------------------------------------------------------------------------------+
| PARTITION_NAME | HIGH_VALUE |
+----------------+-----------------------------------------------------------------------------------------------------------+
| P_202401 | TO_DATE(' 2024-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500008 | TO_DATE(' 2024-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500010 | TO_DATE(' 2024-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500011 | TO_DATE(' 2024-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500012 | TO_DATE(' 2024-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500013 | TO_DATE(' 2024-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500014 | TO_DATE(' 2024-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500015 | TO_DATE(' 2024-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500016 | TO_DATE(' 2024-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500017 | TO_DATE(' 2024-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500018 | TO_DATE(' 2024-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500019 | TO_DATE(' 2025-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500020 | TO_DATE(' 2025-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500021 | TO_DATE(' 2025-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500022 | TO_DATE(' 2025-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500023 | TO_DATE(' 2025-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500024 | TO_DATE(' 2025-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500025 | TO_DATE(' 2025-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500026 | TO_DATE(' 2025-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500027 | TO_DATE(' 2025-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500028 | TO_DATE(' 2025-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500029 | TO_DATE(' 2025-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500030 | TO_DATE(' 2025-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500031 | TO_DATE(' 2026-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500032 | TO_DATE(' 2026-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500033 | TO_DATE(' 2026-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500034 | TO_DATE(' 2026-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500035 | TO_DATE(' 2026-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500036 | TO_DATE(' 2026-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500037 | TO_DATE(' 2026-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500038 | TO_DATE(' 2026-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
| SYS_P500039 | TO_DATE(' 2026-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') |
+----------------+-----------------------------------------------------------------------------------------------------------+
32 rows in set (0.035 sec)
确认执行计划命中全局索引
obclient(SYS@oracle)[SYS]> explain select /*+ index(t gi_k) */ id,pad from t_big t where k = 12345;
+------------------------------------------------------------------------------------------------+
| Query Plan |
+------------------------------------------------------------------------------------------------+
|================================================================================================|
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|================================================================================================|
| 0|DISTRIBUTED TABLE RANGE SCAN|T_GI_K|128 |3669 |
|================================================================================================|
Outputs & filters:
-------------------------------------
0 - output([T.ID], [T.PAD]), filter(nil), rows
access([T.ID], [T.P_DATE], [T.PAD]), partitions(p0)
is_index_back=true, is_global_index=true,
range_key([T.K], [T.ID], [T.P_DATE]), range(12345,MIN,MIN ; 12345,MAX,MAX),
range_cond([T.K = cast(12345, DECIMAL_INT(18, 0))])
12 rows in set (0.006 sec)
对即将被 TRUNCATE/DROP 的分区追加 400 万行数据,增大该分区数据量以放大 DDL 维护索引的开销
obclient [SYS]> DECLARE
v_batch NUMBER := 100000;
v_total NUMBER := 4000000;
BEGIN
FOR i IN 1..(v_total/v_batch) LOOP
INSERT /*+ APPEND */ INTO t_big (id, p_date, k, pad)
SELECT 90000000 + (i-1)*v_batch + LEVEL,
TO_DATE('2024-03-15','YYYY-MM-DD'),
MOD(LEVEL,10000000),
LPAD('x',200,'x')
FROM dual CONNECT BY LEVEL ; select count(*) from t_big partition(SYS_P500020);
+----------+
| COUNT(*) |
+----------+
| 6100000 |
+----------+
1 row in set (1.823 sec)
准备业务压测脚本使用 10 个并发 Shell 进程,持续 300 秒,每秒统计全局索引查询的瞬时 QPS
#!/usr/bin/env bash
DSN="-h10.211.xx.xx -P2883 -uSYS@test_oracle#xxx -pxxx -Ac"
SEC=300
CONC=10
BV=12345
echo "[INFO] Start: $(date '+%H:%M:%S') SEC=$SEC CONC=$CONC BV=$BV"
rm -f /tmp/qps_result_*.txt /tmp/qps_snap_*.txt err.log
for i in $(seq 1 $CONC); do
(
end=$(( $(date +%s) + SEC ))
n=0
snap_ts=$(date +%s)
while [ "$(date +%s)" -lt "$end" ]; do
obclient $DSN -N -e "select /*+ INDEX(t gi_k) */ id,pad from t_big t where k=$BV;" > /dev/null 2>>err.log
ret=$?
if [ $ret -eq 0 ];then
n=$((n+1))
fi
now_ts=$(date +%s)
if [ "$now_ts" -ne "$snap_ts" ];then
echo "$now_ts $n" > /tmp/qps_snap_${i}.txt
snap_ts=$now_ts
fi
done
echo "$(date +%s) $n" > /tmp/qps_snap_${i}.txt
echo "$n" > /tmp/qps_result_${i}.txt
) &
echo "[INFO] Started worker $i"
done
prev_total=0
main_end=$(( $(date +%s) + SEC ))
while [ "$(date +%s)" -le "$main_end" ]; do
sleep 1
curr_total=0
for i in $(seq 1 $CONC); do
f=/tmp/qps_snap_${i}.txt
if [ -f "$f" ];then
val=$(tail -n1 "$f"|awk '{print $2}')
curr_total=$((curr_total + val))
fi
done
delta=$(( curr_total - prev_total ))
ts=$(date '+%H:%M:%S')
echo "[QPS_SNAP] $ts inst_qps=$delta total_done=$curr_total"
prev_total=$curr_total
done
wait
total=0
for i in $(seq 1 $CONC); do
[ -f /tmp/qps_result_${i}.txt ] && total=$((total + $(cat /tmp/qps_result_${i}.txt)))
done
echo "[INFO] End: $(date '+%H:%M:%S')"
echo "TOTAL=$total QPS=$(( total / SEC ))"
在独立数据库会话中创建存储过程以 1 秒间隔持续轮询全局索引状态,精确捕捉索引失效瞬间
CREATE OR REPLACE PROCEDURE poll_index_forever(
p_table_name IN VARCHAR2,
p_rounds IN NUMBER DEFAULT 60,
p_interval IN NUMBER DEFAULT 1
)
AS
CURSOR cur_idx IS
SELECT index_name, status
FROM user_indexes
WHERE table_name = UPPER(p_table_name)
ORDER BY index_name;
BEGIN
FOR i IN 1 .. p_rounds LOOP
FOR r IN cur_idx LOOP
DBMS_OUTPUT.PUT_LINE(
TO_CHAR(SYSTIMESTAMP, 'HH24:MI:SS.FF3') || ' | ' || r.index_name || ' >' || r.status
);
END LOOP;
DBMS_LOCK.SLEEP(p_interval);
END LOOP;
END;
/
在压测脚本运行过程中对600w行数据的分区执行DDL操作,执行耗时约3分钟
alter table t_big truncate partition p_202401 update global indexes;
alter table t_big drop partition SYS_P500008 update global indexes;
Query OK, 0 rows affected (2 min 59.874 sec)
在执行分区DDL操作后 QPS 骤降至 0,持续约 3 分钟后开始逐步恢复呈现典型的"业务雪崩—缓慢恢复"曲线
[user_root@mgrsrv1 ~]$ ./qps.sh[INFO] Start: 16:27:18 SEC=300 CONC=10 BV=12345..........[QPS_SNAP] 16:27:35 inst_qps=620 total_done=9880[QPS_SNAP] 16:27:36 inst_qps=610 total_done=10490[QPS_SNAP] 16:27:37 inst_qps=620 total_done=11110[QPS_SNAP] 16:27:38 inst_qps=610 total_done=11720[QPS_SNAP] 16:27:39 inst_qps=620 total_done=12340[QPS_SNAP] 16:27:40 inst_qps=600 total_done=13560[QPS_SNAP] 16:27:42 inst_qps=610 total_done=14170[QPS_SNAP] 16:27:43 inst_qps=620 total_done=14790[QPS_SNAP] 16:27:44 inst_qps=630 total_done=15420[QPS_SNAP] 16:27:45 inst_qps=620 total_done=16040[QPS_SNAP] 16:27:46 inst_qps=620 total_done=16040[QPS_SNAP] 16:27:47 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:48 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:49 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:50 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:51 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:52 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:53 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:54 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:55 inst_qps=0 total_done=16040[QPS_SNAP] 16:27:56 inst_qps=487 total_done=16527[QPS_SNAP] 16:27:57 inst_qps=0 total_done=16527[QPS_SNAP] 16:27:58 inst_qps=0 total_done=16527[QPS_SNAP] 16:27:59 inst_qps=0 total_done=16527[QPS_SNAP] 16:28:00 inst_qps=0 total_done=16527[QPS_SNAP] 16:28:01 inst_qps=0 total_done=16527[QPS_SNAP] 16:28:02 inst_qps=10 total_done=16537[QPS_SNAP] 16:28:03 inst_qps=0 total_done=16537[QPS_SNAP] 16:28:04 inst_qps=0 total_done=16537[QPS_SNAP] 16:28:05 inst_qps=0 total_done=16537[QPS_SNAP] 16:28:06 inst_qps=10 total_done=16547[QPS_SNAP] 16:28:07 inst_qps=0 total_done=16547[QPS_SNAP] 16:28:08 inst_qps=0 total_done=16547..........[QPS_SNAP] 16:30:45 inst_qps=1 total_done=16858[QPS_SNAP] 16:30:46 inst_qps=58 total_done=16916[QPS_SNAP] 16:30:47 inst_qps=245 total_done=17161[QPS_SNAP] 16:30:48 inst_qps=353 total_done=17514[QPS_SNAP] 16:30:49 inst_qps=497 total_done=18011[QPS_SNAP] 16:30:50 inst_qps=569 total_done=18580[QPS_SNAP] 16:30:51 inst_qps=620 total_done=19200[QPS_SNAP] 16:30:52 inst_qps=640 total_done=19840[QPS_SNAP] 16:30:53 inst_qps=630 total_done=20470[QPS_SNAP] 16:30:54 inst_qps=640 total_done=21110[QPS_SNAP] 16:30:55 inst_qps=630 total_done=21740[QPS_SNAP] 16:30:56 inst_qps=630 total_done=22370[QPS_SNAP] 16:30:57 inst_qps=630 total_done=23000[QPS_SNAP] 16:30:58 inst_qps=648 total_done=23648
全局索引 GI_K 在执行了分区DDL操作后立刻变为 UNUSABLE,直到DDL操作完成后才恢复为 VALID,不可用时长约 3 分钟。
16:27:37.164 | PK_T_BIG > VALID
16:27:38.165 | GI_K > VALID
16:27:38.165 | PK_T_BIG > VALID
16:27:39.166 | GI_K > VALID
16:27:39.166 | PK_T_BIG > VALID
16:27:40.168 | GI_K > VALID
16:27:40.168 | PK_T_BIG > VALID
16:27:41.169 | GI_K > VALID
16:27:41.169 | PK_T_BIG > VALID
16:27:42.171 | GI_K > VALID
16:27:42.171 | PK_T_BIG > VALID
16:27:43.172 | GI_K > VALID
16:27:43.172 | PK_T_BIG > VALID
16:27:44.174 | GI_K > VALID
16:27:44.174 | PK_T_BIG > VALID
16:27:45.175 | GI_K > VALID
16:27:45.175 | PK_T_BIG > VALID
16:27:46.177 | GI_K > UNUSABLE
16:27:46.177 | PK_T_BIG > VALID
16:27:47.179 | GI_K > UNUSABLE
16:27:47.179 | PK_T_BIG > VALID
16:27:48.180 | PK_T_BIG > VALID
16:27:49.182 | GI_K > UNUSABLE
16:27:49.182 | PK_T_BIG > VALID
16:27:50.184 | GI_K > UNUSABLE
16:27:50.184 | PK_T_BIG > VALID
16:27:51.185 | GI_K > UNUSABLE
16:27:51.186 | PK_T_BIG > VALID
16:27:52.187 | GI_K > UNUSABLE
16:27:52.187 | PK_T_BIG > VALID
16:27:53.189 | GI_K > UNUSABLE
16:27:53.189 | PK_T_BIG > VALID
16:27:54.190 | GI_K > UNUSABLE
16:27:54.191 | PK_T_BIG > VALID
16:27:55.192 | GI_K > UNUSABLE
16:27:55.192 | PK_T_BIG > VALID
16:27:56.194 | GI_K > UNUSABLE
16:27:56.194 | PK_T_BIG > VALID
16:27:57.196 | GI_K > UNUSABLE
16:27:57.196 | PK_T_BIG > VALID
16:27:58.197 | GI_K > UNUSABLE
16:27:58.198 | PK_T_BIG > VALID
16:27:59.199 | GI_K > UNUSABLE
16:27:59.199 | PK_T_BIG > VALID
16:28:00.201 | GI_K > UNUSABLE
16:28:00.201 | PK_T_BIG > VALID
16:28:01.203 | GI_K > UNUSABLE
16:28:01.203 | PK_T_BIG > VALID
16:28:02.204 | GI_K > UNUSABLE
16:28:02.204 | PK_T_BIG > VALID
16:28:03.206 | GI_K > UNUSABLE
16:28:03.206 | PK_T_BIG > VALID
16:28:04.208 | GI_K > UNUSABLE
16:28:04.208 | PK_T_BIG > VALID
16:28:05.209 | GI_K > UNUSABLE
16:28:05.210 | PK_T_BIG > VALID
16:28:06.211 | GI_K > UNUSABLE
16:28:06.211 | PK_T_BIG > VALID
16:28:07.213 | GI_K > UNUSABLE
16:28:07.213 | PK_T_BIG > VALID
16:28:08.214 | GI_K > UNUSABLE
16:28:08.215 | PK_T_BIG > VALID
16:28:09.216 | GI_K > UNUSABLE
16:28:09.216 | PK_T_BIG > VALID
16:28:10.218 | GI_K > UNUSABLE
16:28:10.218 | PK_T_BIG > VALID
16:28:11.219 | GI_K > UNUSABLE
16:28:11.220 | PK_T_BIG > VALID
16:28:12.221 | GI_K > UNUSABLE
16:28:13.223 | GI_K > UNUSABLE
16:28:13.223 | PK_T_BIG > VALID
16:28:14.225 | GI_K > UNUSABLE
16:28:14.225 | PK_T_BIG > VALID
16:28:15.227 | GI_K > UNUSABLE
16:28:15.227 | PK_T_BIG > VALID
16:28:16.228 | GI_K > UNUSABLE
16:28:16.228 | PK_T_BIG > VALID
16:28:17.230 | GI_K > UNUSABLE
16:28:17.230 | PK_T_BIG > VALID
16:28:18.232 | GI_K > UNUSABLE
16:28:18.232 | PK_T_BIG > VALID
16:28:19.233 | GI_K > UNUSABLE
16:28:19.233 | PK_T_BIG > VALID
16:28:20.235 | GI_K > UNUSABLE
16:28:20.235 | PK_T_BIG > VALID
16:28:21.237 | GI_K > UNUSABLE
16:28:21.237 | PK_T_BIG > VALID
16:28:22.239 | GI_K > UNUSABLE
16:28:22.239 | PK_T_BIG > VALID
..........
16:30:44.488 | PK_T_BIG > VALID
16:30:45.490 | GI_K > VALID
16:30:45.490 | PK_T_BIG > VALID
16:30:46.492 | GI_K > VALID
16:30:46.492 | PK_T_BIG > VALID
16:30:47.493 | GI_K > VALID
16:30:47.493 | PK_T_BIG > VALID
16:30:48.495 | GI_K > VALID
16:30:48.495 | PK_T_BIG > VALID
16:30:49.496 | GI_K > VALID
沿用完全相同的测试案例和数据集,在 4.4.2.1 版本数据库中重新执行。
在压测脚本运行过程中对600w行数据的分区执行DROP操作,执行耗时仅0.09秒、执行truncate操作仅0.56秒
alter table t_big truncate partition p_202401 update global indexes;
Query OK, 0 rows affected (0.056 sec)
alter table t_big drop partition SYS_P500008 update global indexes;
Query OK, 0 rows affected (0.09 sec)
业务QPS全程稳定在 700 左右,DDL 执行期间未出现任何 QPS 跌落至 0 的情况,业务完全无感知。
[user_root@mgrsrv1 ~]$ ./qps.sh[INFO] Start: 14:47:30 SEC=300 CONC=10 BV=12345[QPS_SNAP] 14:47:56 inst_qps=720 total_done=18014[QPS_SNAP] 14:47:57 inst_qps=719 total_done=18733[QPS_SNAP] 14:47:58 inst_qps=721 total_done=19454[QPS_SNAP] 14:47:59 inst_qps=720 total_done=20174[QPS_SNAP] 14:48:00 inst_qps=719 total_done=20893[QPS_SNAP] 14:48:01 inst_qps=722 total_done=21615[QPS_SNAP] 14:48:02 inst_qps=720 total_done=22335[QPS_SNAP] 14:48:03 inst_qps=726 total_done=23061[QPS_SNAP] 14:48:04 inst_qps=728 total_done=23789[QPS_SNAP] 14:48:05 inst_qps=726 total_done=24515[QPS_SNAP] 14:48:06 inst_qps=717 total_done=25232[QPS_SNAP] 14:48:07 inst_qps=726 total_done=25958[QPS_SNAP] 14:48:08 inst_qps=724 total_done=26682[QPS_SNAP] 14:48:09 inst_qps=731 total_done=27413[QPS_SNAP] 14:48:10 inst_qps=732 total_done=28145[QPS_SNAP] 14:48:11 inst_qps=723 total_done=28868[QPS_SNAP] 14:48:12 inst_qps=724 total_done=29592[QPS_SNAP] 14:48:14 inst_qps=1170 total_done=30762[QPS_SNAP] 14:48:15 inst_qps=1010 total_done=31772[QPS_SNAP] 14:48:16 inst_qps=722 total_done=32494[QPS_SNAP] 14:48:17 inst_qps=724 total_done=33218[QPS_SNAP] 14:48:18 inst_qps=730 total_done=33948[QPS_SNAP] 14:48:19 inst_qps=731 total_done=34679[QPS_SNAP] 14:48:20 inst_qps=727 total_done=35406[QPS_SNAP] 14:48:21 inst_qps=733 total_done=36139[QPS_SNAP] 14:48:22 inst_qps=725 total_done=36864[QPS_SNAP] 14:48:23 inst_qps=726 total_done=37590[QPS_SNAP] 14:48:24 inst_qps=730 total_done=38320[QPS_SNAP] 14:48:25 inst_qps=724 total_done=39044[QPS_SNAP] 14:48:26 inst_qps=730 total_done=39774[QPS_SNAP] 14:48:27 inst_qps=729 total_done=40503[QPS_SNAP] 14:48:28 inst_qps=730 total_done=41233[QPS_SNAP] 14:48:29 inst_qps=727 total_done=41960[QPS_SNAP] 14:48:30 inst_qps=729 total_done=42689[QPS_SNAP] 14:48:31 inst_qps=731 total_done=43420[QPS_SNAP] 14:48:32 inst_qps=722 total_done=44142[QPS_SNAP] 14:48:33 inst_qps=729 total_done=44871[QPS_SNAP] 14:48:34 inst_qps=736 total_done=45607[QPS_SNAP] 14:48:35 inst_qps=729 total_done=46336[QPS_SNAP] 14:48:36 inst_qps=725 total_done=47061[QPS_SNAP] 14:48:37 inst_qps=729 total_done=47790[QPS_SNAP] 14:48:38 inst_qps=730 total_done=48520[QPS_SNAP] 14:48:39 inst_qps=734 total_done=49254[QPS_SNAP] 14:48:40 inst_qps=736 total_done=49990[QPS_SNAP] 14:48:41 inst_qps=732 total_done=50722[QPS_SNAP] 14:48:42 inst_qps=721 total_done=51443[QPS_SNAP] 14:48:43 inst_qps=727 total_done=52170[QPS_SNAP] 14:48:44 inst_qps=734 total_done=52904[QPS_SNAP] 14:48:45 inst_qps=727 total_done=53631[QPS_SNAP] 14:48:46 inst_qps=679 total_done=54310[QPS_SNAP] 14:48:47 inst_qps=721 total_done=55031[QPS_SNAP] 14:48:48 inst_qps=718 total_done=55749[QPS_SNAP] 14:48:49 inst_qps=730 total_done=56479[QPS_SNAP] 14:48:50 inst_qps=729 total_done=57208[QPS_SNAP] 14:48:51 inst_qps=724 total_done=57932[QPS_SNAP] 14:48:52 inst_qps=727 total_done=58659[QPS_SNAP] 14:48:53 inst_qps=726 total_done=59385[QPS_SNAP] 14:48:54 inst_qps=723 total_done=60108[QPS_SNAP] 14:48:56 inst_qps=1158 total_done=61266[QPS_SNAP] 14:48:57 inst_qps=1009 total_done=62275[QPS_SNAP] 14:48:58 inst_qps=729 total_done=63004. . . . . . . . . . .[QPS_SNAP] 14:52:24 inst_qps=722 total_done=212747[QPS_SNAP] 14:52:25 inst_qps=731 total_done=213478[QPS_SNAP] 14:52:26 inst_qps=722 total_done=214200[QPS_SNAP] 14:52:27 inst_qps=721 total_done=214921[QPS_SNAP] 14:52:29 inst_qps=731 total_done=215652[QPS_SNAP] 14:52:30 inst_qps=1300 total_done=216952[QPS_SNAP] 14:52:31 inst_qps=143 total_done=217095
全局索引 GI_K 在整个 DDL 执行期间全程保持 VALID,未出现任何 UNUSABLE 状态。
14:47:44.891 | PK_T_BIG > VALID
14:47:45.892 | GI_K > VALID
14:47:45.892 | PK_T_BIG > VALID
14:47:46.893 | GI_K > VALID
14:47:46.893 | PK_T_BIG > VALID
14:47:47.894 | GI_K > VALID
14:47:47.894 | PK_T_BIG > VALID
14:47:48.895 | GI_K > VALID
14:47:48.895 | PK_T_BIG > VALID
14:47:49.896 | GI_K > VALID
14:47:49.897 | PK_T_BIG > VALID
14:47:50.898 | GI_K > VALID
14:47:50.898 | PK_T_BIG > VALID
14:47:51.899 | GI_K > VALID
14:47:51.899 | PK_T_BIG > VALID
14:47:52.900 | GI_K > VALID
14:47:52.900 | PK_T_BIG > VALID
14:47:53.901 | GI_K > VALID
14:47:53.901 | PK_T_BIG > VALID
14:47:54.902 | GI_K > VALID
14:47:54.902 | PK_T_BIG > VALID
14:47:55.904 | GI_K > VALID
14:47:55.904 | PK_T_BIG > VALID
14:47:56.905 | GI_K > VALID
14:47:56.905 | PK_T_BIG > VALID
14:47:57.906 | GI_K > VALID
14:47:57.906 | PK_T_BIG > VALID
14:47:58.907| GI_K > VALID
14:47:58.907 | PK_T_BIG > VALID
14:47:59.908 | GI_K > VALID
14:47:59.909 | PK_T_BIG > VALID
14:48:00.910 | GI_K > VALID
14:48:00.910 | PK_T_BIG > VALID
14:48:01.911 | GI_K > VALID
14:48:01.911 | PK_T_BIG > VALID
14:48:02.912 | GI_K > VALID
14:48:02.912 | PK_T_BIG > VALID
14:48:03.913 | GI_K > VALID
14:48:03.914 | PK_T_BIG > VALID
14:48:04.915 | GI_K > VALID
14:48:04.915 | PK_T_BIG > VALID
14:48:05.916 | GI_K > VALID
14:48:05.916 | PK_T_BIG > VALID
14:48:06.917 | GI_K > VALID
14:48:06.917 | PK_T_BIG > VALID
14:48:07.918 | GI_K > VALID
14:48:07.918 | PK_T_BIG > VALID
14:48:08.919 | GI_K > VALID
14:48:08.920 | PK_T_BIG > VALID
14:48:09.921 | GI_K > VALID
14:48:09.921 | PK_T_BIG > VALID
14:48:10.922 | GI_K > VALID
14:48:10.922 | PK_T_BIG > VALID
14:48:11.923 | GI_K > VALID
14:48:11.923 | PK_T_BIG > VALID
14:48:12.924 | GI_K > VALID
14:48:12.924 | PK_T_BIG > VALID
14:48:13.925 | GI_K > VALID
14:48:13.926 | PK_T_BIG > VALID
14:48:14.927 | GI_K > VALID
14:48:14.927 | PK_T_BIG > VALID
14:48:15.928 | GI_K > VALID
14:48:15.928 | PK_T_BIG > VALID
14:48:16.929 | GI_K > VALID
14:48:16.929 | PK_T_BIG > VALID
. . . . . . . .
14:52:26.250 | GI_K > VALID
14:52:26.250 | PK_T_BIG > VALID
14:52:27.251 | GI_K > VALID
14:52:27.251 | PK_T_BIG > VALID
14:52:28.252 | GI_K > VALID
14:52:28.252 | PK_T_BIG > VALID
14:52:29.253 | GI_K > VALID
14:52:29.254 | PK_T_BIG > VALID
14:52:30.255 | GI_K > VALID
14:52:30.255 | PK_T_BIG > VALID
14:52:31.256 | GI_K > VALID
14:52:31.256 | PK_T_BIG > VALID
| 对比维度 | 4.4.2.0 | 4.4.2.1 | 提升幅度 |
|---|---|---|---|
| DROP PARTITION 耗时 | 179.874 秒 | 0.09 秒 | 约2000 倍 |
| GI_K 索引不可用时长 | 约 179 秒 | 0 秒(全程 VALID) | 彻底消除 |
| 业务 QPS 最低值 | 0(完全中断) | ≈ 620 | 业务零中断 |
| QPS 恢复模式 | 阶梯式缓慢恢复 | 无需恢复 | — |