ANALYZE | ANALYSE

    如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table_name、column和partition_name参数把分析限定在特定的表、列或分区表中。

    ANALYZE|ANALYSE VERIFY用于检测数据库中普通表(行存表、列存表)的数据文件是否损坏。

    ANALYZE非临时表不能在一个匿名块、事务块、函数或存储过程内被执行。支持存储过程中ANALYZE临时表,不支持统计信息回滚操作。

    ANALYZE VERIFY 操作处理的大多为异常场景检测需要使用RELEASE版本。ANALYZE VERIFY 场景不触发远程读,因此远程读参数不生效。对于关键系统表出现错误被系统检测出页面损坏时,将直接报错不再继续检测。

    • 收集表的统计信息。

    • 收集分区表的统计信息。

      1. [ table_name [ ( column_name [, ...] ) ] ]
      2. PARTITION ( patrition_name ) ;
    • 收集多列统计信息

      1. {ANALYZE | ANALYSE} [ VERBOSE ]
      2. table_name (( column_1_name, column_2_name [, ...] ));
    • 检测当前库的数据文件

      1. {ANALYZE | ANALYSE} VERIFY {FAST|COMPLETE} table_name PARTITION {(patrition_name)}[CASCADE];

    说明:

    支持对表的单独分区进行检测操作,但不支持对索引表index使用CASCADE操作。

    • VERBOSE

      启用显示进度信息。

    • table_name

      需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。

      对于ANALYZE收集统计信息,目前仅支持行存表、列存表。

      取值范围:已有的表名。

    • column_name,column_1_name,column_2_name

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

      取值范围:已有的列名。

    • partition_name

      取值范围:表的某一个分区名。

    • index_name

      需要分析的特定索引表的表名(可能会带模式名)。

      取值范围:已有的表名。

    • FAST|COMPLETE

      对于行存表,FAST模式下主要对于行存表的CRC和page header进行校验,如果校验失败则会告警; 而COMPLETE模式下,则主要对行存表的指针、tuple进行解析校验。 对于列存表,FAST模式下主要对于列存表的CRC和magic进行校验,如果校验失败则会告警; 而COMPLETE模式下,则主要对列存表的CU进行解析校验。

    • CASCADE

      CASCADE模式下会对当前表的所有索引进行检测处理。

    — 创建表。

    — 创建分区表。

    1. postgres=# CREATE TABLE customer_par
    2. WR_RETURNED_DATE_SK INTEGER ,
    3. WR_RETURNED_TIME_SK INTEGER ,
    4. WR_REFUNDED_CUSTOMER_SK INTEGER
    5. )
    6. PARTITION BY RANGE(WR_RETURNED_DATE_SK)
    7. (
    8. PARTITION P2 VALUES LESS THAN(2452640),
    9. PARTITION P3 VALUES LESS THAN(2453000),
    10. PARTITION P4 VALUES LESS THAN(MAXVALUE)
    11. )
    12. ENABLE ROW MOVEMENT;

    — 使用ANALYZE语句更新统计信息。

    1. postgres=# ANALYZE customer_info;
    2. postgres=# ANALYZE customer_par;

    — 使用ANALYZE VERBOSE语句更新统计信息,并输出表的相关信息。

    1. postgres=# DROP TABLE customer_par;