oracle 经常出现锁表,请问原因以及解决方案

OneSmileyou 2019-08-23 03:58:34
数据库连接池如下:
<property name="maxActive" value="20" />
<property name="maxWait" value="1000" />
<property name="removeAbandonedTimeout" value="60" />
<property name="removeAbandoned" value="true" />
<property name="logAbandoned" value="true" />
出现的现象:后台事务提交一直在等待,查看锁表sql未发现问题,语句如下:
SELECT A.USERNAME,
A.MACHINE,
A.PROGRAM,
A.SID,
A.SERIAL#,
A.STATUS,
C.PIECE,
C.SQL_TEXT
FROM V$SESSION A,
V$SQLTEXT C
WHERE A.SID IN (SELECT DISTINCT T2.SID
FROM V$LOCKED_OBJECT T1,
V$SESSION T2
WHERE T1.SESSION_ID = T2.SID)
AND A.SQL_ADDRESS = C.ADDRESS(+)
ORDER BY C.PIECE;
oracle 的监听日志未找到;频率大概三个小时左右;查询V$SESSION连接池大概70个连接左右,觉得不应该出现这个情况
...全文
1860 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
OneSmileyou 2019-08-28
  • 打赏
  • 举报
回复
感谢上面两位的解答,是因为系统存在过长事务处理 导致事务一直未提交,其他事务在等待长事务提交导致行锁
minsic78 2019-08-23
  • 打赏
  • 举报
回复
性能问题不一定是锁的问题。 看你的描述,看来能重现,最好看发生问题时段的AWR的等待事件,如果等不及重现或者不能重现,可以拿事发时间段的AWR报告,如果发生问题的时间短很短,因为AWR快照默认1个小时采集一次,取AWR可能还不够合适,需要取ASH报告。 从现象上来看,如果堵塞时间比较短,而且有规律,光猜的话,可能是redo日志切换的问题,加大redo member大小,加多redo group,可以缓减甚至消灭这种问题。如果不想在猜猜猜上浪费时间折腾的话,还是要有一些证据,比如上面提到的AWR和ASH。
AHUA1001 2019-08-23
  • 打赏
  • 举报
回复
这样的查询应该不会锁表,应该有其它的进程在操作。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧