分区表执行 TRUNCATE PARTITION 操作,以下描述正确的是?()

分区表执行 TRUNCATE PARTITION 操作,以下描述正确的是?()
A. 逐条删除分区内所有数据,生成大量 CLOG
B. 直接回收分区存储空间,速度极快
C. 会同步删除表的分区定义,无法复用该分区
D. 执行期间阻塞整张表所有读写操作

3 个赞

正确答案是 B. 直接回收分区存储空间,速度极快

逐项分析

A. 逐条删除分区内所有数据,生成大量 CLOG — :x: 错误

TRUNCATE PARTITIONDDL 操作,不是 DML 操作。它直接释放分区对应的数据页和元数据,不走逐行删除逻辑,因此不会产生大量事务日志(CLOG)。与之对比,DELETE FROM table PARTITION(p0) 才是逐行删除并生成大量 CLOG 的方式。

B. 直接回收分区存储空间,速度极快 — :white_check_mark: 正确

TRUNCATE PARTITION 本质上是一个仅涉及元数据的操作,直接释放分区的数据页并重置相关结构,即使分区中包含数亿行数据,也能在毫秒到秒级完成,I/O、CPU 和内存开销极小。

C. 会同步删除表的分区定义,无法复用该分区 — :x: 错误

TRUNCATE PARTITION 只清空分区内的数据分区定义(结构)完整保留,分区仍然可以继续接收新数据的写入。如果要删除分区定义,应该使用 DROP PARTITION

D. 执行期间阻塞整张表所有读写操作 — :x: 错误

TRUNCATE PARTITION 的锁粒度是分区级别,只对目标分区加锁,其他分区的读写操作基本不受影响。只有访问被 TRUNCATE 的那个分区的 DML 语句才会被短暂阻塞,待操作完成后即可继续执行。

1 个赞