客户的系统在对3000人进行1个月排班的时候,系统执行后一直无法结束。
通过查看等待事件,是在等待latch:row cache object
cpu一个核的使用达到100%,
我们可以使用如下SQL检查row cache 是否高效。 pct_succ_gets 接近与100最好,如果接近于0,就说明需要优化。
SELECT parameter,
SUM(gets),
SUM(getmisses),
100 * SUM (gets-getmisses)/sum(gets)pct_succ_gets,
sum(modifications)updates
FROM VROWCACHE
WHERE gets >0
GROUP BYparameter;
查看row cache objects 的具体信息:
SELECTaddr,
latch#,
child#,
level#,
name,
gets,
misses,
sleeps
FROMvlatch_children
WHEREname=’rowcache objects’ AND gets <>0
ORDER BYgets;
SELECT DISTINCTr.cache#,
r.parameter name,
r.TYPE,
r.subordinate#,
r.gets
FROMv$rowcache r
ORDER BY1, 4,5;
查看row cache objects具体包含的内容。
SET PAGES 1000
COLUMN cache# FORMAT 99999
COLUMN nameFORMAT a33
COLUMN latch# FORMAT 999999
SELECTDISTINCTs.kqrstcln latch#,
r.cache#,
r.parameter name,
r.TYPE,
r.subordinate#
FROMv
rowcacher,x
kqrst s
WHEREr.cache# =s.kqrstcid
ORDER BY1, 4,5;
通过查看share pool大小只有500m.sga有4g。将share pool 调整到1g,语句能快速执行。在10到15分钟内运行完成。