云服务器内容精选
-
示例 VACUUM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 --创建表tbl_test,并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int); gaussdb=# INSERT INTO tbl_test VALUES (1); --查看数据,和数据的ctid。 gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 1 (1 row) --删除该数据。 gaussdb=# DELETE FROM tbl_test; --重新插入一条数据,发现使用了一个新的ctid。 gaussdb=# INSERT INTO tbl_test VALUES (2); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,2) | 2 (1 row) --使用VACUUM命令之后,在插入数据,发现复用了旧的空间。 gaussdb=# VACUUM ANALYZE tbl_test; gaussdb=# INSERT INTO tbl_test VALUES (3); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 3 (0,2) | 2 (2 rows) --删除表。 gaussdb=# DROP TABLE tbl_test; VACUUM FULL --建表。 gaussdb=# CREATE TABLE tbl_test2(c1 int); --插入10万条数据并查看表的大小。 gaussdb=# INSERT INTO tbl_test2 VALUES (generate_series(1,100000)); gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --删除数据并查看表大小。 gaussdb=# DELETE FROM tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --使用VACUUM FULL回收空间,并查看表的大小。 gaussdb=# VACUUM FULL ANALYZE tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 0 bytes (1 row) --使用在线VACUUM FULL回收空间。 gaussdb=# VACUUM FULL ANALYZE tbl_test2 ONLINE; --删除。 gaussdb=# DROP TABLE tbl_test2;
-
注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者或者被授予了指定表VACUUM权限的用户,三权分立开关关闭时,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好地选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。FULL选项并不清理索引,所以推荐周期性的运行REINDEX命令。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM FULL通过重建表的方式将表内空闲空间归还给表空间,重建过程需要额外申请表中有效数据相当的存储空间。对于非段页式表,VACUUM FULL执行结束后,原表所占物理文件会被删除,原表所占的物理文件的空间会归还给操作系统;对于段页式表,VACUUM FULL执行结束后,原表所占的物理空间,会被归还给段页式数据文件,不会归还给操作系统。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 当含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 同时执行多个VACUUM FULL可能出现死锁。 如果没有打开xc_maintenance_mode参数,那么VACUUM FULL操作将跳过所有系统表。 执行DELETE后立即执行VACUUM FULL命令不会回收空间。执行DELETE后再执行1000个非SELECT事务,或者等待1s后再执行1个事务,之后再执行VACUUM FULL命令空间才会回收。 VACUUM FULL期间会对表加排他锁,不建议在业务高峰期运行VACUUM FULL,可能导致等待时间过长或者业务中断。 Ustore手动VACUUM与Astore手动VACUUM行为一致、会对堆表、索引等进行加锁清理;而Ustore的AUTOVACUUM仅做分区表GPI清理、堆表FSM更新以及索引页面回收。 VACUUM FULL分区表时,会遍历分区进行清理,并在分区清理后重建GPI,因此当分区较多时,建议先删除GPI,在VACUUM FULL执行完成后重新创建索引,以此降低VACUUM FULL的执行时间。 在线VACUUM FULL不支持对于数据库级、索引级、分区表、二级分区表、段页式表、hash bucket表、临时表、unlogged表、HTAP表对象执行在线VACUUM FULL。如对象涉及以上不支持的类型,ONLINE关键字将不会生效,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 执行在线VACUUM FULL操作时,需预留足够的磁盘空间,即剩余空间是所操作的表(及其上索引等附属品)总和的1倍。 如果用户取消在线VACUUM FULL执行过程,首先进入残留清理流程,如果用户再次取消,则会结束清理流程导致残留。 在线VACUUM FULL与用户业务之间存在资源争抢,不适合大业务背景下做在线VACUUM FULL。对于资源有限的场景,建议采用细粒度资源管控进行操作,且不建议使用并行加速功能。 M-Compatibility模式下不支持在线VACUUM FULL操作。 在线VACUUM FULL不支持FREEZE关键字,若同时指定FREEZE关键字与ONLINE关键字,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 在线VACUUM FULL不支持在事务内执行,不支持在存储过程中执行。 若在线VACUUM FULL操作失败,表上可能会有明显存储空间膨胀。其中膨胀程度与在线VACUUM FULL执行时长以及并发写操作量成正比。长事务可能会阻塞在线VACUUM FULL,建议避免在长事务存在时进行在线VACUUM FULL。 在线VACUUM FULL执行后期将阻塞DQL操作,对并发的DML操作报错。 在线VACUUM FULL执行期间,应尽量避免与其他DDL并发执行,否则可能会出现死锁、报错等;若出现此类情况,可以重新连接客户端进行重试。 在线VACUUM FULL过程中会生成名为online$$ddl$$[hash值]的模式。 模式的属主默认为初始用户,不建议在线VACUUM FULL执行中操作此模式,可能会导致中止在线VACUUM FULL并产生未知错误。不建议用户对此模式下的表格进行查询。 用户不可创建online$$为前缀的模式,会有报错提示。若已存在同名模式冲突,在线VACUUM FULL将不会生效,在线VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句是因为模式名冲突不可在线。 -
-
语法格式 回收空间并更新统计信息,对关键字顺序无要求。 VACUUM [ ( { FULL | FREEZE | VERBOSE | { ANALYZE | ANALYSE } } [, ... ] ) ] [ table_name [ (column_name [, ... ] ) ] [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 仅回收空间,不更新统计信息。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ... ] ) ] ] [ PARTITION ( partition_name ) ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ];
-
示例 VACUUM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 --创建表tbl_test,并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int); gaussdb=# INSERT INTO tbl_test VALUES (1); --查看数据,和数据的ctid。 gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 1 (1 row) --删除该数据。 gaussdb=# DELETE FROM tbl_test; --重新插入一条数据,发现使用了一个新的ctid。 gaussdb=# INSERT INTO tbl_test VALUES (2); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,2) | 2 (1 row) --使用VACUUM命令之后,在插入数据,发现复用了旧的空间。 gaussdb=# VACUUM ANALYZE tbl_test; gaussdb=# INSERT INTO tbl_test VALUES (3); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 3 (0,2) | 2 (2 rows) --删除表。 gaussdb=# DROP TABLE tbl_test; VACUUM FULL --建表。 gaussdb=# CREATE TABLE tbl_test2(c1 int); --插入10万条数据并查看表的大小。 gaussdb=# INSERT INTO tbl_test2 VALUES (generate_series(1,100000)); gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --删除数据并查看表大小。 gaussdb=# DELETE FROM tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --使用VACUUM FULL回收空间,并查看表的大小。 gaussdb=# VACUUM FULL ANALYZE tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 0 bytes (1 row) --使用在线VACUUM FULL回收空间。 gaussdb=# VACUUM FULL ANALYZE tbl_test2 ONLINE; --删除。 gaussdb=# DROP TABLE tbl_test2;
-
参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上ANALYZE关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称,需要配合analyze选项使用。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 由于VACUUM ANALYZE语句的机制是依次执行VACUUM和ANALYZE,因此当column_name错误时,会存在VACUUM执行成功但ANALYZE执行失败的情况;对于分区表,则会出现对某个分区VACUUM执行成功之后ANALYZE执行失败的情况。 partition_name 要清理的表的分区名称。缺省时为所有分区。
-
注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者或者被授予了指定表VACUUM权限的用户,三权分立开关关闭时,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好的选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。FULL选项并不清理索引,所以推荐周期性的运行REINDEX命令。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM FULL通过重建表的方式将表内空闲空间归还给表空间,重建过程需要额外申请表中有效数据相当的存储空间。对于非段页式表,VACUUM FULL执行结束后,原表所占物理文件会被删除,原表所占的物理文件的空间会归还给操作系统;对于段页式表,VACUUM FULL执行结束后,原表所占的物理空间,会被归还给段页式数据文件,不会归还给操作系统。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 当含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 如果没有打开xc_maintenance_mode参数,那么VACUUM FULL会跳过所有系统表。 执行DELETE后立即执行VACUUM FULL命令不会回收空间。执行DELETE后再执行1000个非SELECT事务,或者等待1s后再执行1个事务,之后再执行VACUUM FULL命令空间才会回收。 VACUUM FULL期间会对表加排他锁,不建议在业务高峰期运行VACUUM FULL,可能导致等锁时间过长或者死锁。 为保证性能和统计信息的准确性,避免VACUUM ANALYZE、AUTOANALYZE、手动ANALYZE等涉及ANALYZE的命令同时执行或执行过于频繁。 Ustore手动VACUUM与Astore手动VACUUM行为一致,会对堆表、索引等进行加锁清理;而Ustore的AUTOVACUUM仅做分区表GPI清理、堆表FSM更新以及索引页面回收。 VACUUM FULL分区表时,会遍历分区进行清理,并在分区清理后重建GPI,因此当分区较多时,建议先删除GPI,在VACUUM FULL执行完成后重新创建索引,以此降低VACUUM FULL的执行时间。 在线VACUUM FULL不支持对于数据库级、索引级、分区表、二级分区表、段页式表、hash bucket表、临时表、unlogged表对象执行在线VACUUM FULL。如对象涉及以上不支持的类型,ONLINE关键字将不会生效,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 执行在线VACUUM FULL操作时,需预留足够的磁盘空间,即剩余空间是所操作的表(及其上索引等附属品)总和的1倍。 如果用户取消在线VACUUM FULL执行过程,首先进入残留清理流程,如果用户再次取消,则会结束清理流程导致残留。 在线VACUUM FULL与用户业务之间存在资源争抢,不适合大业务背景下做在线VACUUM FULL。对于资源有限的场景,建议采用细粒度资源管控进行操作,且不建议使用并行加速功能。 M-Compatibility模式下不支持在线VACUUM FULL操作。 在线VACUUM FULL不支持FREEZE关键字,若同时指定FREEZE关键字与ONLINE关键字,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 在线VACUUM FULL不支持在事务内执行,不支持在存储过程中执行。 若在线VACUUM FULL操作失败,表上可能会有明显存储空间膨胀。其中膨胀程度与在线VACUUM FULL执行时长以及并发写操作量成正比。长事务可能会阻塞在线VACUUM FULL,建议避免在长事务存在时进行在线VACUUM FULL。 在线VACUUM FULL执行后期将阻塞DQL操作,对并发的DML操作报错。 在线VACUUM FULL执行期间,应尽量避免与其他DDL并发执行,否则可能会出现死锁、报错等;若出现此类情况,可以重新连接客户端进行重试。 在线VACUUM FULL过程中会生成名为online$$ddl$$[hash值]的模式。 模式的属主默认为初始用户,不建议在线VACUUM FULL执行中操作此模式,可能会导致中止在线VACUUM FULL并产生未知错误。不建议用户对此模式下的表格进行查询。 用户不可创建online$$为前缀的模式,会有报错提示。若已存在同名模式冲突,在线VACUUM FULL将不会生效,在线VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句是因为模式名冲突不可在线。 - 若对象表上存在全局二级索引(GSI),ONLINE关键字将不会生效,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 -
-
语法格式 回收空间并更新统计信息,对关键字顺序无要求。 1 2 3 VACUUM [ ( { FULL | FREEZE | VERBOSE | { ANALYZE | ANALYSE } } [, ... ] ) ] [ table_name [ (column_name [, ...] ) ] [ PARTITION ( partition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 仅回收空间,不更新统计信息。 1 2 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 1 2 3 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ];
-
参数说明 expression 用于计算或插入结果表指定地点的常量或者表达式。 在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的。 sort_expression 一个表示如何排序结果行的表达式或者整数常量。 ASC 指定按照升序排列。 DESC 指定按照降序排列。 operator 一个排序操作符。 count 返回的最大行数。 OFFSET start [ ROW | ROWS ] 声明返回的最大行数,而start声明开始返回行之前忽略的行数。 FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY FETCH子句限定返回查询结果从第一行开始的总行数,count的缺省值为1。
-
示例 --建表。 gaussdb=# CREATE TABLE test_t2(col1 INT,col2 VARCHAR); gaussdb=# CREATE TABLE test_t3(col1 INT,col2 VARCHAR); --插入多条数据。 gaussdb=# INSERT INTO test_t2 (col1, col2) VALUES (10,'AA'),(20,'BB'),(30,'CC'); --分页查询,返回第一页,每页显示1行数据。 gaussdb=# SELECT * FROM test_t2 ORDER BY col1 ASC LIMIT 1 OFFSET 0; col1 | col2 ------+------ 10 | AA (1 row) --把test_t2中的数据插入到test_t3中。 gaussdb=# INSERT INTO test_t3 SELECT * FROM test_t2; --结合FETCH查询,返回第一页,每页显示1行数据。 gaussdb=# SELECT * FROM test_t3 ORDER BY col1 ASC OFFSET 0 FETCH FIRST 1 ROWS ONLY; col1 | col2 ------+------ 10 | AA (1 row) --删除表test_t2、test_t3。 gaussdb=# DROP TABLE test_t2; gaussdb=# DROP TABLE test_t3;
-
语法格式 VALUES {( expression [, ...] )} [, ...] [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];
-
示例 --建表。 gaussdb=# CREATE TABLE test_t2(col1 INT,col2 VARCHAR); gaussdb=# CREATE TABLE test_t3(col1 INT,col2 VARCHAR); --插入多条数据。 gaussdb=# INSERT INTO test_t2 (col1, col2) VALUES (10,'AA'),(20,'BB'),(30,'CC'); --分页查询,返回第一页,每页显示1行数据。 gaussdb=# SELECT * FROM test_t2 ORDER BY col1 ASC LIMIT 1 OFFSET 0; col1 | col2 ------+------ 10 | AA (1 row) --把test_t2中的数据插入到test_t3中。 gaussdb=# INSERT INTO test_t3 SELECT * FROM test_t2; --结合FETCH查询,返回第一页,每页显示1行数据。 gaussdb=# SELECT * FROM test_t3 ORDER BY col1 ASC OFFSET 0 FETCH FIRST 1 ROWS ONLY; col1 | col2 ------+------ 10 | AA (1 row) --删除表test_t2、test_t3。 gaussdb=# DROP TABLE test_t2; gaussdb=# DROP TABLE test_t3;
-
参数说明 expression 用于计算或插入结果表指定地点的常量或者表达式。 在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的。 sort_expression 一个表示如何排序结果行的表达式或者整数常量。 ASC 指定按照升序排列。 DESC 指定按照降序排列。 operator 一个排序操作符。 count 返回的最大行数。 OFFSET start [ ROW | ROWS ] 声明返回的最大行数,而start声明开始返回行之前忽略的行数。 FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY FETCH子句限定返回查询结果从第一行开始的总行数,count的缺省值为1。
-
语法格式 1 2 3 4 5 VALUES {( expression [, ...] )} [, ...] [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];
-
参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 ustore分区表在autovacuum=analyze的时候也会触发vacuum。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称,需要配合analyze选项使用。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 由于VACUUM ANALYZE语句的机制是依次执行VACUUM和ANALYZE,因此当column_name错误时,会存在VACUUM执行成功但ANALYZE执行失败的情况;对于分区表,则会出现对某个分区VACUUM执行成功之后ANALYZE执行失败的情况。 PARTITION COMPACT和PARTITION参数不能同时使用。 partition_name 要清理的表的一级分区名称。缺省时为所有一级分区。 subpartition_name 要清理的表的二级分区名称。缺省时为所有二级分区。
-
示例 VACUUM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 --创建表tbl_test,并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int); gaussdb=# INSERT INTO tbl_test VALUES (1); --查看数据,和数据的ctid。 gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 1 (1 row) --删除该数据。 gaussdb=# DELETE FROM tbl_test; --重新插入一条数据,发现使用了一个新的ctid。 gaussdb=# INSERT INTO tbl_test VALUES (2); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,2) | 2 (1 row) --使用VACUUM命令之后,在插入数据,发现复用了旧的空间。 gaussdb=# VACUUM ANALYZE tbl_test; gaussdb=# INSERT INTO tbl_test VALUES (3); gaussdb=# SELECT ctid,* FROM tbl_test; ctid | c1 -------+---- (0,1) | 3 (0,2) | 2 (2 rows) --删除表。 gaussdb=# DROP TABLE tbl_test; VACUUM FULL --建表。 gaussdb=# CREATE TABLE tbl_test2(c1 int); --插入10万条数据并查看表的大小。 gaussdb=# INSERT INTO tbl_test2 VALUES (generate_series(1,100000)); gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --删除数据并查看表大小。 gaussdb=# DELETE FROM tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 3048 kB (1 row) --使用VACUUM FULL回收空间,并查看表的大小。 gaussdb=# VACUUM FULL ANALYZE tbl_test2; gaussdb=# SELECT 'tbl_test2' AS tablename, pg_size_pretty(pg_relation_size('tbl_test2')) AS size; tablename | size -----------+--------- tbl_test2 | 0 bytes (1 row) --删除。 gaussdb=# DROP TABLE tbl_test2;
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格