收集统计信息(一)

Oracel 统计信息收集 针对不同的局点,以及机型性能,业务定时任务影响,数据量大小,有时需要进行调整,错开高峰期,防止对业务产生冲突;--如下语句可以查询自动统计信息是否打开,需要这三个语句查出来的所有状态都是enable。--查看表或索引的统计信息是否需更新,如果行数相差很多,则该表需要更新统计信息。---查询表数据量变化多少,Oracle的角度超过0.1 都需要统计信息更新。--通过如下语句可以查询任务执行历史信息。--查询最近7天的统计信息任务执行历史。--收集没有分析过的表的统计信息。2.1 收集数据表的统计信息。 阅读详情
分析和收集统计信息
收集统计信息对于CBO来说是非常重要的,我们通过下面的列子来说明
1、创建测试环境
1)创建测试表
SQL> create table t as select * from dba_objects;
 
Table created
2)创建索引

SQL> create index ind_t_id on t(object_id);
 
Index created

3)查看表相关信息
SQL> select a.NUM_ROWS,a.AVG_ROW_LEN,a.BLOCKS,a.LAST_ANALYZED from user_tables a where a.TABLE_NAME='T';
 
  NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
---------- ----------- ---------- -------------
4)查看表相关信息
SQL> select b.blevel,b.leaf_blocks,b.distinct_keys,b.last_analyzed  from user_indexes b where b.table_name='T';
 
    BLEVEL LEAF_BLOCKS DISTINCT_KEYS LAST_ANALYZED
---------- ----------- ------------- -------------
         1         112         50824 2011/12/9 16:
神马情况,怎么索引里面看到东西呢,再来一次,还是分析了,我去。再试一种方案

2、创建测试表

1)创建测试环境

SQL> drop table t;
 
Table dropped
 
SQL> create table t as select * from dba_objects where 1=2;
 
Table created
 
SQL> create index ind_t_id on t(object_id);
 
Index created
 
SQL> insert into t select * from dba_objects;
 
50825 rows inserted
 
SQL> commit;
 
Commit complete

2)查看相关信息

SQL> select a.NUM_ROWS,a.AVG_ROW_LEN,a.BLOCKS,a.LAST_ANALYZED from user_tables a where a.TABLE_NAME='T';
 
  NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
---------- ----------- ---------- -------------
 
SQL> select b.blevel,b.leaf_blocks,b.distinct_keys,b.last_analyzed  from user_indexes b where b.table_name='T';
 
    BLEVEL LEAF_BLOCKS DISTINCT_KEYS LAST_ANALYZED
---------- ----------- ------------- -------------
 这个才是正常的执行步骤。
 
 3、收集统计信息
 SQL> exec dbms_stats.gather_table_stats(user,'t',cascade => true);
 
PL/SQL procedure successfully completed

SQL> select a.NUM_ROWS,a.AVG_ROW_LEN,a.BLOCKS,a.LAST_ANALYZED from user_tables a where a.TABLE_NAME='T';
 
  NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
---------- ----------- ---------- -------------
     50825          93        748 2011/12/9 16:
 
SQL> select b.blevel,b.leaf_blocks,b.distinct_keys,b.last_analyzed  from user_indexes b where b.table_name='T';
 
    BLEVEL LEAF_BLOCKS DISTINCT_KEYS LAST_ANALYZED
---------- ----------- ------------- -------------
         1         181         50825 2011/12/9 16:
 
 3、直方图
 直方图是数据分析当中的一个内容,它对CBO的影响非常大。
 dbms_stats包对段表分析有三个层次:
 * 表自身分析
    包括表中的行数、数据块数、行长等信息。
 * 列的分析
    包括列值的重复数、列上的空值、数据在列上的分布情况。
 * 索引的分析
    包括索引叶块的数量、索引的深度、索引的聚合因子等。
 直方图单指的是第二项的最后一种(数据在列上的分布情况)。oracle做直方图的时候,会将要分析的列上的数据分成很多数量相同的部分,每一个部分称为一个bucket
 这样CBO就非常容易的知道这个列上的数值的分布情况,对于数据分布非常倾斜的表,做直方图是非常有用的。
 举例说明

SQL> drop table t;
 
Table dropped
 
SQL> create table t as select 1 id,a.OBJECT_NAME name from all_objects a;
 
Table created
 
SQL> update t set id=99 where rownum=1;
 
1 row updated
 
SQL> create index ind_t_id on t(id);
 
Index created
 
SQL> exec dbms_stats.gather_table_stats(user,'T',cascade => true);
 
PL/SQL procedure successfully completed

我们创建了一个表,它的id字段数值严重倾斜,除了一条99以外,其他全部是1。默认情况下dbms_stats会对所有的列做直方图分析,可以从这个视图上查到相关的信息:
SQL> desc user_histograms;
Name                  Type           Nullable Default Comments                                  
--------------------- -------------- -------- ------- -----------------------------------------
TABLE_NAME            VARCHAR2(30)   Y                Table name                                
COLUMN_NAME           VARCHAR2(4000) Y                Column name or attribute of object column
ENDPOINT_NUMBER       NUMBER         Y                Endpoint number                           
ENDPOINT_VALUE        NUMBER         Y                Normalized endpoint value                 
ENDPOINT_ACTUAL_VALUE VARCHAR2(1000) Y                Actual endpoint value   

SQL> select a.TABLE_NAME,a.COLUMN_NAME,a.ENDPOINT_NUMBER,a.ENDPOINT_VALUE  from user_histograms a where a.TABLE_NAME='T';
 
TABLE_NAME                     COLUMN_NAME                                                                      ENDPOINT_NUMBER ENDPOINT_VALUE
------------------------------ -------------------------------------------------------------------------------- --------------- --------------
T                              ID                                                                                             0              1
T                              NAME                                                                                           0 2.450356082873
T                              ID                                                                                             1              1
T                              NAME                                                                                           1 6.251116591181

1)测试id分别为1和99的时候,CBO产生的执行计划的情况
SQL> set autotrace trace
SQL> select * from t where id=1;

50204 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      | 50205 |  1323K|    67   (2)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T    | 50205 |  1323K|    67   (2)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ID"=1)
   
   
SQL> select * from t where id=99;


Execution Plan
----------------------------------------------------------
Plan hash value: 4182247035

----------------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |    27 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T        |     1 |    27 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IND_T_ID |     1 |       |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID"=99)

2)现在我们将直方图信息删除,但保留表和索引的分析信息:
SQL> exec dbms_stats.delete_column_stats(user,'t','id');
 
PL/SQL procedure successfully completed

看看id字段的信息还在不在?

SQL> select a.TABLE_NAME,a.COLUMN_NAME,a.ENDPOINT_NUMBER,a.ENDPOINT_VALUE  from user_histograms a where a.TABLE_NAME='T';
 
TABLE_NAME                     COLUMN_NAME                                                                      ENDPOINT_NUMBER ENDPOINT_VALUE
------------------------------ -------------------------------------------------------------------------------- --------------- --------------
T                              NAME                                                                                           0 2.450356082873
T                              NAME                                                                                           1 6.251116591181

从上面看出id列的统计信息已经不在了。再看看表和索引信息仍然存在。
 
SQL> select a.NUM_ROWS,a.AVG_ROW_LEN,a.BLOCKS,a.LAST_ANALYZED from user_tables a where a.TABLE_NAME='T';
 
  NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
---------- ----------- ---------- -------------
     50205          27        236 2011/12/9 16:
 
SQL> select b.blevel,b.leaf_blocks,b.distinct_keys,b.last_analyzed  from user_indexes b where b.table_name='T';
 
    BLEVEL LEAF_BLOCKS DISTINCT_KEYS LAST_ANALYZED
---------- ----------- ------------- -------------
         1          99             2 2011/12/9 16:
 

3)看看删除后的执行计划
SQL> select * from t where id=1;

50204 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 4182247035

----------------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |   502 | 13554 |    50   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T        |   502 | 13554 |    50   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IND_T_ID |   201 |       |    49   (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID"=1)

SQL> select * from t where id=99;


Execution Plan
----------------------------------------------------------
Plan hash value: 4182247035

----------------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |   502 | 13554 |    50   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T        |   502 | 13554 |    50   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IND_T_ID |   201 |       |    49   (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID"=99)
出问题了,都走索引了,到这里应该明白直方图的重要了吧。会导致CBO的统计信息不准确。
但是是不是所有列上建立直方图,个人觉得对于oltp系统来说最好全部都建,对于olap系统来说,考虑建,因为直方图也会消耗。
 
Oracle11g 统计信息(一)-----统计信息自动收集任务 11g中统计信息自动收集任务的名称是auto optimizer stats collection。11g中自动任务默认的执行时间窗口为:     周一到周五是晚上10点开始到2点结束     周末是早上六点,持续20个小时。 1、查看自动收集任务及状态 select client_name,status from Dba_Autotask_Client where client_na 阅读详情

相关推荐

TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧)

本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。

xgboost6farmer的博客 454

收集统计信息语句详解

收集统计信息 exec DBMS_STATS.GATHER_TABLE_STATS(ownname=>'DBACCADM',tabname=>'CS_CUSTPREOPEN_INFO_CHG',es...

copd94993的博客 527

测试工程师玩转DeepSeek之Prompt

掌握这些提示词技巧,测试工程师可提升与DeepSeek的协作效率至少3倍。建议结合具体项目上下文进行二次优化,并建立团队内部的提示词知识共享库。✅ “为电商支付接口生成包含幂等性验证的测试用例,覆盖网络中断重试场景”❌ “帮我写测试用例”

weixin_44872675的博客 2262

DBMS_STATS.GATHER_TABLE_STATS详解

由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身-表的行数、数据块数、行长等信息;列的分析--列值的重复数、列上的空值、数据在列上的分布情况;索引的分析-索引页块的数量、索引的深度、索引聚合因子). DBM...

weixin_30636089的博客 1576

Dify-前端本地运行-单点登录

本文介绍了如何在已部署Dify的系统中实现AI应用跳转及页面定制化改造。通过iframe跳转无法满足甲方需求后,作者对Dify前端源码进行了本地化二次开发,主要步骤包括:1) 按照官方文档搭建本地开发环境;2) 修改.env配置文件连接部署好的后端服务;3) 隐藏侧边栏和头部导航栏;4) 实现单点登录功能,通过URL参数获取用户邮箱自动登录。过程中解决了请求拦截导致的登录校验问题,最终达成仅保留对话框界面并同步用户信息的需求。该方案涉及Next.js框架和React技术的应用,为类似定制化需求提供了参

weixin_43163457的博客 3226

PCB线路板的制作工艺流程分享!2021-08-21

Pcb板制作工艺流程:开料-钻孔-沉铜-压膜-曝光-显影-电铜-电锡-退膜-蚀刻-退锡-光学检测-印阻焊油-阻焊曝光、显影-字符-表面处理-成型-电测-终检-抽测-包装。具体如下:1、开料(CUT) 将原始的覆铜板切割成可以用在生产线上制作的板子过程2、钻孔 使PCB板层间产生通孔,以达到连通层间的目的。 3、沉铜 经过钻孔后的线路板在沉铜缸内会发生氧化还原反应,形成铜层对孔进行孔金属化,使原来绝缘的基材表面沉积上铜,达到层间电性相通。 4、压膜 压膜后的PCB板上面压了一层蓝色的干膜, 干膜是一个载体

jdbpcb88的博客 3248

Oracle统计信息命令

转载于:https://www.youkuaiyun.com/tags/NtDaYgzsNDg3NjAtYmxvZwO0O0OO0O0O.html Oracle统计信息命令 1. 收集数据字典统计信息(针对SYS,SYSTEM 及其他数据库用户) EXEC DBMS_STATS.gather_dictionary_stats; 2. 收集基表的统计信息V$,gv$视图 EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; select table_name, num_.

weixin_43475880的博客 1814

薄膜电容寿命预测全解析:从理论到实践,5步搞定可靠性评估

本文全面解析薄膜电容寿命预测的理论与实践,提供五步可靠性评估流程,涵盖温度应力、电压应力等关键因素分析,并分享提升寿命的实用技巧。特别适用于新能源、电动汽车等领域的设计工程师,帮助准确预测薄膜电容在实际工况下的使用寿命。

weixin_33712987的博客 433

Oracle统计信息(一)—— 各版本新特性,统计信息收集及查看方法

一、Oracle 10g以前 没有自动收集统计信息的机制,需要由DBA手工写shell脚本来实现 二、 Oracle 10g 10g开始引入了自动统计信息收集作业,每天自动收集统计信息 10g中自动统计信息收集作业名为GATHER_STATS_JOB,核心是调用gather_database_stats_job_proc存储过程实现的 该Job在两种情况下会收集对象统计信息:...

Hehuyi_In的博客 1万+

LTspice基础教程-024.参数扫描;step指令用法

step指令用于参数扫描,扫描步骤可以是线性的,对数的或列表。 下面介绍几种常用用法: 绘制一简单电阻分压电路,如下: 线性扫描 语法:.step param <Name> <Start Value> <Stop Value> <Increment> 例:.step param Res 20 100 20 意思是R2的阻值从20变化到100,...

gaoyong_wang的博客 3万+

Spring AI Alibaba实战训练营-14基于A2A协议智能体应用开发指南

本文介绍了基于A2A协议的智能体应用开发流程,主要包括客户端和服务端两个模块的实现。关键技术包括A2A通信协议、Nacos服务发现、Spring AI Alibaba框架和DashScope通义千问API。开发步骤涵盖环境准备(JDK17、Maven、Nacos)、项目创建、依赖配置(重点引入spring-ai-alibaba相关组件)以及Nacos和DashScope的核心配置。整个系统架构采用客户端通过Nacos发现服务端Agent,再调用阿里云AI服务的模式,实现了AI能力的解耦与复用。

program哲学 506

DB2表中统计信息收集及数据重组(一)

DB2提供了3个命令工具,重组和分析table中的数据:REORGCHKREORGRUNSTAT1.RUNSTATS 收集数据对象的统计信息 

2569

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1714

Oracle 12c数据库优化器统计信息收集的最佳实践(一)

Oracle优化器会为SQL语句产生所有可能的访问路径(执行计划),然后从中选择一条COST值最低的执行路径,这个cost值是指oracle估算执行SQL所消耗的资源。为了让优化器能够精确计算的每一条执行计划的COST值,这就需要被执行SQL语句所需访问的所有对象(表和索引等)和系统有必要的描述信息。

woqutechteam的博客 2722

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Oracle数据迁移后由列的直方图统计信息引起的执行计划异常

(一)问题背景在使用impdp进行数据导入的时候,往往在导入表和索引的统计信息的时候,速度非常慢,因此我在使用impdp进行导入时,会使用exclude=table_statistics排除表的统计信息,从而加快导入速度,之后再手动收集统计信息。 图.impdp导入数据的时导入统计信息速度非常慢导入...

weixin_30895723的博客 522

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Oracle 收集统计信息在11g和12C下的区别

Oracle 基于事务的临时表在11g和12C下的区别下,可以看到收集临时表的统计信息后,前者记录被清空,后者没有,这是个很重要的区别。在公司环境上用的是12C,在现场用的是11g,使用临时表会造成时快时慢,之前我有帖子http://blog.youkuaiyun.com/stevendbaguo/article/details/39964807,用了hint之后,也不是特别好,于是直接采集,结果临时表被清空

关注系统性能调优 3116

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

11g中如何禁用自动统计信息收集作业

11g中如何禁用自动统计信息收集作业? 因为11g中auto stats gather job被集成到auto task中,所以与10g中的禁用方式不一样: SQL> select client_name,status from DBA_AUTOTASK_CLIENT; CLIENT_NAME ...

weixin_34185364的博客 100

【SQL优化案例】统计信息缺失

摘要:本文通过两个Oracle数据库优化案例,展示了统计信息缺失对SQL性能的影响。案例一中,APP_SERVLEVEL_BASE表因统计信息缺失导致全表扫描,收集统计信息后执行时间从470ms降至2.48ms,逻辑读从48,593降至11。案例二中,CUST_ENTITY_ATTRIBUTE表因走错索引导致CPU过高,修正后执行时间从220ms降至0.26ms。文章强调统计信息准确性的重要性,并提供了相关查询脚本,建议定期收集统计信息以优化执行计划选择。

weixin_60783132的博客 701

藏在表分区统计信息背后的小秘密

藏在表分区统计信息背后的小秘密 藏在表分区统计信息背后的小秘密 原创2017-09-...

nostrud ipsum6 155

GC调优的第一步是收集有关垃圾收集发生频率和GC使用时间的统计信息

GC调优的第一步是收集有关垃圾收集发生频率和GC使用时间的统计信息。这可以通过添加-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStampsJava选项来完成 转载于:https://www.cnblogs.com/huiandong/p/10034657.html...

weixin_30341735的博客 255

关于直方图统计信息的两个有趣的知识点

本文讲的是关于直方图统计信息的两个有趣的知识点,有朋友问了我如下这样一个问题,最后的解决过程挺有意思的,让我发现了直方图统计信息里我之前没有注意到的两个知识点,这里跟大家分享一下。 问题 数据库的版本是11.2.0.3: 创建一个测试表T1: SQL> create table t1 as select * from dba_users; Tab...

weixin_33725272的博客 226
上一篇: 绑定变量
下一篇: 收集统计信息(二) 之 dbms_stats
RuleV5
博客等级 码龄16年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值