首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle调优/分析表

Oracle调优/分析表
EN

Stack Overflow用户
提问于 2009-11-26 05:34:58
回答 2查看 5.1K关注 0票数 2

安排自动“分析表”的方法有哪些?当大量数据通过插入和删除进行更改时,是否可以请求自动“分析表”?将自动分析表流程参数化的方法是什么,即在应该触发时设置规则。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-26 08:25:21

从理论上讲,您可以在表上执行AFTER INSERT触发器,从而自动触发DBMS_STATS。

但要小心你的愿望。如果您正在进行一个大型的DBMS_STATS作业,并且刚刚将一百万行插入到表中,那么您不一定希望立即自动启动一个ETL作业。同样,当你处于最繁忙的在线处理时间(例如午餐)时,你不会想要通过同时收集统计数据来减慢它的速度。

您通常希望这些统计信息收集在低使用率时段(晚上、周末)运行的作业。如果您有一个加载到许多表中的大型批处理运行,我会将DBMS_STATS构建到批处理中。

票数 2
EN

Stack Overflow用户

发布于 2009-11-26 06:00:47

您使用的是什么版本的Oracle?从10.1开始,Oracle提供了一个自动作业,该作业每晚收集自上次收集统计信息以来发生重大更改的任何对象的统计信息(基于可能发生更改的内部算法,但我相信阈值约为15%)。假设您使用的是当前支持的版本,除非您显式禁用该作业,否则默认情况下会自动收集统计信息。

您可以使用DBMS_STATS包根据事件收集有关对象的统计信息,也可以使用DBMS_JOB (或DBMS_SCHEDULER)包异步完成此操作。因此,在ETL过程结束时,您可以收集统计信息

代码语言:javascript
运行
复制
BEGIN
  dbms_stats.gather_table_stats( 
    ownname => <<schema name>>,
    tabname => <<table name>> 
  );
END;

您可以让它异步运行

代码语言:javascript
运行
复制
DECLARE
  l_jobno INTEGER;
BEGIN
  dbms_job.submit(
    l_jobno,
    'BEGIN dbms_stats.gather_table_stats( ''<<schema name>>'', ''<<table name>>'' ); END;',
    sysdate + interval '1' minute
  );
END;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1800124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档