首页 > 代码库 > PLSQL_统计信息系列1_以前正常程式因统计信息过久突然出现性能问题(案例)

PLSQL_统计信息系列1_以前正常程式因统计信息过久突然出现性能问题(案例)

2014-11-15 Created By BaoXinjian

技术分享一、摘要


在性能的稳定数据库中,所有的job都需要在一定时间内完成

以前在一个银行系统中,突然某一个job原本在30minutes内完成的,但是在3hours之后,还在运行

排除了数据量大小变化的影响,需要查看该程序的解析计划是否变更,在稳定的系统中,job对应的explain plan一般通过sqlplan management固定,很少变化

所以需要查看,是否job对应的sqlplan explain是否变化

一般来说,解析计划变更也会导致此类问题

 

技术分享二、解决方式


Step1. 查看程序对应的session

select sid, sql_id from v$session where sid = 1001

Step2. 查看对应session目前在运行的sql

select b.begin_interval_time, a.disk_reads_total, a.buffer_gets_total,a.buffer_gets_delta, a.rows_processed_total, a.plan_hash_value  from dba_hist_sqlstat a, dba_hist_snapshot b   where a.snap_id = b.snap_id 
and sql_id = 466bpq7055f4c
order by 1 desc;

Step3. 查看该长时间运行sql对应的解析计划是否在这段时间有过变更

select* from v$sql_plan

Step4. 查看表的统计时间

select name, last_analized from dba_tables

Step5. 对表进行产生统计信息

exec dbms_stats.gather_table_stats(ownname=>SCOT,tabname=>GAVIN,estimate_percent=>3,degree=>32,granularity=>GLOBAL,cascade=>FALSE,no_invalidate=>FALSE);

 

 Thanks and Regards

 技术分享

PLSQL_统计信息系列1_以前正常程式因统计信息过久突然出现性能问题(案例)