36-Oracle Statistics Gathering(统计信息收集)

Oracel 统计信息收集 针对不同的局点,以及机型性能,业务定时任务影响,数据量大小,有时需要进行调整,错开高峰期,防止对业务产生冲突;--如下语句可以查询自动统计信息是否打开,需要这三个语句查出来的所有状态都是enable。--查看表或索引的统计信息是否需更新,如果行数相差很多,则该表需要更新统计信息。---查询表数据量变化多少,Oracle的角度超过0.1 都需要统计信息更新。--通过如下语句可以查询任务执行历史信息。--查询最近7天的统计信息任务执行历史。--收集没有分析过的表的统计信息。2.1 收集数据表的统计信息。 阅读详情

小伙伴们,有没有因为统计信息不准,导致了业务卡顿,各种状况频出,这几天在实践和实操的过程中,时不时就需要进行统计信息的收集。同时统计信息收集的动作也是OCM必考内容。

数据库中的数据是地图,统计信息是导航仪,而优化器则是驾驶策略的制定者,CBO依赖统计信息做出最优成本和路径选择。

一、统计信息功能

在Oracle数据库管理中,统计信息收集(Statistics Gathering)是非常非常重要的环节,直接影响着数据库的性能优化和查询效率。

优化查询性能:

数据库优化器使用统计信息来评估执行计划的成本,选择最优的执行路径。可以根据列的分布、表的大小、索引的选择性等信息来决定是全表扫描还是索引扫描。

自动调整执行计划:

统计信息帮助数据库自动调整执行计划。随着数据的变化,统计信息会更新,这可以确保数据库持续使用最优的执行策略。避免因数据分布变化导致的执行计划突变(Plan Flip)

提高查询的准确性:

统计信息提供了关于数据的精确度,这对于估算查询结果的行数非常关键。在执行聚合查询(如COUNT、SUM等)时,准确的统计信息可以确保返回的结果更加准确。

改善成本估算:

数据库优化器通过统计信息来估算各种操作的成本,如扫描行数、连接操作的开销等。这些估算用于选择最佳的查询执行计划。减少不必要的I/O和CPU消耗,降低全表扫描风险

支持分区和物化视图:

对于使用分区表和物化视图的数据库设计,统计信息对于优化器的决策至关重要。分区表的选择性统计可以帮助优化器更有效地决定使用哪个分区。

支持高级功能:

同样支持高级功能,自动SQL调优、数据仓库优化器这些也将依赖于准确的统计信息来提供最佳的性能。

二、收集方式

1. ​自动收集机制​
Oracle通过GATHER_STATS_JOB自动任务实现智能收集:
  • ​触发条件​:当DBA_TAB_MODIFICATIONS中记录的DML量 > 表行数的10%时标记为陈旧(Stale)
  • ​时间窗口​:默认工作日晚10点-早6点及周末全天
  • ​优先级策略​:先处理缺失统计信息对象,再处理陈旧度高的对象
--启用命令

BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(
    client_name => 'auto optimizer stats collection',
    operation   => NULL,
    window_name => NULL);
END; 
/
--PL/SQL procedure successfully completed.
--直接用表名和用户名可以做粗略收集,其他按照列等选项收集,需要细化
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('用户名');
EXEC DBMS_STATS.GATHER_TABLE_STATS('用户名', '表名');
2. ​手动收集原则​
以下场景需手动干预:
  • ​ETL作业后​:避免优化器使用陈旧信息
  • ​数据分布倾斜​:存在极端值的列需特殊处理
  • ​性能敏感对象​:核心业务表结构变更后
  • 导出到导入:必要收集统计信息

三、统计信息的要点

下面用SH Schema验证,统计信息直接决定分区表SALES、大表CUSTOMERS的查询效率:
  • ​优化器决策依据​统计信息为CBO提供数据分布特征。举例:
-- 查看SALES表统计信息(关键字段)
SELECT num_rows, blocks, avg_row_len 
FROM dba_tables 
WHERE owner='SH' AND table_name='SALES';
--
  NUM_ROWS     BLOCKS AVG_ROW_LEN
---------- ---------- -----------
         0          0           0
若num_rows严重偏离实际值(如因数据迁移未更新),优化器可能错误选择全表扫描而非分区裁剪。
  • ​资源消耗优化​准确的索引统计信息(如CUSTOMERS_PK的聚簇因子)可避免低效索引扫描:
SELECT clustering_factor 
FROM dba_indexes 
WHERE index_name='CUSTOMERS_PK';
--
CLUSTERING_FACTOR
-----------------
                0
                0

高聚簇因子(接近表块数)表明索引效率低,需结合统计信息调整索引策略。 

四、举例SH Schema的统计信息收集方法

自动收集策略优化

启用增量收集降低分区表开销:

-- 开启SALES表增量统计
EXEC DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'INCREMENTAL', 'TRUE');
--PL/SQL procedure successfully completed.
-- 验证设置
SELECT preference_value 
FROM dba_tab_stat_prefs 
WHERE owner='SH' AND table_name='SALES' AND preference_name='INCREMENTAL';
--效果​:仅收集数据变更的分区。
PREFERENCE_VALUE
--------------------------------------------------------------------------
TRUE
设置用户SH自动收集任务 

 

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name        => 'gather_stats_job',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(''SH''); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; INTERVAL=1', -- 例如每天执行一次
    enabled         => TRUE,
    comments        => '自动收集统计信息'
  );
END;
/
手动收集关键场景

​1. 直方图精准控制​

对偏斜字段SALES.AMOUNT_SOLD收集等高直方图:

BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname    => 'SH',
    tabname    => 'SALES',
    method_opt => 'FOR COLUMNS SIZE 254 AMOUNT_SOLD', -- 254桶数
    degree     => 4
  );
END;
/
--
PL/SQL procedure successfully completed.
SYS@FREE>
-- 验证直方图
SELECT column_name, histogram, num_buckets 
FROM dba_tab_cols 
WHERE owner='SH' AND table_name='SALES' AND column_name='AMOUNT_SOLD';
--
COLUMN_NAME    HISTOGRAM       NUM_BUCKETS
______________ ____________ ______________
AMOUNT_SOLD    NONE                      0

​判定​:若HISTOGRAM=HEIGHT BALANCED且NUM_BUCKETS>=100,则有效反映数据分布。 

​2. 分区级统计验证​

检测分区SALES_Q4_2001的陈旧状态--提前确认有分区: 

SELECT partition_name, stale_stats, last_analyzed
FROM dba_tab_statistics
WHERE owner='SH' 
  AND table_name='SALES'
  AND partition_name='SALES_Q4_2024'
  AND stale_stats='YES'; 
  -- 陈旧状态检测

处理​:若返回记录,需对该分区单独收集: 

--提前检测确认分区
EXEC DBMS_STATS.GATHER_TABLE_STATS('SH','SALES',partname=>'SALES_Q4_2024');

三、可验证监控脚本(举例SH Schema)

准确性验证

对比COSTS表统计行数 vs 实际行数:

WITH actual AS (
    SELECT /*+ DYNAMIC_SAMPLING(4) */ COUNT(*) actual_rows 
    FROM sh.costs
)
SELECT 
    t.num_rows "统计行数",
    a.actual_rows "实际行数",
    ROUND(ABS((t.num_rows - a.actual_rows)/NULLIF(a.actual_rows,0))*100,2) diff_pct
FROM dba_tables t, actual a
WHERE t.owner='SH' AND t.table_name='COSTS'
  AND ABS(t.num_rows - a.actual_rows) > 10000; 
  -- 差异>1万行告警
  no rows selected

​阈值建议​:diff_pct > 5% 时需手动刷新统计。

自动任务健康监测

检查自动任务状态及失败历史:

SELECT 
    job_name, enabled, last_start_date,
    (SELECT COUNT(*) FROM dba_scheduler_job_run_details 
     WHERE job_name='GATHER_STATS_JOB' AND status='FAILED') fail_count
FROM dba_scheduler_jobs 
WHERE job_name='GATHER_STATS_JOB'
UNION ALL
-- 检查SH模式下统计信息锁定
SELECT 'STATS_LOCK', NULL, NULL, COUNT(*)
FROM dba_tab_statistics 
WHERE owner='SH' AND locked='YES';
JOB_NAME      ENABLED    LAST_START_DATE       FAIL_COUNT
_____________ __________ __________________ _____________
STATS_LOCK                                           4890
​处理逻辑​:
  • fail_count > 0 → 检查 dba_scheduler_job_log
  • STATS_LOCK > 0 → 使用 DBMS_STATS.UNLOCK_TABLE_STATS 解锁。

四、实操体会

在举例SH Schema中需重点关注:
  1. ​分区表增量统计​:降低90%收集开销,尤其对时间分区字段(如SALES.TIME_ID)。
  2. ​偏斜字段直方图​:对金额/数量等高基数列(AMOUNT_SOLD、QUANTITY_SOLD)定制桶数。
  3. ​混合收集策略​:
  • 自动任务处理日常变更
  • ETL后对SALES/COSTS手动刷新
  • 使用 PENDING STATS 测试:
EXEC DBMS_STATS.SET_TABLE_PREFS('SH','SALES','PUBLISH','FALSE');
--
PL/SQL procedure successfully completed.

TIPS:

  • 通过统计信息收集,可精准验证统计信息对查询优化的实际影响,实现从理论到高效运维的闭环
  • 在进行大量数据加载或数据修改后,及时重新收集统计信息是非常重要的,以确保优化器能基于最新数据做出正确的决策。
  • 在生产环境中,建议定期监控统计信息的准确性和完整性,必要时进行手动或自动的调整和重新收集
  • 过度频繁地收集统计信息可能会影响系统性能,因为这会增加数据库的负载。因此,应根据实际需要平衡收集频率和系统性能。
Oracle里的统计信息 oracle数据库里的统计信息是如下的一组数据:他们存储在数据字典里,且从多个维度描述了oracle数据库数据对象的详细信息。oracle数据库里的统计信息主要分为以下6种情况:(1)表的统计信息。(2)列的统计信息。(3)索引的统计信息。(4)系统统计信息。(5)数据字典统计信息。(6)内部对象统计信息。 阅读详情

相关推荐

逐行逐句进一步了解SurroundOcc(一)

通过分析中的模型构建过程,理解了从配置文件到模型实例化的整个流程。构建过程的核心是通过build和等函数,逐步将配置文件解析并生成模型的各个模块对象,最终组合成一个完整的模型结构。这一过程涉及多个类和函数的调用,其中函数是生成对象的关键,它能够从配置字典中提取必要信息并生成对应的类实例。

lovely_yoshino的博客 8112

oracle统计信息详解

收集表中列的数据分布的信息,数据分布最基本的信息是最大值和最小值,但是如果数据分布是倾斜的,这种级别的统计对于优化器来说不够的,对于倾斜的数据分布,直方图通常用来作为列统计的一部分。对于分区表,如果仅仅是一个分区有了较大改动,只需要收集一个分区的统计,但是收集整个表的分区也是必要的。在表的各个层次都会有不同的统计信息,通过这些统计信息来描述表的,列的各种各样的统计信息。对所有更改活动中的对象自动统计应该足够充分,由于自动统计收集在夜间进行,因此对于一些更新频繁的对象其统计可能已经过期。

zll4859291的博客 5611

IB网络下不同租户业务隔离方案

IB(InfiniBand)网络隔离可以在不同的通信模式下实现,其中包括 IPoIB(IP over InfiniBand)通信模式。在 IPoIB 模式下,InfiniBand 网络可以承载 IP 数据包,使得基于 IP 的应用程序能够在 InfiniBand 网络上进行通信。在这种情况下,IB 网络隔离通常指通过配置 Partition Key(PKey)来实现不同的租户或应用程序之间的网络隔离。然而,IB 网络隔离并不仅限于 IPoIB 模式。

guganly的专栏 1527

oracle-收集统计信息

关于统计信息收集

weixin_42682872的博客 2780

汇川H5U搭配步进伺服电机使用CANopen通讯控制电机案例

摘要:本文介绍了基于汇川H5U PLC和STM4260B-CANopen-M步进伺服电机的控制系统搭建流程。主要内容包括:硬件准备(PLC、伺服电机、24V电源)、电机参数默认设置(地址1号、1M波特率)、使用AutoShop软件编写程序(配置CANopen参数、导入电机描述文件、设置PDO参数)以及功能块编程(使能控制、速度控制、绝对位置控制等)。通过查阅通讯手册完成各功能块参数配置,最终在主程序中调用功能块实现控制系统开发。该方案适用于需要精确运动控制的工业自动化场景。

m0_46512607的博客 1596

Open3D 教程学习指南 (持续整理)

Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如点云处理、3D 重建、几何处理和可视化等。

Chase Blog 5931

ORACLE收集统计信息

oracle 统计信息

qq_24388807的博客 3993

电容式触摸抗干扰设计:工业环境下的实践方案

针对工业环境中电容式touch器件易受干扰的问题,分享实用的硬件布局与软件滤波方案,提升touch响应稳定性和可靠性。

weixin_35755562的博客 843

Oracle批量导入数据时的在线统计信息收集

Oracle批量导入数据时的在线统计信息收集

In-Memory Computing Technology 697

具身智能(26):RDK S100的LeRobot或Agile X piper机械臂控制模型

本文档详细介绍了基于ROS2的机器人控制模型架构与标定数据联动机制。核心采用"感知-规划-控制"闭环流程,通过激光雷达、相机和IMU的融合数据实现厘米级定位(≤1cm)。文档包含两大控制模型配置:1)RDKLeRobot模型,重点说明PID参数调节和标定文件路径设置;2)AgileXPiper模型,强调驱动安装与外部标定文件集成。针对常见问题提供解决方案,如控制指令无响应需验证标定路径,运动偏差过大需重新标定等。最后给出批量部署方案,通过复制基准配置文件实现多机器人快速配置,要求定位偏差

码农17年的博客 179

【Python】秋招机考 —— 2025/8/27 华为 AI 方向

2025 华为 AI 秋招机考题目包含15道单选题、5道多选题和2道机器学习编程题,涵盖核心算法与数学知识。单选题考察了Softmax激活、Transformer位置编码、Jacobi迭代、大模型幻觉现象、特征向量、K-means聚类、矩阵秩、实对称矩阵性质、SVD分解、概率论等知识点。多选题涉及高斯-赛德尔迭代和朴素贝叶斯分类器。

一杯水果茶!足矣~ 840

Oracle 12c中db_file_multiblock_read_count 参数引发的性能问题

最近有一套系统一条简单的语句执行很慢:create table xxx as select * from xxx; 做了简单的10046如下: SQL ID: 479aa0z9yttdr Plan Hash: 2897757...

cqq1799的博客 425

2026滑块验证码终极实战:缺口检测算法+人机轨迹模拟,识别率从60%飙升至95%全方案

**摘要:2026年AIGC技术发展导致传统验证码失效,滑块验证码成为主流防护手段。本文深入分析了传统方案识别率低的原因,并提出多级检测融合和行为拟合优化方案。通过图像预处理优化、三级缺口检测引擎(差分图像法、Hu矩轮廓匹配、YOLOv8n模型兜底)将识别率提升至99.2%。同时针对轨迹模拟环节,设计了包含抖动特征、时间随机性和个体差异的行为模型,使通过率从12%提升至87%。该方案解决了传统方法在缺口定位精度和轨迹真实性方面的核心痛点,为应对新一代验证码风控提供了完整的技术框架。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1899

收集统计信息

1.     理解什么是统计信息优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划。优化器统计信息包括:·         表的统计信息o   行数o   Block数o   行平均长度·         列的统计信息o   列中不同值的数量o   列中null的数量o   数据分布(

我爱海 1127

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

oracle 如何正确收集统计信息

本篇主要是从两个角度出发:1、什么统计信息;2、怎么正确收集统计信息

qq_16729455的博客 1万+

SAP B1中文培訓教材_SDK

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

Oracle统计信息

【代码】DBMS_STATS.GATHER_TABLE_STATS使用详解。

star的DBA手记 4469

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Oracle统计信息的收集和维护

一、手动收集统计信息 部分参数说明: (1)estimate_percent:表示选择的采样比例,如果太低,收集速度会快,但可能不会很准确,如果太高,收集速度会慢,但比较准确,各有利弊,默认是100%。 (2)degree:并行统计信息收集,应根据对象的大小和并行性初始化参数的设置选择恰当的并行度,默认为null。 (3)cascade:表示是否收集对应的索引、列等的统计信息。 (4)granularity:有四个可选项: all:采集global、partition、subpartition等粒度统计信息

loveLAxin的博客 1万+

学习如何收集和查看Oracle的统计信息

学习Oracle收集和查看统计信息的方法

huanhuanzhou blog 4443

收集oracle统计信息

优化器统计范围: 表统计; --行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;列统计; --列中唯一值的数量(NDV),NULL值的数量,数据分布; --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;索引统计;--叶块数量,等级,聚簇因子;...

abc123098098的博客 1136

Oracle统计信息的魔力

Oracle统计信息

m0_49929446的博客 1941

一文搞懂 Oracle 统计信息

作者 | JiekeXu来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)如需转载请联系授权 |(个人微信 ID:JiekeXu_DBA)大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 一文搞懂 Oracle 统计信息,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!目 录前 言 1...

JiekeXu的博客 2501

Oracle-统计信息收集&&分析表和索引

ORACLE-统计信息收集&&分析表和索引

UntifA的博客 5755

关于oracle统计信息收集

检查是否启用收集任务: select client_name,status from dba_autotask_client; 禁用收集: exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name =>...

sqlora的专栏 1041

oracle统计信息收集的作用,oracle 11g 收集统计信息的新特点介绍

对组合列创建统计信息 --检查表结构 select * from scott.emp where 1=2; --创建虚拟列 会输出虚拟列名 select dbms_stats.create_extended_stats('scott','emp','(empno,JOB)') from dual; select * from dba_tab_cols where column_name like ...

weixin_39601794的博客 1076

Oracle统计信息(1)

...

congcong112233的博客 1667

oracle表分析-收集统计信息

1.分析更新表的统计信息,,有可能导致执行计划改变.. 2.以的analyze table abc compute statistics;这条为例,生成的统计信息会存在于user_tables这个视图, select * from user_tables where table_name='ABC'; 观察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN几列你...

lizhiyu211的专栏 2092
上一篇: 35-Oracle Advanced compress-23 ai Improved HCC
下一篇: 37-Oracle 23 ai Shrink Tablespace(一键收缩表空间)
远方1609
博客等级 码龄22年 577粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值