PLSQL_统计信息系列2_统计信息过旧导致程序出现性能有关问题(案例)

PLSQL_统计信息系列2_统计信息过旧导致程序出现性能问题(案例)

2014-11-15 Created By BaoXinjian

PLSQL_统计信息系列2_统计信息过旧导致程序出现性能有关问题(案例)一、摘要


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

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

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

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

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

 

PLSQL_统计信息系列2_统计信息过旧导致程序出现性能有关问题(案例)二、解决方式


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_统计信息系列2_统计信息过旧导致程序出现性能有关问题(案例)