session allocation latch问题
http://www.itpub.net/showthread.php?s=&threadid=866095&perpage=10&pagenumber=1
昨天晚上一回家上msn,一朋友就抛了个问题过来:
我的系统严重的latch free等待,系统运行极度缓慢,几乎hang了。系统出帐出不了……
latch free中,最为严重的sleep的是session allocation
LATCH# NAME GETS MISSES SLEEPS ---------- -------------------- ---------- ---------- ----------
row cache objects 7309905930 1076355567 24799351 156
shared pool 1.2642E+10 168368806 28928269 3
process allocation 102171945 9233300 29316107 157
library cache 2.9539E+10 1234502998 87366744
session allocation 3091150764 514908537 244535123
没见过那个session allocation
这个为什么会这么高
看见这个现象,我的第一反应是应用不断地在连接数据库,或者有并行查询。
让他查询 v$session.logon_time 和 listener.log 都没有异常
trace session 说没有任何 trc 文件产生,一trace session就没了。
然后查询 v$px_session 果然不断有创建和产生
由于要修改初始化参数需要停机,显然不现实,于是查看是否有表或者索引的 parallel degree 大于1
果然有一个索引的 parallel degree 是15。
嘱咐其小心修改(会导致sql 重新parse),一改果然系统速度恢复正常。
我没追问系统以前是否正常,但我估计可能是最近有人创建了一个索引,并且创建的时候并行度使用了15(多个进程并行创建),创建之后就没再注意了。 结果月初出帐的时候就遇到麻烦了。
-- session allocation 这个latch我也从来没有看见过,朋友说metalink搜索过也没什么说明。但根据字面描述我直接就定位到 连接的问题 或者并行查询问题,然后其实诊断方向就很明确,最后以修改 索引 并行度解决问题。 看起来整个过程非常简单…… 但是不是大家都会这么直接呢?