DBA_JOBS_RUNNING视图访问缓慢

DBA_JOBS_RUNNING视图访问缓慢
===========================================================

一个经常碰到的bug,访问DBA_JOBS_RUNNING视图长时间得不到结果。


10.2以前的版本,查询DBA_JOBS_RUNNING视图经常会发生等待:

SQL> SET TIMING ON
SQL> SELECT * FROM DBA_JOBS_RUNNING;

no rows selected

Elapsed: 00:00:28.57

上面这个查询中虽然一条记录都没有查询到,但是仍然用了将近30秒,而如果采用RBO的方式,则1秒之内就可以得到查询的结果:

SQL> SELECT /*+ RULE */ * FROM DBA_JOBS_RUNNING;

no rows selected

Elapsed: 00:00:00.04

OracleBug No. 3402490中描述了这个bug,这个bug会影响9.210.1版本,在10.2中这个bugfixed

SQL> SET TIMING ON
SQL> SELECT * FROM DBA_JOBS_RUNNING;

未选定行

已用时间: 00: 00: 00.05
SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

已用时间: 00: 00: 00.03

 

 

DOC:329617.1

Solution

Gather Fixed Object Stats using DBMS_STATS.GATHER_FIXED_OBJECTS_STATS:

 
    

SQL> connect / as sysdba

SQL> exec dbms_stats.gather_fixed_objects_stats

Notes:
  • gather fixed object statistics only after the database is running under a representative workload. This is necessary in order to ensure that the sampled fixed objects (X$ memory tables) contain representative data. E.g. gathering stats immediately after a database restart will not achieve a good sample.
  • after gathering fixed object statistics the query has to be hard parsed in order for the Optimizer to consider the new statistics and generate a revised execution plan

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/611609/viewspace-670261/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/611609/viewspace-670261/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle DBA_JOBS是用于创建和管理Oracle数据库作业的系统表。它允许您创建周期性或非周期性作业,并在指定时间自动运行这些作业。 以下是创建和管理Oracle DBA_JOBS的步骤: 1. 创建作业:使用DBMS_JOB包中的PROCEDURE来创建作业。例如,要创建一个名为"my_job"的作业,可以使用以下命令: ```sql DECLARE jobno NUMBER; BEGIN DBMS_JOB.SUBMIT( job => jobno, what => 'BEGIN my_procedure(); END;', next_date => SYSDATE, interval => 'SYSDATE + 1/24'); COMMIT; END; ``` 这个命令将在每个小时的第一分钟运行名为"my_procedure"的PL/SQL过程。 2. 查看作业:使用DBA_JOBS视图来查看所有作业的列表和详细信息。例如,要查看所有作业的列表,可以使用以下命令: ```sql SELECT job, schema_user, what, next_date, interval, failures, broken FROM dba_jobs; ``` 这个命令将返回所有作业的列表以及它们的详细信息。 3. 修改作业:您可以使用DBMS_JOB包中的PROCEDURE来修改已经存在的作业。例如,要修改名为"my_job"的作业以使其在每个小时的第十五分钟运行,可以使用以下命令: ```sql DECLARE jobno NUMBER; BEGIN SELECT job INTO jobno FROM dba_jobs WHERE job = 'my_job'; DBMS_JOB.BROKEN(jobno, false); DBMS_JOB.CHANGE( job => jobno, what => 'BEGIN my_procedure(); END;', next_date => SYSDATE, interval => 'SYSDATE + 1/24/4'); COMMIT; END; ``` 这个命令将修改名为"my_job"的作业以使其在每个小时的第十五分钟运行。 4. 删除作业:您可以使用DBMS_JOB包中的PROCEDURE来删除已经存在的作业。例如,要删除名为"my_job"的作业,可以使用以下命令: ```sql DECLARE jobno NUMBER; BEGIN SELECT job INTO jobno FROM dba_jobs WHERE job = 'my_job'; DBMS_JOB.REMOVE(jobno); COMMIT; END; ``` 这个命令将删除名为"my_job"的作业。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值