No.2.1_8 Oracle 执行计划之2_统计信息(Statistic)
程序员文章站
2022-06-24 16:45:30
Oralce统计信息Statistic简介 ,收集统计信息的两种方法 DBMS_STATS ,ANALYZE...
相关链接
- 【官】142 DBMS_STATS
- 1.CSDN_GroupiesM 笔记整理
- 2.如何找到Oralce存储过程——官方文档
- 3. Oracle执行计划之2_统计信息(Statistic)(本文)
- 4. 142-10 SYS.DBMS_STATS.delete_column_stats
- 5. 142-12 SYS.DBMS_STATS.delete_database_stats
- 6. 142-15 SYS.DBMS_STATS.delete_index_stats
- 7. 142-18 SYS.DBMS_STATS.delete_schema_stats
- 8. 142-21 SYS.DBMS_STATS.delete_table_stats
- 9. 142-39 SYS.DBMS_STATS.gather_database_stats
- 10. 142-42 SYS.DBMS_STATS.gather_index_stats
- 11. 142-43 SYS.DBMS_STATS.gather_schema_stats
- 12. 142-45 SYS.DBMS_STATS.gather_table_stats
- 13. 142-87 SYS.DBMS_STATS.set_column_stats
- 14. 142-90 SYS.DBMS_STATS.set_index_stats
- 15. 142-95 SYS.DBMS_STATS.set_table_stats
一、统计信息(Statistic)
统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。例如,表的行数,块数,平均每行的大小,索引的 leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息。
根据这些统计信息, optimizer (优化器)可以选择更好的执行计划。从 Oracle11G 开始,数据库统计信息的自动收集被整合到自动维护任务中,基本上都是默认自动执行的,也满足大多数情形下的运行需求,不过也可以手动收集。
- 使用 gather_stats_job 自动收集是在创建数据库时自动创建的,并由调度程序进行管理。他会收集数据库中优化程序统计信息缺失或已过时的所有对象的统计信息。
- 使用
dbms_stats
程序包手动收集收集的是系统统计信息。主要提供了搜集(gather),删除(delete),导出(export),导入(import),修改(set)统计信息的方法。说起 dbms_stats 那就有必要说说analyze 命令。 dbms_stats
与analyze
的区别:dbms_stats 是 Oracle9i 及后续版本中用于收集统计信息的包,虽然 analyze 命令也一直可以使用,但是现在已经不推荐使用 analyze 命令来收集统计信息,而是使用 dbms_stats。两者之间有很大的不同,dbms_stats 能正确收集分区表的统计信息,也就是说能够收集 global statistic,而 analyze 只能收集最低层次对象的统计信息,然后推导和汇总出高一级对象的统计信息,如果分区表只会收集分区统计信息,然后再汇总出所有分区的统计信息,得到表一级的统计信息。- 建议使用
DBMS_STATS
,Analyze
基本不用了。 - 听说还有DBMS_DDL、DBMS_UTILITY也可以收集某些统计信息,但没有深入研究。
二、统计信息内容
统计信息存储位置(不完统计)
表的统计信息:
包含表行数,使用的块数,空的块数,块的使用率,行迁移和链接的数量,pctfree,pctused的数据,行的平均大小
索引列的统计信息:
包含索引的深度(B-Tree的级别),索引叶级的块数量,集群因子(clustering_factor), 唯一值的个数。
列的统计信息 :
包含 唯一的值个数,列最大小值,密度(选择率),数据分布(直方图信息),NUll值个数
搜集的统计信息同时存储在以下三种视图下:【DBA_】 【ALL_】【USER_】
Type 种类 |
Description 英文描述 |
Translation 中文描述 |
StoreView 存储视图 |
Seri 序号 |
StoreColumn 存储列 |
---|---|---|---|---|---|
表统计信息 table statistics |
average row length | 平均行的长度 | ALL_TABLES | 7 | AVG_ROW_LEN |
number of rows | 行数量 | ALL_TABLES | 20 | NUM_ROWS | |
number of blocks | block数量 | ALL_TABLES | 21 | BLOCKS | |
- | ALL_TABLES | 23 | AVG_SPACE 数据块中 平均使用空间 |
||
ALL_TABLES | 24 | CHAIN_CNT 表中行连接 和行迁移的数量 |
|||
列统计信息 column statistics |
number of distinct values (ndv) in column | 列中distinct的值 | ALL_TAB_COLUMNS | 14 | NUM_DISTINCT |
number of nulls in column | 列中null的值 | ALL_TAB_COLUMNS | 18 | NUM_NULLS | |
data distribution (histogram) | 数据分布 | ALL_TAB_COLUMNS | 15 | LOW_VALUE 列上最小值 |
|
ALL_TAB_COLUMNS | 16 | HIGH_VALUE 列上最大值 |
|||
ALL_TAB_COLUMNS | 17 | DENSITY 密度 |
|||
ALL_TAB_COLUMNS | 19 | NUM_BUCKETS 桶数 |
|||
ALL_TAB_COLUMNS | 26 | AVG_COL_LEN 列平均字节长度 |
|||
ALL_TAB_COLUMNS | 31 | HISTOGRAM 直方图类型 |
|||
索引统计信息 index statistics |
levels | 叶块在B-TREE中层级 | USER_INDEXES | 24 | BLEVEL |
number of leaf blocks | 叶块数量 | USER_INDEXES | 25 | LEAF_BLOCKS |
|
- | USER_INDEXES | 26 | DISTINCT_KEYS 索引DISTINCT后个数 |
||
USER_INDEXES | 27 | AVG_LEAF_BLOCKS_PER_KEY 存放一个键值的平均叶块数 = LEAF_BLOCKS / DISTINCT_KEYS = 25 / 26 |
|||
USER_INDEXES | 28 | AVG_DATA_BLOCKS_PER_KEY 单个索引引用的平均数据块数 = CLUSTERING_FACTOR / DISTINCT_KEYS = 29 / 26 |
|||
clustering factor | 集群因子 熵-混乱程度 |
USER_INDEXES | 29 | CLUSTERING_FACTOR row存储的越有序,clustering factor的值越低 |
|
系统统计信息 system statistics |
i/o performance and utilization | io性能和利用率 | |||
cpu performance and utilization | cpu的性能和利用率 |
20/09/14
M
本文地址:https://blog.csdn.net/qq_43529621/article/details/108576302
上一篇: 【计组】3.5 主存提速