Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[doc](stats) Add description for some new configure option in stats related docs #22723

Merged
merged 1 commit into from
Aug 10, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions docs/zh-CN/docs/query-acceleration/statistics.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,6 @@ mysql> SELECT * FROM stats_test.example_tbl;

列统计信息主要包括列的行数、最大值、最小值、NULL 值个数等,通过 `ANALYZE TABLE` 语句进行收集。

执行 SQL 语句时,优化器在大多数情况下只会用到部分列(例如, `WHERE`、`JOIN`、`ORDER BY`、`GROUP BY` 子句中出现的列)的统计信息。如果一个表有很多列,收集所有列的统计信息会有较大的开销。为了降低开销,可以只收集特定列的统计信息供优化器使用。

示例:

- 收集 `example_tbl` 表所有列的统计信息,使用以下语法:
Expand Down Expand Up @@ -222,8 +220,6 @@ mysql> ANALYZE TABLE stats_test.example_tbl(city, age, sex);

列直方图信息用于描述列分布的情况,它将数据根据大小分成若干个区间(桶),并使用简单的统计量来表示每个区间中数据的特征。通过 `ANALYZE TABLE` 语句配合 `WITH HISTOGRAM` 进行收集。

和收集普通统计信息一样,可以指定列来收集其直方图信息。相比普通统计信息,收集直方图信息耗时更长,所以为了降低开销,我们可以只收集特定列的直方图信息供优化器使用。

示例:

- 收集 `example_tbl` 表所有列的直方图,使用以下语法:
Expand Down Expand Up @@ -936,15 +932,27 @@ DROP ANALYZE JOB [JOB_ID]

## Full auto analyze

用户可以使用选项 `enable_full_auto_analyze` 来决定是否启用Full auto analyze。如果启用,Doris会自动分析除了一些内部数据库(如`information_db`等)之外的所有数据库,并忽略AUTO/PERIOD作业。默认情况下,该选项为true。
用户可以使用选项 `enable_full_auto_analyze` 来决定是否启用Full auto analyze。如果启用,Doris会自动分析除了一些内部数据库(如`information_db`等)之外的所有数据库,并忽略AUTO作业。默认情况下,该选项为true。

## Other ANALYZE configuration item

| conf | comment | default value |
|---------------------------------------------------------|---------------------------------------------------------|--------------------------------|
| statistics_sql_parallel_exec_instance_num | 控制每个统计信息收集SQL在BE侧的并发实例数/pipeline task num | 1 |
| statistics_sql_mem_limit_in_bytes | 控制每个统计信息SQL可占用的BE内存 | 2L * 1024 * 1024 * 1024 (2GiB) |
| statistics_simultaneously_running_task_num | 可并发执行的AnalyzeTask数量 | 10 |
| analyze_task_timeout_in_minutes | AnalyzeTask执行超时时间 | 2hours |
| full_auto_analyze_start_time/full_auto_analyze_end_time | Full auto analyze 执行时间范围,该时间段之外的时间不会触发full auto analyze | 00:00:00-23:59:59| |
|stats_cache_size| 统计信息缓存的实际内存占用大小高度依赖于数据的特性,因为在不同的数据集和场景中,最大/最小值的平均大小和直方图的桶数量会有很大的差异。此外,JVM版本等因素也会对其产生影响。在这里,我将给出统计信息缓存在包含10_0000个项目时所占用的内存大小。每个项目的最大/最小值的平均长度为32,列名的平均长度为16,并且每个列都有一个具有128个桶的直方图。在这种情况下,统计信息缓存总共占用了911.954833984MiB的内存。如果没有直方图,统计信息缓存总共占用了61.2777404785MiB的内存。强烈不建议分析具有非常大字符串值的列,因为这可能导致FE内存溢出(OOM)。 | 10_0000 |
| conf | comment | default value |
|---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------|
| statistics_sql_parallel_exec_instance_num | 控制每个统计信息收集SQL在BE侧的并发实例数/pipeline task num | 1 |
| statistics_sql_mem_limit_in_bytes | 控制每个统计信息SQL可占用的BE内存 | 2L * 1024 * 1024 * 1024 (2GiB) |
| statistics_simultaneously_running_task_num | 通过`ANALYZE TABLE[DATABASE]`提交异步作业后,可同时analyze的列的数量,所有异步任务共同受到该参数约束 | 5 |
| analyze_task_timeout_in_minutes | AnalyzeTask执行超时时间 | 12 hours |
| full_auto_analyze_start_time/full_auto_analyze_end_time | Full auto analyze 执行时间范围,该时间段之外的时间不会触发full auto analyze | 00:00:00-02:00:00 | |
|stats_cache_size| 统计信息缓存的实际内存占用大小高度依赖于数据的特性,因为在不同的数据集和场景中,最大/最小值的平均大小和直方图的桶数量会有很大的差异。此外,JVM版本等因素也会对其产生影响。在这里,我将给出统计信息缓存在包含10_0000个项目时所占用的内存大小。每个项目的最大/最小值的平均长度为32,列名的平均长度为16,并且每个列都有一个具有128个桶的直方图。在这种情况下,统计信息缓存总共占用了911.954833984MiB的内存。如果没有直方图,统计信息缓存总共占用了61.2777404785MiB的内存。强烈不建议分析具有非常大字符串值的列,因为这可能导致FE内存溢出(OOM)。 | 10_0000 |
|full_auto_analyze_simultaneously_running_task_num| 控制并发执行的full auto analyze | 5 |
|parallel_sync_analyze_task_num| 每次通过`ANALYZE...WITH SYNC`提交同步作业时,可同时analyze的列的数量 | 2 |

## 常见问题

### ANALYZE WITH SYNC 执行失败:Failed to analyze following columns...

SQL执行时间受`query_timeout`会话变量控制,该变量默认值为300秒,`ANALYZE DATABASE/TABLE`等语句通常耗时较大,很容易超过该时间限制而被cancel,建议根据ANALYZE对象的数据量适当增大`query_timeout`的值。

### ANALYZE提交报错:Stats table not available...

执行ANALYZE时统计数据会被写入到内部表`__internal_schema.column_statistics`中,FE会在执行ANALYZE前检查该表tablet状态,如果存在不可用的tablet则拒绝执行任务。出现该报错请检查BE集群状态。
Loading