第二章 SQL命令参考- VACUUM

来源:互联网 发布:中国调查数据网 编辑:程序博客网 时间:2024/05/18 22:41

VACUUM

Garbage-collectsand optionally analyzes a database.

概要

VACUUM[FULL] [FREEZE] [VERBOSE] [table]

VACUUM[FULL] [FREEZE] [VERBOSE] ANALYZE

[table[(column [, ...] )]]

 

 

描述

vacuum回收已删除的元组占用的存储。Greenplum在日常数据操作中,更新或删除的数据并没有从物理表中删除,数据仍然存在于磁盘上,直到vacuum操作完成。因此,有必要定期做vacuum,尤其是在频繁更新的表。

 

在没有参数的情况下,vacuum处理当前数据库中的每个表格。有了参数,vacuum只处理那张表。

VACUUMANALYZE 对每个表先执行vacuum,然后执行analyze。这对于日常维护脚本一个方便的组合形式。请参阅分析有关其处理的更多细节。

 

vacuum(无FULL)只能标记那些空间是在表的末端的空间以备将来重复使用表和索引数据和回收空间再利用,获得的所是表排它锁。在表的开始或中间的未使用空间仍保持原样。对于堆表,这种形式的命令都可以在正常的读取和表写入并行操作,因为没有获得独占锁。

对于附加优化表,vacuum首先压缩索引,再依次压缩每个段文件,最后对辅助关系进行vacuum,并更新统计事实表。在每个环节,有效行从当前段文件复制到一个新的段文件,然后当前的段文件被放入待删除队列进行删除,并将新的段文件置为可用。追加优化表中的空vacuum允许扫描,插入,删除,和表中的更新,与此同时一个分段的文件被压缩。

VACUUM FULL确实更广泛的处理,包括跨越块的元组的移动要尽量表压缩到磁盘块的最小数目。这种形式要慢得多,并要求每个表上的排它锁正在处理它。

 

随着附加优化表,VACUUM FULL获取排它锁,禁止插入,更新和删除,但是SELECT语句可以在大部分的压实过程中被执行。当所有可见行已被复制到新的段文件,而新段可用和老段设置要删除的表被锁定简要介绍。

重要提示:有关使用真空的信息,FULL真空,真空ANALYZE详见备注

Outputs

指定详细信息时,vacuum会发出进度消息以指示当前正在处理哪个表。 有关表格的各种统计信息也被打印出来。

parameter

FULL

选择一个完整的真空,这可能会回收更多的空间,但需要更长的时间,并锁定表。

FREEZE

指定FREEZE相当于在vacuum_freeze_min_age服务器配置参数设置为零的情况下执行VACUUM。 有关vacuum_freeze_min_age的信息,请参阅服务器配置参数。.

VERBOSE

打印每个表格的详细真空活动报告。

ANALYZE

更新规划人员使用的统计信息,以确定执行查询的最有效方式。

table

真空的特定表的名称(可选模式修饰)。 默认为当前数据库中的所有表。

column

要分析的特定列的名称。 默认为所有列。

Notes

vacuum不能在事务块里面执行。

关键的建议生产数据库经常vacuum(至少每晚),以除去到期行。添加或删除大量的行之后,运行vacuum analyze命令对性能提升会有好的作用。这将更新与最近的更改结果系统目录,并允许Greenplum数据引擎查询优化器,使规划的查询更好的选择。

重要提示:经常PostgreSQL有所谓的自动清理后台程序的独立可选的服务器进程,其目的是自动执行vacuum和ANALYZE命令。该功能在Greenplum数据引擎当前已禁用。

vacuum导致I / O流量的大幅增加,这可能会导致其它活动会话的性能较差。因此,最好是在低使用时间进行真空数据库。

对于堆表,过期的行保存在所谓的自由空间映射中。 可用空间映射的大小必须足够大,以覆盖数据库中所有堆表的空行。 如果尺寸不够大,那么溢出自由空间映射的死行所占用的空间就不能被常规的VACUUM命令收回。。

VACUUM命令跳过外部表。

VACUUM FULL回收所有到期的行空间,但是它要求在每个正在处理的表上进行独占锁定,这是一项非常昂贵的操作,可能需要很长时间才能在大型的分布式Greenplum数据库表上完成。 Pivotal建议在数据库维护期间执行VACUUM FULL操作。

作为VACUUM FULL的替代方法,您可以使用CREATE TABLEAS语句重新创建表并删除旧表。

适当调整自由空间图的大小。 使用以下服务器配置参数配置可用空间映射:

图:

•     max_fsm_pages

•     max_fsm_relations

对于追加优化表,VACUUM需要足够的可用磁盘空间来容纳VACUUM过程中的新段文件。 如果段文件中隐藏行与总行数之比小于阈值(缺省为10),则不压缩段文件。 阈值可以使用gp_appendonly_compaction_threshold服务器配置参数进行配置。 VACUUM FULL忽略阈值,并重写段文件,而不考虑比率。 VACUUM可以使用gp_appendoniy_compaction服务器配置参数禁用附加优化表。 有关服务器配置参数的信息,请参阅服务器配置参数。

如果在追加优化表被抽真空时检测到并发可串行化事务,则当前和后续段文件不被压缩。 如果段文件已经被压缩,但是在删除原始段文件的事务中检测到并发可序列化的事务,则跳过该删除。 真空完成后,这可能会使一个或两个段文件处于“等待下降”状态。

有关Greenplum数据库并发控制的更多信息,请参阅“Greenplum数据库管理员指南”中的“日常系统维护任务”。

示例

Vacuum alltables in the current database:

VACUUM;

Vacuum aspecific table only:

VACUUMmytable;

Vacuum alltables in the current database and collect statistics for the query optimizer:

VACUUM ANALYZE;

兼容性

There is no vacuum statement in the SQL standard.

相关参考

ANALYZE
原创粉丝点击