ANALYZE TABLE
ANALYZE TABLE 用于创建手动统计信息收集任务,用于收集 CBO 统计信息。 默认情况下,手动收集是同步操作。 您也可以将其设置为异步操作。 在异步模式下,运行 ANALYZE TABLE 后,系统会立即返回此语句是否成功。 但是,收集任务将在后台运行,您无需等待结果。 您可以通过运行 SHOW ANALYZE STATUS 来检查任务的状态。 异步收集适用于数据量大的表,而同步收集适用于数据量小的表。
手动收集任务在创建后仅运行一次。 您无需删除手动收集任务。
该语句从 v2.4 版本开始支持。
手动收集基本统计信息
有关基本统计信息的更多信息,请参阅收集 CBO 统计信息。
语法
ANALYZE [FULL|SAMPLE] TABLE tbl_name (col_name [,col_name])
[WITH SYNC | ASYNC MODE]
PROPERTIES (property [,property])
参数描述
-
收集类型
- FULL:表示全量收集。
- SAMPLE:表示采样收集。
- 如果未指定收集类型,则默认使用完全收集。
-
col_name
:从中收集统计信息的列。用逗号 (,
) 分隔多个列。如果未指定此参数,则收集整个表。 -
[WITH SYNC | ASYNC MODE]: 指定手动收集任务是以同步模式还是异步模式运行。 如果未指定此参数,则默认使用同步收集。
-
PROPERTIES
:自定义参数。 如果未指定PROPERTIES
,则使用fe.conf
文件中的默认设置。 实际使用的属性可以通过 SHOW ANALYZE STATUS 的输出中的Properties
列查看。
PROPERTIES | 类型 | 默认值 | 描述 |
---|---|---|---|
statistic_sample_collect_rows | INT | 200000 | 抽样收集的最小行数。 如果参数值超过表中实际的行数,则执行完全收集。 |
示例
示例 1:手动完全收集
-- Manually collect full stats of a table using default settings.
ANALYZE TABLE tbl_name;
-- Manually collect full stats of a table using default settings.
ANALYZE FULL TABLE tbl_name;
-- Manually collect stats of specified columns in a table using default settings.
ANALYZE TABLE tbl_name(c1, c2, c3);
示例 2:手动抽样收集
-- Manually collect partial stats of a table using default settings.
ANALYZE SAMPLE TABLE tbl_name;
-- Manually collect stats of specified columns in a table, with the number of rows to collect specified.
ANALYZE SAMPLE TABLE tbl_name (v1, v2, v3) PROPERTIES(
"statistic_sample_collect_rows" = "1000000"
);
手动收集直方图
有关直方图的更多信息,请参阅收集 CBO 统计信息。
语法
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON col_name [, col_name]
[WITH SYNC | ASYNC MODE]
[WITH N BUCKETS]
PROPERTIES (property [,property]);
参数描述
-
col_name
:从中收集统计信息的列。 使用逗号 (,
) 分隔多个列。 如果未指定此参数,则收集整个表。 此参数是直方图所必需的。 -
[WITH SYNC | ASYNC MODE]: 指定手动收集任务是以同步模式还是异步模式运行。 如果未指定此参数,则默认使用同步收集。
-
WITH N BUCKETS
:N
是直方图收集的存储桶数。 如果未指定,则使用fe.conf
中的默认值。 -
PROPERTIES:自定义参数。 如果未指定
PROPERTIES
,则使用fe.conf
中的默认设置。 实际使用的属性可以通过 SHOW ANALYZE STATUS 的输出中的Properties
列查看。
PROPERTIES | 类型 | 默认值 | 描述 |
---|---|---|---|
statistic_sample_collect_rows | INT | 200000 | 要收集的最小行数。 如果参数值超过表中实际的行数,则执行完全收集。 |
histogram_buckets_size | LONG | 64 | 直方图的默认存储桶数。 |
histogram_mcv_size | INT | 100 | 直方图的最常见值 (MCV) 的数量。 |
histogram_sample_ratio | FLOAT | 0.1 | 直方图的采样率。 |
histogram_max_sample_row_count | LONG | 10000000 | 要收集的直方图的最大行数。 |
要为直方图收集的行数由多个参数控制。 它是 statistic_sample_collect_rows
和表行计数 * histogram_sample_ratio
之间的较大值。 该数字不能超过 histogram_max_sample_row_count
指定的值。 如果超过该值,则 histogram_max_sample_row_count
优先。
示例
-- Manually collect histograms on v1 using the default settings.
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON v1;
-- Manually collect histograms on v1 and v2, with 32 buckets, 32 MCVs, and 50% sampling ratio.
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON v1,v2 WITH 32 BUCKETS
PROPERTIES(
"histogram_mcv_size" = "32",
"histogram_sample_ratio" = "0.5"
);
参考
SHOW ANALYZE STATUS:查看手动收集任务的状态。
KILL ANALYZE:取消正在运行的手动收集任务。
有关为 CBO 收集统计信息的更多信息,请参见为 CBO 收集统计信息。