defragment 参数:动态地对分区 extent 取消分片(SQL 管理 API)

随同 admin()task() 函数,使用 defragment 参数来对表或索引取消分片以合并不相邻的 extent。

对表取消分片使得数据行离得更近,以避免分区标题页移除问题,并可提高性能。

在对分区取消分片之前,您应回顾对分区取消分段

语法

使用下列语法,您或可指定 defragment 参数,或可指定 defragment partnum 参数:

元素 描述 关键考虑
database 包括您想要取消分片的表或索引的数据库名。  
owner 表所有者的用户 ID。  
table 要取消分片的表名。  
partition_number 要取消分片的一个或多个分区号。 要指定多于一个分区,请使用逗号分隔的分区号列表。

用法

使用 defragment 参数来对特定的表取消分片。使用 defragment partnum 参数来对一个或多个磁盘分区取消分片。

关于取消分片的信息存储在共享内存中。使用 oncheck -pt 和 -pT:显示表或分片的 tblspaces 命令来显示关于特定的表或分片的 extent 数目信息。使用 onstat -g defragment 命令:打印磁盘碎片整理的分区 extent

如果取消分片需要减少 extent 的数目,减少最少 1 extent,则需要返回 0(成功),即使在分区中有许多 extent。

如果分区有单个 extent,则取消分片需要返回 0 来表明需要成功,即使无 extent 合并。

示例

要对 stores_demo 数据库中的 customer 表取消分片,请使用下列函数之一:
EXECUTE FUNCTION task("defragment","stores_demo:gbasedbt.customer");
EXECUTE FUNCTION admin("defragment","stores_demo:gbasedbt.customer");
要对索引取消分片,您必须指定该索引的分区号,如这两个函数示例所示:
EXECUTE FUNCTION task("defragment partnum","2097154");
EXECUTE FUNCTION admin("defragment partnum","2097154");
要对分区列表取消分片,请使用下列函数之一:
EXECUTE FUNCTION task("defragment partnum", "16777217,28477346");
EXECUTE FUNCTION admin("defragment partnum", "16777217,28477346");