合 GreenPlum中的vacuumdb和analyzedb
Tags: GreenPlum整理自官网统计信息vacuumdbanalyzedb
vacuumdb
垃圾收集并分析数据库。
概要
1 2 3 4 5 6 7 | vacuumdb [connection-option...] [--full | -f] [--freeze | -F] [--verbose | -v] [--analyze | -z] [--analyze-only | -Z] [--table | -t table [( column [,...] )] ] [dbname] vacuumdb [connection-option...] [--all | -a] [--full | -f] [-F] [--verbose | -v] [--analyze | -z] [--analyze-only | -Z] vacuumdb -? | --help vacuumdb -V | --version |
描述
vacuumdb是用于清理Greenplum数据库的工具。 vacuumdb还将生成Greenplum数据库查询优化器使用的内部统计信息。
vacuumdb是SQL命令VACUUM的包装。 通过此工具和通过其他访问服务器的方法来清理数据库之间没有明显的区别。
选项
-a | —all
清理所有数据库。
[-d] dbname | [—dbname=]dbname
要清理的数据库的名称。 如果未指定此选项,并且未使用-a(或--all),则从环境变量PGDATABASE读取数据库名称。 如果未设置,则使用为连接指定的用户名。
-e | —echo
回显vacuumdb生成并发送到服务器的命令。
-f | —full
选择完全清理,这可以回收更多空间,但是需要更长的时间并排他锁定表。
Warning: 在Greenplum数据库中不建议使用VACUUM FULL。
-F | —freeze
冻结行事务信息。
-q | —quiet
不显示响应。
-t table [(column)] | —table=table [(column)]
仅清理或分析该表。 只能与--analyze或--analyze-all选项一起指定列名。 可以通过写入多个-t开关来清理多个表。 如果指定列,则可能必须从shell转义括号。
-v | —verbose
在处理过程中打印详细信息。
-z | —analyze
收集统计信息以供查询优化器使用。
-Z | —analyze-only
仅计算统计信息以供查询优化器使用(不清理)。
-V | —version
打印vacuumdb版本并退出。
-? | —help
显示有关vacuumdb命令行参数的帮助,然后退出。
连接选项
-h host | —host=host
运行Greenplum master数据库服务器的计算机的主机名。 如果未指定,则从环境变量PGHOST读取或默认为localhost。
-p port | —port=port
Greenplum master数据库服务器正在侦听连接的TCP端口。 如果未指定,则从环境变量PGPORT读取或默认为5432。
-U username | —username=username
要用作连接的数据库角色名称。 如果未指定,则从环境变量PGUSER读取或默认为当前系统角色名称。
-w | —no-password
不发出密码提示。 如果服务器要求密码验证,而其他方式(例如.pgpass文件)无法使用密码,则连接尝试将失败。 此选项在没有用户输入密码的批处理作业和脚本中很有用。
-W | —password
强制输入密码提示。
--maintenance-db=dbname
指定要连接以发现应清理哪些其他数据库的数据库名称。 如果未指定,将使用postgres数据库,如果不存在,将使用template1。
注解
vacuumdb可能需要连接几次master服务器,每次都要求输入密码。 在这种情况下,使用~/.pgpass文件很方便。
示例
清理数据库test:
1 | vacuumdb test |
清理分析数据库bigdb:
1 | vacuumdb --analyze bigdb |
要清理名为mydb的数据库中的单个表foo,并分析表的单个列bar。 请注意表名和列名两边的引号,从shell转义括号:
1 | vacuumdb --analyze --verbose --table 'foo(bar)' mydb |
analyzedb
一个提供对表的递增和并发ANALYZE操作的工具。对追加优化表来说, analyzedb只在统计数据不是最新的时候才更新统计信息。
概要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | analyzedb -d dbname { -s schema | { -t schema.table [ -i col1[, col2, ...] | -x col1[, col2, ...] ] } | { -f | --file} config-file } [ -l | --list ] [ --gen_profile_only ] [ -p parallel-level ] [ --full ] [ -v | --verbose ] [ --debug ] [ -a ] analyzedb { --clean_last | --clean_all } analyzedb --version analyzedb { -? | -h | --help } |
描述
analyzedb工具递增并发地更新Greenplum数据库中指定表的表数据的统计信息。
在执行ANALYZE操作时,analyzedb创建了表元数据的快照并将它 存储在Master主机的磁盘上。只有在表格被修改的情况下才执行ANALYZE操作。如果 表或者分区自从上次分区依赖没有被修改过,则analyzedb会自动跳过表或分区, 因为它已经包含了最新的统计信息。
- 对追加优化表来说,analyzedb如果统计数据数据不是最新的,则会逐渐分析统计数据。 例如,如果表数据在表的统计数据收集之后改变了。如果没有该表的统计数据,则收集统计数据。
- 对于堆表,统计信息总是被更新。
即使表格统计信息是新的,也可以指定--full选项来更新追加优化表的统计信息。
默认情况下,analyzedb最多创建5个并发会话来并行分析表。 对于每个会话,analyzedb发出一个ANALYZE命令到 数据库并指定不同的表名。-p选项控制最大并发会话数。
分区追加优化表
对于一个分区的追加优化表analyzedb检查分区表的根分区和叶子分区。 如果需要,该工具将更新非当前分区和根分区的统计信息。
GPORCA需要根分区统计信息。默认情况下,如果统计信息不存在,那么analyzedb 工具将收集分区表的根分区的统计信息。如果任何叶子节点有陈旧的统计信息,那么,analyzedb 也会刷新根分区的统计信息。刷新根节点的统计信息的成本和分析一个叶子分区相当。用户可以指定 --skip_root_stats来禁用分区表的根分区的统计信息的收集。
注意
如果表已经由DML或DDL命令(包括INSERT, DELETE, UPDATE, CREATE TABLE, ALTER TABLE 和 TRUNCATE)修改,则analyzedb工具会更新追加优化表的统计信息。 该工具通过比较表的元数据和之前analyzedb操作中所保存的快照目录元数据来确定表是否已经被修改。表元数据的快照 作为状态文件存储在Greenplum数据库主数据目录中的db_analyze// 目录中。
该工具不会自动删除旧的快照信息。时间久了,这些快照会占用大量的磁盘空间。为了回收磁盘空间,您可以 保留最近的快照信息,将旧的快照删掉。 用户可以指定--clean_last或者--clean_all选项来删除由 analyzedb生成的状态文件。
如果用户未指定表,一组表或模式,那么analyzedb工具会根据需要收集所有系统 目录表和用户定义的表中的统计信息。
外部表不受analyzedb的影响。