latch:transaction allocation

今天遇到一个sql,发生了大量的134的latch,134的latch是transaction allocation。数据库版本是9208.

该sql是:

据客户反映,这个sql之前没有出现问题,只是昨天做了修改,增加了对v$session表的关联。昨天的sql:

在查询相关文档后,引起这个问题的原因如下:
(1)频繁访问v$transaction视图会造成134的latch free(transaction allocation),可见Doc ID 42192.1 LATCH:TRANSACTION ALLOCATION
(2)v$transaction视图的基表是x$ktcxb,且v$lock视图的基表也是x$ktcxb,因此频繁访问v$lock也会造成134的latch free
(3)在sql改造之前,v$lock的查询只会执行一次,增加对v$session的关联之后,原来只访问一次的v$lock,变成了走nestloop循环访问v$lock,也就是频繁访问了x$ktcxb,因此造成134的latch

解决方案:
建一个global temporary table,将查询到的v$lock内容insert其中。或者直接用with as的写法。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注