Heim  >  Artikel  >  Datenbank  >  什么是统计信息以及收集查看方法

什么是统计信息以及收集查看方法

WBOY
WBOYOriginal
2016-06-07 16:06:521335Durchsuche

概念: oracle的统计信息:存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息。CBO会利用这些统计信息来计算各条路径的成本。 分类: 表、索引、列、系统、数据字典、内部对象的统计信息 收集统计信息: ANALYZE 命令和DBMS_STATS包。表、

概念: oracle的统计信息:存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息。CBO会利用这些统计信息来计算各条路径的成本。
分类: 表、索引、列、系统、数据字典、内部对象的统计信息
收集统计信息: ANALYZE 命令和DBMS_STATS包。表、索引、列、数据字典都可以用两个。系统、内部对象只能用DBMS_STATS。
1、ANALYZE analyze table PROC_PROGRESS_LOG delete statistics; --删除统计信息 analyze table PROC_PROGRESS_LOG estimate statistics sample 15 percent for table ; --估算模式,采样比例15%(估算结果和实际结果不一定会完全匹配) analyze table PROC_PROGRESS_LOG compute statistics;--计算模式
select * from dba_tables where table_name = 'PROC_PROGRESS_LOG'; --查看表相关信息 select * from USER_TAB_COLUMNS where TABLE_NAME='PROC_PROGRESS_LOG'--查看列相关信息
analyze table PROC_SMCS compute statistics for columns service_id , channel_id ; --对列进行计算模式的统计信息收集 执行完成之后,service_id , channel_id 确实已经有统计信息了,但是PROC_SMCS 表中的统计信息将会被抹掉。 也就是说,对同一个对象而言,新执行的analyze 命令会抹掉之前的analyze 的结果。
如果想一次性以计算模式收集表、表上的列、和表上的索引的统计信息,执行: analyze table PROC_PROGRESS_LOG compute statistics;
用DBMS_STATS包收集统计信息 官方推荐,oracle 8.1.5之后才有,看成是analyze的增强版 1、GATHER_TABLE_STATS:用于收集目标表、目标表的列和索引的统计信息。 2、GATHER_INDEX_STATS:收集索引的。 3、GATHER_SCHEMA_STATS:收集指定schema下的所有对象的。 4、GATHER_DATABASE_STATS:收集全库所有对象的。
exec dbms_stats.gather_table_stats(ownname => 'TEST',tabname=>'PROC_LETTER',estimate_percent => 15,method_opt => 'FOR TABLE',cascade => false); 只有PROC_LETTER表有统计信息,列和索引没有。 method_opt => 'FOR TABLE' 只适合11g以上版本,10以下的,还会收集列和索引的信息。 如果采用计算模式,将estimate_percent => 15 设置成100或者NULL
exec dbms_stats.gather_table_stats(ownname => 'TEST',tabname=>'PROC_LETTER',estimate_percent => 100,method_opt => 'FOR columns size 1 service_id channel_id',cascade => false); 以计算模式收集 service_id channel_id的统计信息,同时PROC_LETTER表上也会有统计信息。 DBMS_STATS做不到只收集列的统计信息而不收集表的统计信息。
exec dbms_stats.delete_table_stats(ownname => 'TEST' , tabname => 'PROC_LETTER'); 删除统计信息。
exec dbms_stats.gather_table_stats(ownname => 'TEST',tabname=>'PROC_LETTER',estimate_percent => 100,cascade => false); 一次性统计表、列、索引信息。
analyze 和 dbms_stats的区别: 1、analyze 不能正确收集分区表的统计信息,而dbms_stats可以。 2、analyze 不能并行收集统计信息,而dbms_stats可以。 exec dbms_stats.gather_table_stats(ownname => 'TEST',tabname=>'PROC_LETTER',estimate_percent => 100,cascade => false,degree=4); --并行度为4 3、dbms_stats不能收集与CBO无关的额外信息,如行迁移/行链接的数量、校验表和索引的结构信息。 analyze table XXX list chained rows into YYY --分析收集行迁移/行链接的数量 analyze index XXX validate structure 分析索引的结构
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn