troubleshooting row cache lock(二)

本案例来自东区某客户,数据库版本为rac 19.7。周日业务反应有大量业务阻塞,通过一线同事发来的wait chain信息可以看到大量的row cache lock(CID=16)和library cache lock,并且final blocking event是row cache lock。final block session是not wait的。

首先row cache lock在之前的一篇row cache lock分析中已经介绍过了基本分析思路,这里就不多说明了,直接进入正题http://www.minniebaby.tech/2021/10/27/%e6%a1%88%e4%be%8b%ef%bc%9a%e4%b8%80%e6%ac%a1row-cache-lock%e5%bc%82%e5%b8%b8%e5%a4%84%e7%90%86/

ash分析:

final block session(INSTANCE_NUMBER=2、SID=2018)执行的是自动统计信息任务。以X模式请求dc_histogram_defs的row cache lock,并且持续了非常长时间的请求。一直持续到客户重启数据库。

10点55分已经等待了46分钟的row cache lock

  • P1=16(dc_histogram_defs)
  • P3=5(X模式)

hash=a3de4515这个是关键信息,用于后续分析的匹配和搜索。

那么为什么J003请求不到X模式的row cache lock呢?原因只能是当前有进程正在以S或者X模式持有了该队列。那么在ash blocking为空的情况下如何找出这个进程呢?

我的方法是使用hash=a3de4515去搜搜trace下面的所有trace看看能不能有发现,最终在diag trace中找到了持有的进程。

hash和instance lock和请求的完全匹配,通过SO和OWNER,往上搜索可以定位到process为GEN1,再通过process的SO可以找到gen1的session state信息。

大量的gc cr block lost,通常出现block lost都与网络丢包有关系。但是我反复查看了oswnetstat,并未发现异常,而且gc cr block lost只在gen1进程的等待中出现。

查看gen1的trace发现异常阶段有大量的如下输出:

时间与gen1开始反复等待gc cr block lost吻合。搜索mos发现与Bug 34482043 : SOME “GC CR MULTI BLOCK MIXED” WAIT OUTLIERS FOLLOWED BY “IPCLW DISCARDING MSG” CAUSE APERFORMANCE REGRESSION IN 19C非常相似。

workaround是升级到19.18。

gc cr block lost只有gen1进程的sql出现过,sql是同一个,我忘记记录了,但是我很清楚的记得与user$.SPARE6有关系,个人猜测可能禁用掉”_disable_last_successful_login_time”特性也可以。

over!!!

 

此条目发表在Oracle, Oracle troubleshooting分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

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