公司網(wǎng)站設(shè)計(jì)很好的網(wǎng)絡(luò)營(yíng)銷模式案例
統(tǒng)計(jì)信息
統(tǒng)計(jì)信息簡(jiǎn)介?
Doris 查詢優(yōu)化器使用統(tǒng)計(jì)信息來(lái)確定查詢最有效的執(zhí)行計(jì)劃。Doris 維護(hù)的統(tǒng)計(jì)信息包括表級(jí)別的統(tǒng)計(jì)信息和列級(jí)別的統(tǒng)計(jì)信息。
表統(tǒng)計(jì)信息:
信息 | 描述 |
---|---|
row_count | 表的行數(shù) |
data_size | 表的??(單位 byte) |
update_rows | 收集統(tǒng)計(jì)信息后所更新的行數(shù) |
healthy | 表的健康度 |
update_time | 最近更新的時(shí)間 |
last_analyze_time | 上次收集統(tǒng)計(jì)信息的時(shí)間 |
表的健康度:表示表統(tǒng)計(jì)信息的健康程度。當(dāng)?
update_rows
?大于等于?row_count
?時(shí),健康度為 0;當(dāng)?update_rows
?小于?row_count
?時(shí),健康度為?100 * (1 - update_rows / row_count)
?。
列統(tǒng)計(jì)信息:
信息 | 描述 |
---|---|
row_count | 列的總行數(shù) |
data_size | 列的總?度(單位 byte) |
avg_size_byte | 列的平均?度(單位 bytes) |
ndv | 列 num distinct value |
min | 列最小值 |
max | 列最?值 |
null_count | 列 null 個(gè)數(shù) |
收集統(tǒng)計(jì)信息?
手動(dòng)收集?
?戶通過(guò)?ANALYZE
?語(yǔ)句觸發(fā)手動(dòng)收集任務(wù),根據(jù)提供的參數(shù),收集指定的表或列的統(tǒng)計(jì)信息。
列統(tǒng)計(jì)信息收集語(yǔ)法:
ANALYZE < TABLE | DATABASE table_name | db_name > [ PARTITIONS (partition_name [, ...]) ][ (column_name [, ...]) ][ [ WITH SYNC ] [WITH INCREMENTAL] [ WITH SAMPLE PERCENT | ROWS ] [ WITH PERIOD ] ][ PROPERTIES ("key" = "value", ...) ];
其中:
- table_name: 指定的的目標(biāo)表??梢允??
db_name.table_name
? 形式。 - partition_name: 指定的目標(biāo)分區(qū)(目前只針對(duì)Hive外表)。必須是 ?
table_name
? 中存在的分區(qū),多個(gè)列名稱用逗號(hào)分隔。分區(qū)名樣例:event_date=20230706, nation=CN/city=Beijing - column_name: 指定的目標(biāo)列。必須是 ?
table_name
? 中存在的列,多個(gè)列名稱用逗號(hào)分隔。 - sync:同步收集統(tǒng)計(jì)信息。收集完后返回。若不指定則異步執(zhí)行并返回任務(wù) ID。
- period:周期性收集統(tǒng)計(jì)信息。單位為秒,指定后會(huì)定期收集相應(yīng)的統(tǒng)計(jì)信息。
- sample percent | rows:抽樣收集統(tǒng)計(jì)信息??梢灾付ǔ闃颖壤蛘叱闃有袛?shù)。
全量收集?
收集列統(tǒng)計(jì)信息?
列統(tǒng)計(jì)信息主要包括列的行數(shù)、最大值、最小值、NULL 值個(gè)數(shù)等,通過(guò)?ANALYZE TABLE
?語(yǔ)句進(jìn)行收集。
示例:
- 收集?
example_tbl
?表所有列的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> ANALYZE TABLE stats_test.example_tbl;
+--------+
| job_id |
+--------+
| 51730 |
+--------+
- 收集?
example_tbl
?表?city
,?age
,?sex
?列的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> ANALYZE TABLE stats_test.example_tbl(city, age, sex);
+--------+
| job_id |
+--------+
| 51808 |
+--------+
增量收集?
對(duì)于分區(qū)表,在進(jìn)行全量收集后,如果新增分區(qū)或者刪除分區(qū),可以使用增量收集來(lái)提高統(tǒng)計(jì)信息收集的速度。
使用增量收集時(shí)系統(tǒng)會(huì)自動(dòng)檢查新增的分區(qū)或者已刪除的分區(qū)。有以下三種情形:
- 對(duì)于新增分區(qū),收集新分區(qū)的統(tǒng)計(jì)信息后和歷史統(tǒng)計(jì)信息合并/匯總。
- 對(duì)于已刪除的分區(qū),重新刷新歷史統(tǒng)計(jì)信息。
- 無(wú)新增/刪除的分區(qū),不做任何操作。
增量收集適合類似時(shí)間列這樣的單調(diào)不減列作為分區(qū)的表,或者歷史分區(qū)數(shù)據(jù)不會(huì)更新的表。
注意:
- 直方圖統(tǒng)計(jì)信息不支持增量收集。
- 使用增量收集時(shí),必須保證表存量的統(tǒng)計(jì)信息可用(即其他歷史分區(qū)數(shù)據(jù)不發(fā)生變化),否則會(huì)導(dǎo)致統(tǒng)計(jì)信息有誤差。
示例:
- 增量收集?
example_tbl
?表的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
-- 使用with incremental
mysql> ANALYZE TABLE stats_test.example_tbl WITH INCREMENTAL;
+--------+
| job_id |
+--------+
| 51910 |
+--------+-- 配置incremental
mysql> ANALYZE TABLE stats_test.example_tbl PROPERTIES("incremental" = "true");
+--------+
| job_id |
+--------+
| 51910 |
+--------+
抽樣收集?
在表數(shù)據(jù)量較大時(shí),系統(tǒng)收集統(tǒng)計(jì)信息可能會(huì)比較耗時(shí),可以使用抽樣收集來(lái)提高統(tǒng)計(jì)信息收集的速度。根據(jù)實(shí)際情況指定抽樣的比例或者抽樣的行數(shù)。
示例:
- 抽樣收集?
example_tbl
?表的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
-- 使用with sample rows抽樣行數(shù)
mysql> ANALYZE TABLE stats_test.example_tbl WITH SAMPLE ROWS 5;
+--------+
| job_id |
+--------+
| 52120 |
+--------+-- 使用with sample percent抽樣比例
mysql> ANALYZE TABLE stats_test.example_tbl WITH SAMPLE PERCENT 50;
+--------+
| job_id |
+--------+
| 52201 |
+--------+-- 配置sample.row抽樣行數(shù)
mysql> ANALYZE TABLE stats_test.example_tbl PROPERTIES("sample.rows" = "5");
+--------+
| job_id |
+--------+
| 52279 |
+--------+-- 配置sample.percent抽樣比例
mysql> ANALYZE TABLE stats_test.example_tbl PROPERTIES("sample.percent" = "50");
+--------+
| job_id |
+--------+
| 52282 |
+--------+
同步收集?
一般執(zhí)行?ANALYZE
?語(yǔ)句后系統(tǒng)會(huì)啟動(dòng)異步任務(wù)去收集統(tǒng)計(jì)信息并立刻返回統(tǒng)計(jì)任務(wù) ID。如果想要等待統(tǒng)計(jì)信息收集結(jié)束后返會(huì),可以使用同步收集方式。
示例:
- 抽樣收集?
example_tbl
?表的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
-- 使用with sync
mysql> ANALYZE TABLE stats_test.example_tbl WITH SYNC;-- 配置sync
mysql> ANALYZE TABLE stats_test.example_tbl PROPERTIES("sync" = "true");
自動(dòng)收集?
自動(dòng)收集是指用戶在執(zhí)行?ANALYZE
?語(yǔ)句時(shí),指定?PERIOD
?或者?AUTO
?關(guān)鍵字或者進(jìn)行相關(guān)配置時(shí),系統(tǒng)后續(xù)將自動(dòng)生成任務(wù),進(jìn)行統(tǒng)計(jì)信息的收集。
周期性收集?
周期性收集是指在一定時(shí)間間隔內(nèi),重新收集表相應(yīng)的統(tǒng)計(jì)信息。
示例:
- 周期性(每隔一天)收集?
example_tbl
?表的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
-- 使用with period
mysql> ANALYZE TABLE stats_test.example_tbl WITH PERIOD 86400;
+--------+
| job_id |
+--------+
| 52409 |
+--------+-- 配置period.seconds
mysql> ANALYZE TABLE stats_test.example_tbl PROPERTIES("period.seconds" = "86400");
+--------+
| job_id |
+--------+
| 52535 |
+--------+
管理任務(wù)?
查看統(tǒng)計(jì)任務(wù)?
通過(guò)?SHOW ANALYZE
?來(lái)查看統(tǒng)計(jì)信息收集任務(wù)的信息。
語(yǔ)法如下:
SHOW ANALYZE < table_name | job_id >[ WHERE [ STATE = [ "PENDING" | "RUNNING" | "FINISHED" | "FAILED" ] ] ];
其中:
- table_name:表名,指定后可查看該表對(duì)應(yīng)的統(tǒng)計(jì)任務(wù)信息??梢允??
db_name.table_name
? 形式。不指定時(shí)返回所有統(tǒng)計(jì)任務(wù)信息。 - job_id:統(tǒng)計(jì)信息任務(wù) ID,執(zhí)行?
ANALYZE
?非同步收集統(tǒng)計(jì)信息時(shí)所返回的值。不指定時(shí)返回所有統(tǒng)計(jì)任務(wù)信息。
目前?SHOW ANALYZE
?會(huì)輸出 11 列,具體如下:
列名 | 說(shuō)明 |
---|---|
job_id | 統(tǒng)計(jì)任務(wù) ID |
catalog_name | catalog 名稱 |
db_name | 數(shù)據(jù)庫(kù)名稱 |
tbl_name | 表名稱 |
col_name | 列名稱 |
job_type | 任務(wù)類型 |
analysis_type | 統(tǒng)計(jì)類型 |
message | 任務(wù)信息 |
last_exec_time_in_ms | 上次執(zhí)行時(shí)間 |
state | 任務(wù)狀態(tài) |
schedule_type | 調(diào)度方式 |
在系統(tǒng)中,統(tǒng)計(jì)信息任務(wù)包含多個(gè)子任務(wù),每個(gè)子任務(wù)單獨(dú)收集一列的統(tǒng)計(jì)信息。
示例:
- 查看 ID 為?
20038
?的統(tǒng)計(jì)任務(wù)信息,使用以下語(yǔ)法:
mysql> SHOW ANALYZE 20038
+--------+--------------+----------------------+----------+-----------------------+----------+---------------+---------+----------------------+----------+---------------+
| job_id | catalog_name | db_name | tbl_name | col_name | job_type | analysis_type | message | last_exec_time_in_ms | state | schedule_type |
+--------+--------------+----------------------+----------+-----------------------+----------+---------------+---------+----------------------+----------+---------------+
| 20038 | internal | default_cluster:test | t3 | [col4,col2,col3,col1] | MANUAL | FUNDAMENTALS | | 2023-06-01 17:22:15 | FINISHED | ONCE |
+--------+--------------+----------------------+----------+-----------------------+----------+---------------+---------+----------------------+----------+---------------+
可通過(guò)SHOW ANALYZE TASK STATUS [job_id]
,查看具體每個(gè)列統(tǒng)計(jì)信息的收集完成情況。
mysql> show analyze task status 20038 ;
+---------+----------+---------+----------------------+----------+
| task_id | col_name | message | last_exec_time_in_ms | state |
+---------+----------+---------+----------------------+----------+
| 20039 | col4 | | 2023-06-01 17:22:15 | FINISHED |
| 20040 | col2 | | 2023-06-01 17:22:15 | FINISHED |
| 20041 | col3 | | 2023-06-01 17:22:15 | FINISHED |
| 20042 | col1 | | 2023-06-01 17:22:15 | FINISHED |
+---------+----------+---------+----------------------+----------+
- 查看?
example_tbl
?表的的統(tǒng)計(jì)任務(wù)信息,使用以下語(yǔ)法:
mysql> SHOW ANALYZE stats_test.example_tbl;
+--------+--------------+----------------------------+-------------+-----------------+----------+---------------+---------+----------------------+----------+---------------+
| job_id | catalog_name | db_name | tbl_name | col_name | job_type | analysis_type | message | last_exec_time_in_ms | state | schedule_type |
+--------+--------------+----------------------------+-------------+-----------------+----------+---------------+---------+----------------------+----------+---------------+
| 68603 | internal | default_cluster:stats_test | example_tbl | | MANUAL | INDEX | | 2023-05-05 17:53:27 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | last_visit_date | MANUAL | COLUMN | | 2023-05-05 17:53:26 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | age | MANUAL | COLUMN | | 2023-05-05 17:53:27 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | city | MANUAL | COLUMN | | 2023-05-05 17:53:25 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | cost | MANUAL | COLUMN | | 2023-05-05 17:53:27 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | min_dwell_time | MANUAL | COLUMN | | 2023-05-05 17:53:24 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | date | MANUAL | COLUMN | | 2023-05-05 17:53:27 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | user_id | MANUAL | COLUMN | | 2023-05-05 17:53:25 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | max_dwell_time | MANUAL | COLUMN | | 2023-05-05 17:53:26 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | sex | MANUAL | COLUMN | | 2023-05-05 17:53:26 | FINISHED | ONCE |
- 查看所有的統(tǒng)計(jì)任務(wù)信息,并按照上次完成時(shí)間降序,返回前 3 條信息,使用以下語(yǔ)法:
mysql> SHOW ANALYZE WHERE state = "FINISHED" ORDER BY last_exec_time_in_ms DESC LIMIT 3;
+--------+--------------+----------------------------+-------------+-----------------+----------+---------------+---------+----------------------+----------+---------------+
| job_id | catalog_name | db_name | tbl_name | col_name | job_type | analysis_type | message | last_exec_time_in_ms | state | schedule_type |
+--------+--------------+----------------------------+-------------+-----------------+----------+---------------+---------+----------------------+----------+---------------+
| 68603 | internal | default_cluster:stats_test | example_tbl | age | MANUAL | COLUMN | | 2023-05-05 17:53:27 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | sex | MANUAL | COLUMN | | 2023-05-05 17:53:26 | FINISHED | ONCE |
| 68603 | internal | default_cluster:stats_test | example_tbl | last_visit_date | MANUAL | COLUMN | | 2023-05-05 17:53:26 | FINISHED | ONCE |
+--------+--------------+----------------------------+-------------+-----------------+----------+---------------+---------+----------------------+----------+---------------+
終止統(tǒng)計(jì)任務(wù)?
通過(guò)?KILL ANALYZE
?來(lái)終止正在運(yùn)行的統(tǒng)計(jì)任務(wù)。
語(yǔ)法如下:
KILL ANALYZE job_id;
其中:
- job_id:統(tǒng)計(jì)信息任務(wù) ID。執(zhí)行?
ANALYZE
?非同步收集統(tǒng)計(jì)信息時(shí)所返回的值,也可以通過(guò)?SHOW ANALYZE
?語(yǔ)句獲取。
示例:
- 終止 ID 為 52357 的統(tǒng)計(jì)任務(wù)。
mysql> KILL ANALYZE 52357;
查看統(tǒng)計(jì)信息?
表統(tǒng)計(jì)信息?
暫不可用。
通過(guò)?SHOW TABLE STATS
?來(lái)查看表的總行數(shù)以及統(tǒng)計(jì)信息健康度等信息。
語(yǔ)法如下:
SHOW TABLE STATS table_name [ PARTITION (partition_name) ];
其中:
- table_name: 導(dǎo)入數(shù)據(jù)的目標(biāo)表。可以是 ?
db_name.table_name
? 形式。 - partition_name: 指定的目標(biāo)分區(qū)。必須是 ?
table_name
? 中存在的分區(qū),只能指定一個(gè)分區(qū)。
目前?SHOW TABLE STATS
?會(huì)輸出 6 列,具體如下:
列名 | 說(shuō)明 |
---|---|
row_count | 行數(shù) |
update_rows | 更新的行數(shù) |
data_size | 數(shù)據(jù)大小。單位 byte |
healthy | 健康度 |
update_time | 更新時(shí)間 |
last_analyze_time | 上次收集統(tǒng)計(jì)信息的時(shí)間 |
示例:
- 查看?
example_tbl
?表的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> SHOW TABLE STATS stats_test.example_tbl;
+-----------+-------------+---------+-----------+---------------------+---------------------+
| row_count | update_rows | healthy | data_size | update_time | last_analyze_time |
+-----------+-------------+---------+-----------+---------------------+---------------------+
| 8 | 0 | 100 | 6999 | 2023-04-08 15:40:47 | 2023-04-08 17:43:28 |
+-----------+-------------+---------+-----------+---------------------+---------------------+
- 查看?
example_tbl
?表?p_201701
?分區(qū)的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> SHOW TABLE STATS stats_test.example_tbl PARTITION (p_201701);
+-----------+-------------+---------+-----------+---------------------+---------------------+
| row_count | update_rows | healthy | data_size | update_time | last_analyze_time |
+-----------+-------------+---------+-----------+---------------------+---------------------+
| 4 | 0 | 100 | 2805 | 2023-04-08 11:48:02 | 2023-04-08 17:43:27 |
+-----------+-------------+---------+-----------+---------------------+---------------------+
查看列統(tǒng)計(jì)信息?
通過(guò)?SHOW COLUMN STATS
?來(lái)查看列的不同值數(shù)以及?NULL
?數(shù)量等信息。
語(yǔ)法如下:
SHOW COLUMN [cached] STATS table_name [ (column_name [, ...]) ] [ PARTITION (partition_name) ];
其中:
- cached: 展示當(dāng)前FE內(nèi)存緩存中的統(tǒng)計(jì)信息。
- table_name: 收集統(tǒng)計(jì)信息的目標(biāo)表。可以是 ?
db_name.table_name
? 形式。 - column_name: 指定的目標(biāo)列,必須是 ?
table_name
? 中存在的列,多個(gè)列名稱用逗號(hào)分隔。 - partition_name: 指定的目標(biāo)分區(qū),必須是 ?
table_name
? 中存在的分區(qū),只能指定一個(gè)分區(qū)。
目前?SHOW COLUMN STATS
?會(huì)輸出 10 列,具體如下:
列名 | 說(shuō)明 |
---|---|
column_name | 列名稱 |
count | 列的總行數(shù) |
ndv | 不同值的個(gè)數(shù) |
num_null | 空值的個(gè)數(shù) |
data_size | 列的總?度(單位 bytes) |
avg_size_byte | 列的平均?度(單位 bytes) |
min | 列最小值 |
max | 列最?值 |
示例:
- 查看?
example_tbl
?表所有列的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> SHOW COLUMN STATS stats_test.example_tbl;
+-----------------+-------+------+----------+-------------------+-------------------+-----------------------+-----------------------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min | max |
+-----------------+-------+------+----------+-------------------+-------------------+-----------------------+-----------------------+
| date | 6.0 | 3.0 | 0.0 | 28.0 | 4.0 | '2017-10-01' | '2017-10-03' |
| cost | 6.0 | 6.0 | 0.0 | 56.0 | 8.0 | 2 | 200 |
| min_dwell_time | 6.0 | 6.0 | 0.0 | 28.0 | 4.0 | 2 | 22 |
| city | 6.0 | 4.0 | 0.0 | 54.0 | 7.0 | 'Beijing' | 'Shenzhen' |
| user_id | 6.0 | 5.0 | 0.0 | 112.0 | 16.0 | 10000 | 10004 |
| sex | 6.0 | 2.0 | 0.0 | 7.0 | 1.0 | 0 | 1 |
| max_dwell_time | 6.0 | 6.0 | 0.0 | 28.0 | 4.0 | 3 | 22 |
| last_visit_date | 6.0 | 6.0 | 0.0 | 112.0 | 16.0 | '2017-10-01 06:00:00' | '2017-10-03 10:20:22' |
| age | 6.0 | 4.0 | 0.0 | 14.0 | 2.0 | 20 | 35 |
+-----------------+-------+------+----------+-------------------+-------------------+-----------------------+-----------------------+
- 查看?
example_tbl
?表?p_201701
?分區(qū)的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> SHOW COLUMN STATS stats_test.example_tbl PARTITION (p_201701);
+-----------------+-------+------+----------+--------------------+-------------------+-----------------------+-----------------------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min | max |
+-----------------+-------+------+----------+--------------------+-------------------+-----------------------+-----------------------+
| date | 3.0 | 1.0 | 0.0 | 16.0 | 4.0 | '2017-10-01' | '2017-10-01' |
| cost | 3.0 | 3.0 | 0.0 | 32.0 | 8.0 | 2 | 100 |
| min_dwell_time | 3.0 | 3.0 | 0.0 | 16.0 | 4.0 | 2 | 22 |
| city | 3.0 | 2.0 | 0.0 | 29.0 | 7.0 | 'Beijing' | 'Shenzhen' |
| user_id | 3.0 | 3.0 | 0.0 | 64.0 | 16.0 | 10000 | 10004 |
| sex | 3.0 | 2.0 | 0.0 | 4.0 | 1.0 | 0 | 1 |
| max_dwell_time | 3.0 | 3.0 | 0.0 | 16.0 | 4.0 | 3 | 22 |
| last_visit_date | 3.0 | 3.0 | 0.0 | 64.0 | 16.0 | '2017-10-01 06:00:00' | '2017-10-01 17:05:45' |
| age | 3.0 | 3.0 | 0.0 | 8.0 | 2.0 | 20 | 35 |
+-----------------+-------+------+----------+--------------------+-------------------+-----------------------+-----------------------+
- 查看?
example_tbl
?表?city
,?age
,?sex
?列的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> SHOW COLUMN STATS stats_test.example_tbl(city, age, sex);
+-------------+-------+------+----------+-------------------+-------------------+-----------+------------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min | max |
+-------------+-------+------+----------+-------------------+-------------------+-----------+------------+
| city | 6.0 | 4.0 | 0.0 | 54.0 | 7.0 | 'Beijing' | 'Shenzhen' |
| sex | 6.0 | 2.0 | 0.0 | 7.0 | 1.0 | 0 | 1 |
| age | 6.0 | 4.0 | 0.0 | 14.0 | 2.0 | 20 | 35 |
+-------------+-------+------+----------+-------------------+-------------------+-----------+------------+
- 查看?
example_tbl
?表?p_201701
?分區(qū)?city
,?age
,?sex
?列的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> SHOW COLUMN STATS stats_test.example_tbl(city, age, sex) PARTITION (p_201701);
+-------------+-------+------+----------+--------------------+-------------------+-----------+------------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min | max |
+-------------+-------+------+----------+--------------------+-------------------+-----------+------------+
| city | 3.0 | 2.0 | 0.0 | 29.0 | 7.0 | 'Beijing' | 'Shenzhen' |
| sex | 3.0 | 2.0 | 0.0 | 4.0 | 1.0 | 0 | 1 |
| age | 3.0 | 3.0 | 0.0 | 8.0 | 2.0 | 20 | 35 |
+-------------+-------+------+----------+--------------------+-------------------+-----------+------------+
修改統(tǒng)計(jì)信息?
?戶可以通過(guò)?ALTER
?語(yǔ)句調(diào)整統(tǒng)計(jì)信息。
ALTER TABLE table_name MODIFY COLUMN column_name SET STATS ('stat_name' = 'stat_value', ...) [ PARTITION (partition_name) ];
其中:
- table_name: 刪除統(tǒng)計(jì)信息的目標(biāo)表??梢允?
db_name.table_name
?形式。 - column_name: 指定的目標(biāo)列,必須是?
table_name
?中存在的列,每次只能修改一列的統(tǒng)計(jì)信息。 - stat_name 和 stat_value: 相應(yīng)的統(tǒng)計(jì)信息名稱和統(tǒng)計(jì)信息信息的值,多個(gè)統(tǒng)計(jì)信息逗號(hào)分隔??梢孕薷牡慕y(tǒng)計(jì)信息包括?
row_count
,?ndv
,?num_nulls
,?min_value
,?max_value
,?data_size
。 - partition_name: 指定的目標(biāo)分區(qū)。必須是?
table_name
?中存在的分區(qū),多個(gè)分區(qū)使用逗號(hào)分割。
示例:
- 修改?
example_tbl
?表?age
?列?row_count
?統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> ALTER TABLE stats_test.example_tbl MODIFY COLUMN age SET STATS ('row_count'='6001215');
mysql> SHOW COLUMN STATS stats_test.example_tbl(age);
+-------------+-----------+------+----------+-----------+---------------+------+------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min | max |
+-------------+-----------+------+----------+-----------+---------------+------+------+
| age | 6001215.0 | 0.0 | 0.0 | 0.0 | 0.0 | N/A | N/A |
+-------------+-----------+------+----------+-----------+---------------+------+------+
- 修改?
example_tbl
?表?age
?列?row_count
,?num_nulls
,?data_size
?統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> ALTER TABLE stats_test.example_tbl MODIFY COLUMN age SET STATS ('row_count'='6001215', 'num_nulls'='2023', 'data_size'='600121522');
mysql> SHOW COLUMN STATS stats_test.example_tbl(age);
+-------------+-----------+------+----------+-----------+---------------+------+------+
| column_name | count | ndv | num_null | data_size | avg_size_byte | min | max |
+-------------+-----------+------+----------+-----------+---------------+------+------+
| age | 6001215.0 | 0.0 | 2023.0 | 600121522 | 0.0 | N/A | N/A |
+-------------+-----------+------+----------+-----------+---------------+------+------+
刪除統(tǒng)計(jì)信息?
?戶通過(guò)?DROP
?語(yǔ)句刪除統(tǒng)計(jì)信息,根據(jù)提供的參數(shù),刪除指定的表、分區(qū)或列的統(tǒng)計(jì)信息。刪除時(shí)會(huì)同時(shí)刪除列統(tǒng)計(jì)信息和列直方圖信息。
語(yǔ)法:
DROP [ EXPIRED ] STATS [ table_name [ (column_name [, ...]) ] ];
其中:
- table_name: 要?jiǎng)h除統(tǒng)計(jì)信息的目標(biāo)表??梢允??
db_name.table_name
? 形式。 - column_name: 指定的目標(biāo)列。必須是 ?
table_name
? 中存在的列,多個(gè)列名稱用逗號(hào)分隔。 - expired:統(tǒng)計(jì)信息清理。不能指定表,會(huì)刪除系統(tǒng)中無(wú)效的統(tǒng)計(jì)信息以及過(guò)期的統(tǒng)計(jì)任務(wù)信息。
示例:
- 清理統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> DROP EXPIRED STATS;
- 刪除?
example_tbl
?表的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> DROP STATS stats_test.example_tbl;
- 刪除?
example_tbl
?表?city
,?age
,?sex
?列的統(tǒng)計(jì)信息,使用以下語(yǔ)法:
mysql> DROP STATS stats_test.example_tbl(city, age, sex);
刪除Analyze Job?
用于根據(jù)job id刪除自動(dòng)/周期Analyze作業(yè)
DROP ANALYZE JOB [JOB_ID]
配置項(xiàng)?
conf | comment | default value |
---|---|---|
statistics_sql_parallel_exec_instance_num | 控制每個(gè)統(tǒng)計(jì)信息收集SQL在BE側(cè)的并發(fā)實(shí)例數(shù)/pipeline task num | 1 |
statistics_sql_mem_limit_in_bytes | 控制每個(gè)統(tǒng)計(jì)信息SQL可占用的BE內(nèi)存 | 2L?1024?1024 * 1024 (2GiB) |
statistics_simultaneously_running_task_num | 通過(guò)ANALYZE TABLE[DATABASE] 提交異步作業(yè)后,可同時(shí)analyze的列的數(shù)量,所有異步任務(wù)共同受到該參數(shù)約束 | 5 |
analyze_task_timeout_in_minutes | AnalyzeTask執(zhí)行超時(shí)時(shí)間 | 12 hours |
stats_cache_size | 統(tǒng)計(jì)信息緩存的實(shí)際內(nèi)存占用大小高度依賴于數(shù)據(jù)的特性,因?yàn)樵诓煌臄?shù)據(jù)集和場(chǎng)景中,最大/最小值的平均大小和直方圖的桶數(shù)量會(huì)有很大的差異。此外,JVM版本等因素也會(huì)對(duì)其產(chǎn)生影響。下面給出統(tǒng)計(jì)信息緩存在包含100000個(gè)項(xiàng)目時(shí)所占用的內(nèi)存大小。每個(gè)項(xiàng)目的最大/最小值的平均長(zhǎng)度為32,列名的平均長(zhǎng)度為16,統(tǒng)計(jì)信息緩存總共占用了61.2777404785MiB的內(nèi)存。強(qiáng)烈不建議分析具有非常大字符串值的列,因?yàn)檫@可能導(dǎo)致FE內(nèi)存溢出。 | 100000 |
常見(jiàn)問(wèn)題?
ANALYZE WITH SYNC 執(zhí)行失敗:Failed to analyze following columns...?
SQL執(zhí)行時(shí)間受query_timeout
會(huì)話變量控制,該變量默認(rèn)值為300秒,ANALYZE DATABASE/TABLE
等語(yǔ)句通常耗時(shí)較大,很容易超過(guò)該時(shí)間限制而被cancel,建議根據(jù)ANALYZE對(duì)象的數(shù)據(jù)量適當(dāng)增大query_timeout
的值。
ANALYZE提交報(bào)錯(cuò):Stats table not available...?
執(zhí)行ANALYZE時(shí)統(tǒng)計(jì)數(shù)據(jù)會(huì)被寫入到內(nèi)部表__internal_schema.column_statistics
中,FE會(huì)在執(zhí)行ANALYZE前檢查該表tablet狀態(tài),如果存在不可用的tablet則拒絕執(zhí)行任務(wù)。出現(xiàn)該報(bào)錯(cuò)請(qǐng)檢查BE集群狀態(tài)。
大表ANALYZE失敗?
由于ANALYZE能夠使用的資源受到比較嚴(yán)格的限制,對(duì)一些大表的ANALYZE操作有可能超時(shí)或者超出BE內(nèi)存限制。這些情況下,建議使用?ANALYZE ... WITH SAMPLE...
。此外對(duì)于動(dòng)態(tài)分區(qū)表的場(chǎng)景,強(qiáng)烈建議使用ANALYZE ... WITH INCREMENTAL...
,該語(yǔ)句僅增量的處理數(shù)據(jù)更新的分區(qū),能夠避免大量的重復(fù)計(jì)算從而提高效率。