library cache lock 一例,密码错误导致-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3503053
  • 博文数量: 718
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7790
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(718)

文章存档

2024年(4)

2023年(74)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

最近访客
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: oracle

2021-01-31 22:56:03


oracle 19c 仍然采用密码延时特性,第一次输错延时1秒,第二次输错延时2秒,为了防止暴力破解,延长验证时间。但有些中间件如果因用户改了密码后,建立连接池时会大量连接,就会遇到library cache lock事件导致数据库很卡。

诊断方法如下:
检查问题时段等待事件,如果是library cache lock,找出p3对应的值进行转换,确认命名空间类别(问题出在哪方面),得到对象。

演示脚本
conn.sh:
sqlplus a/b@db1/pdb3  #这里故意用错误密码,正确密码是a

run.sh:
for i in {1..500}
do
  nohup sh /tmp/conn.sh  &
done

执行:
nohup /tmp/run.sh &
估计30秒结束,top可以看到 cpu的sys%比较高,我猜是因为大量fork进程导致,先不管它。

看看数据库什么状态。

第一步:等待事件:
select  event,count(0) cnt
from v$active_session_history where sample_time>sysdate-1/24/60
group by event order by 2;

event                          cnt
--------------------------- --------------------
failed logon delay              16
library cache lock               120
等待次数很多的就是library cache lock事件。

第二步:获取p3
set num 20
select p3,count(0) cnt from v$active_session_history where event='library cache lock' group by p3 order by 2;

      p3                  cnt
-------------------- --------------------
          5177346             185
          5177347           18808

这个p3需要转为16进制
select to_char(5177347,'xxxxxxxxxxxxxxxxxx') p3 from dual;

p3
--------------------------------------
   4f0003

经验丰富的就已经知道是啥原因了。
经验不丰富的把4f转换为10进制,确认一下到底问题出在哪个方面。

select to_number('4f','xxxxxxx') p3 from dual;

 p3
--------------------
   79

确认 namespace 类别
col kglhdnsd for a35
select distinct kglhdnsp,kglhdnsd from x$kglob where kglhdnsp=79;

 kglhdnsp kglhdnsd
-------------------- -----------------------------
 79    account_status

已经知道答案了吧?
就是在验证密码时会锁定对象。

凯发app官方网站的解决方案是:

alter system set events '28401 trace name context forever,level 1';
alter system set event = '28401 trace name context forever, level 1' scope = spfile;

进一步验证,抓取awr报告看等待事件。

在19c的awr中明显看到了failed logon delay事件,且time model statistics等待统计中,connection management call elapsed time占比最高。

参考:https://blogs.oracle.com/database4cn/library-cache-lock

如果namespace 是82,说明是语句解析方面可能出了问题。
 kglhdnsp kglhdnsd
---------- -----------------------------------
        82 sql area build
想把错误的sql输出到alert.log,需要设置事件
alter system set events '10035 trace name context forever,level 3';
然后tail -f alert.log等待错误信息输出。
当然,还可以从awr中验证,time model statistics等待统计中failed parse elapsed time占比较高。
阅读(1591) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图