当前位置: 首页 > news >正文

Oracle 12c 并发统计信息收集功能:技术解析与实践指南

一、功能背景与核心价值

在Oracle数据库的早期版本中,统计信息收集(如通过DBMS_STATS包)是串行执行的,即一次仅处理一个表或分区。对于大规模数据库或数据仓库环境,这种串行模式可能导致统计信息收集耗时过长,影响维护窗口效率。Oracle 12c R1引入了并发统计信息收集(Concurrent Statistics Collection)功能,允许同时处理多个表、分区或子分区的统计信息,显著缩短收集时间。

核心优势

  • 并行化处理:通过并发作业(Job)同时处理多个对象,提升整体效率。
  • 资源优化:结合Resource Manager控制并发资源分配,避免过度消耗系统资源。
  • 灵活性:支持手动和自动统计信息收集模式的并发执行。

二、配置过程

启用并发统计信息收集需进行以下配置:

1. 系统参数设置

  • 启用资源管理器:指定资源管理计划以控制并发作业的资源分配。
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'default_plan';  
  • 调整并发作业数:设置JOB_QUEUE_PROCESSES参数(建议根据系统负载调整)。
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 4;  

注:过高的并发可能影响性能,需结合Resource Manager限制。 

2. 开启并发收集功能

通过DBMS_STATS.SET_GLOBAL_PREFS设置全局参数:

EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');  

参数可选值:

  • ALL:手动和自动收集均启用并发。
  • AUTOMATIC:仅自动收集时启用。
  • MANUAL:仅手动收集时启用。
  • OFF:禁止。

3. 执行统计信息收集

以并发模式收集模式(Schema)级别的统计信息:

EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');  

三、使用限制与注意事项

1. 权限要求

  • 用户需显式授予CREATE JOB、MANAGE SCHEDULER和MANAGE ANY QUEUE权限。

2. 分区表处理机制

  • 串行化处理分区表:为避免死锁,Oracle在并发模式下每次仅处理一个分区表的分区,其他分区表需等待当前表处理完成。

3. 资源与性能管理

  • 并发度控制:JOB_QUEUE_PROCESSES参数需合理设置(默认值可能过高),建议通过Resource Manager限制并发作业的资源使用。
  • 小对象合并:Oracle可能将多个小表或分区合并至单个Job中执行,以减少资源消耗。

4. 监控与诊断

  • 查看并发任务状态:
SELECT JOB_NAME, STATE, COMMENTS 
FROM DBA_SCHEDULER_JOBS 
WHERE JOB_CLASS LIKE 'CONC%';  
  • 历史任务分析:通过视图DBA_OPTSTAT_OPERATION_TASKS和DBA_OPTSTAT_OPERATIONS跟踪任务执行详情。

四、最佳实践

  • 负载窗口选择:在高并发模式下,建议在系统低负载时段执行统计信息收集。
  • 自动收集优化:结合自动统计信息收集功能(通过auto optimizer stats collection任务),设置合理的维护窗口时间。
  • 分区表策略:对大型分区表优先使用并行参数(DEGREE),结合并发模式进一步提升效率。

五、常见问题与解决方案

  • 权限报错(ORA-27486):检查用户权限是否包含CREATE JOB、MANAGE SCHEDULER和MANAGE ANY QUEUE。

示例如下:

CONN test/test@pdb1

DROP TABLE tab1 PURGE;

CREATE TABLE tab1 AS
SELECT level AS id,
       'Description for ' || level AS description
FROM   dual
CONNECT BY level <= 10000;

EXEC DBMS_STATS.delete_table_stats(USER, 'TAB1');

EXEC DBMS_STATS.gather_table_stats(USER, 'TAB1');
*
ERROR at line 1:
ORA-20000: Unable to gather statistics concurrently: insufficient privileges
ORA-06512: at "SYS.DBMS_STATS", line 34634
ORA-06512: at line 1

SQL>

必须授予用户DBA角色,或者更明智地授予CREATE JOB、MANAGE SCHEDULER和MANAGE ANY QUEUE权限。

CONN sys@pdb1 AS SYSDBA
GRANT CREATE JOB, MANAGE SCHEDULER, MANAGE ANY QUEUE TO test;

PL/SQL procedure successfully completed.
  • 资源管理器报错(ORA-20000):确认RESOURCE_MANAGER_PLAN参数是否设置

示例如下:

conn test/test@pdb1
EXEC DBMS_STATS.gather_table_stats(USER, 'TAB1');

*
ERROR at line 1:
ORA-20000: Unable to gather statistics concurrently: Resource Manager is not
enabled.
ORA-06512: at "SYS.DBMS_STATS", line 34634
ORA-06512: at line 1

SQL>

解决方案:

CONN sys@pdb1 AS SYSDBA
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = default_plan;

conn test/test@pdb1
EXEC DBMS_STATS.gather_table_stats(USER, 'TAB1');

PL/SQL procedure successfully completed.

SQL>

六、写在最后

Oracle 12c的并发统计信息收集功能通过多Job并行处理机制,显著提升了大规模数据库的统计信息收集效率。合理配置资源管理策略、权限及并发参数是关键。用户需结合实际场景权衡并发度与系统负载,以实现性能与稳定性的平衡。 

相关文章:

  • HJS-DE1/2时间继电器 0.1-9.9S AC220V 导轨安装 JOSEF约瑟
  • 如何使用CSS Grid实现两列布局?
  • C++符号拓展带来的问题
  • 反向代理ml
  • 使用Python爬虫获取淘宝Custom API接口数据
  • Linux TCP 编程详解与实例
  • 深度探索未来的搜索引擎 —— DeepSeek
  • 美术教程2025
  • 数据挖掘智能Agent
  • Apache Iceberg 与 Apache Hudi:数据湖领域的双雄对决
  • 【网络安全 | 漏洞挖掘】后端接受非预期参数的故事
  • 【读点论文】Rewrite the Stars将svm的核技巧映射到高维空间,从数理逻辑中丰富特征维度维度
  • 详解C++的存储区
  • 在AMLOGIC android14 平台上使用adb
  • 如何在 MySQL 5.6 中实现按季度分组并找到销量最高的书籍
  • QT c++ QMetaObject::invokeMethod函数 线程给界面发送数据
  • UE5中的快捷键汇总
  • 电源测试和测量系统的创新遥感方法可以消除哪些潜在问题
  • 土建施工员考试题库及答案
  • 在 CentOS 上更改 SSH 默认端口以提升服务器安全性
  • 俄需要达成怎样的特别军事行动结果?普京:包含四个方面
  • 解放日报:“感觉全世界人都在上海买买买”
  • 解锁儿时愿望!潘展乐战胜孙杨,全国冠军赛男子400自夺冠
  • 特朗普政府涉税改法案遭众议院预算委员会否决
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 就规范涉企行政执法专项行动有关问题,司法部发布解答