VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

OPTIMIZE TABLE

功能描述

重建表和索引的物理空间,释放可回收空间给操作系统,并更新相关表的统计信息。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
  • 使用该语法需要表vacuum/owner或superuser权限。
  • Vastbase的optimize操作只支持单表。
  • Vastbase的optimize会阻塞表的读写,表数据量较大时可能会存在长时间锁表情况,请谨慎操作。
  • optimize也会被其他事务或两阶段事务阻塞。
  • 尽量不要并发执行optimize多张表,如果需要并发执行,请降低并发数量,一般在3以下。
  • 执行optimize时需要确保数据目录当前剩余空间大于该表当前占用空间,不然可能会失败。
  • 表在短时间内删除大量数据后不要立即执行optimize,尝试等待几秒或执行若干其他事务后再执行,不然可能出现元组处于HEAPTUPLE_RECENTLY_DEAD状态无法正常回收的情况。

语法格式

OPTIMIZE [VERBOSE] [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name

参数说明

  • [VERBOSE]

    查看optimize处理详情,可缺省。

  • [NO_WRITE_TO_BINLOG | LOCAL]

    仅兼容语法,无实际效果,可缺省。

  • tbl_name

    表名,可指定表名,也可以指定schema_name.table_name

示例

1、创建doc表并插入10000条数据。

create table doc(id serial primary key, content varchar(255));
insert into doc(content) select 'abcd1234' from generate_series(1,10000) as content;

2、删除9000条数据。

delete from doc where id <= 9000;

3、对表doc进行optimize操作。

optimize table doc;

返回结果为:

VACUUM

4、对表doc进行optimize操作(查看处理详情)。

optimize verbose table doc;

返回结果为:

INFO:  vacuuming "public.doc"(vb01 pid=17140)
INFO:  "doc": found 9000 removable, 1000 nonremovable row versions in 68 pages(vb01 pid=17140)
DETAIL:  0 dead row versions cannot be removed yet.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  analyzing "public.doc"(vb01 pid=17140)
INFO:  ANALYZE INFO : "doc": scanned 7 of 7 pages, containing 1000 live rows and 0 dead rows; 1000 rows in sample, 1000 estimated total rows(vb01 pid=17140)
VACUUM