问题描述
嗨,团队,
正如我们所知,“enq: TX行锁定内容” 经常发生在DBA的生命周期中,汤姆曾经说过,“根据我的经验,Oracle数据库中死锁的头号原因是未索引的外键。第二个原因是受并发更新影响的表上的位图索引。
好吧,我们可以通过动态视图 (v $ lock,v $ session,v $ locked_object,v $ process等) 或AWR报告行锁段找到麻烦制造者,但我仍然有一些疑问:
1) 在AWR中,死锁是否被识别为 “enq: TX行锁定竞争”?
2) 如果我们想弄清楚几天前哪个SQL或PL/SQL导致数据库DML被阻止 (而不是此时此刻),但是可疑的SQL或PL/SQL没有被AWR (每小时) 报告捕获,我们该怎么做才能快速找到它?任何系统视图都可以提供帮助,或者我们应该通过脚本记录这些视图吗?
3) 在某些错误的编码客户端服务器senario中,如果客户端挂起 (例如windows客户端程序) 并且终端只能等待,则如果PMON没有及时释放资源,则可能导致会话DML阻塞。我们曾经在sqlnet中设置DCD,以消除被绞死的会话。但是,DCD的最小值为1 minite,对于繁忙的DB来说,1 minite是相当长的时间,您有什么建议可以最大程度地减少这种影响?
任何建议都值得赞赏。
正如我们所知,“enq: TX行锁定内容” 经常发生在DBA的生命周期中,汤姆曾经说过,“根据我的经验,Oracle数据库中死锁的头号原因是未索引的外键。第二个原因是受并发更新影响的表上的位图索引。
好吧,我们可以通过动态视图 (v $ lock,v $ session,v $ locked_object,v $ process等) 或AWR报告行锁段找到麻烦制造者,但我仍然有一些疑问:
1) 在AWR中,死锁是否被识别为 “enq: TX行锁定竞争”?
2) 如果我们想弄清楚几天前哪个SQL或PL/SQL导致数据库DML被阻止 (而不是此时此刻),但是可疑的SQL或PL/SQL没有被AWR (每小时) 报告捕获,我们该怎么做才能快速找到它?任何系统视图都可以提供帮助,或者我们应该通过脚本记录这些视图吗?
3) 在某些错误的编码客户端服务器senario中,如果客户端挂起 (例如windows客户端程序) 并且终端只能等待,则如果PMON没有及时释放资源,则可能导致会话DML阻塞。我们曾经在sqlnet中设置DCD,以消除被绞死的会话。但是,DCD的最小值为1 minite,对于繁忙的DB来说,1 minite是相当长的时间,您有什么建议可以最大程度地减少这种影响?
任何建议都值得赞赏。
专家解答
嗯,这里有几件事在玩。
有死锁 (即,没有人会逃脱,因此我们将终止一个会话上的active语句),并且只是在锁上被阻止。
如果是死锁,我们将转储一个包含所有详细信息的跟踪文件。
如果它只是一个普通的阻塞锁,那么我们将不会捕获任何内容来跟踪文件。但是,如果您获得了许可,则很可能会在DBA_HIST_ACTIVE_SESS_HISTORY中看到它,它是您在V $ ACTIVE_SESSION_HISTORY中看到的数据的采样子集。
对于 (3),有一个资源管理器计划,您可以使用它来更加主动。您可以设置一个计划,其中包括MAX_IDLE_BLOCKER_TIME参数,该参数将杀死一个空闲但正在阻止另一个会话的会话。(您可能需要使用12c)
有死锁 (即,没有人会逃脱,因此我们将终止一个会话上的active语句),并且只是在锁上被阻止。
如果是死锁,我们将转储一个包含所有详细信息的跟踪文件。
如果它只是一个普通的阻塞锁,那么我们将不会捕获任何内容来跟踪文件。但是,如果您获得了许可,则很可能会在DBA_HIST_ACTIVE_SESS_HISTORY中看到它,它是您在V $ ACTIVE_SESSION_HISTORY中看到的数据的采样子集。
对于 (3),有一个资源管理器计划,您可以使用它来更加主动。您可以设置一个计划,其中包括MAX_IDLE_BLOCKER_TIME参数,该参数将杀死一个空闲但正在阻止另一个会话的会话。(您可能需要使用12c)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




