oracle长事务执行越来越慢,记一次DB2事务长时间未提交引起的批量变慢问题

上周四应用更新后,周五晚上的批量明显变慢,检查DB2数据库发现大量会话都停留在同一个insert ... select ... 语句,抓取了db snap, application snap, dynamic snap 和 db2pd -eve信息

发现效率慢的这条insert语句中,select部分有一张表有大量的锁定,找到持有锁定的AppHandl,发现是周五中午的一个文件导入更新操作一直未提交,将这个连接force后就恢复正常了。

具体分析如下:

先来看当时的latch wait信息:Latches:

Address Holder Waiter Filename LOC LatchType HoldCount

0x0780000001540478 1029 0 ../include/sqle_workload_disp.h 1391

SQLO_LT_sqeWLDispatcher__m_tunerLatch 1

0x0A00040000061908 200755 214051 sqlpgrlg.C 1553

SQLO_LT_SQLP_DBCB__ReadBufSem 0

0x0A00040000061908 200755 172871 sqlpgrlg.C 1553

SQLO_LT_SQLP_DBCB__ReadBufSem 0

0x0A00040000061908 200755 173128 sqlpgrlg.C 1553

SQLO_LT_SQLP_DBCB__ReadBufSem 0

0x0A00040000061908 200755 195620 sqlpgrlg.C 1553

SQLO_LT_SQLP_DBCB__ReadBufSem 0

holder都是200755,waiter

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回滚操作是Oracle数据库中常见的操作之一,但是如果回滚的数据量很大或者回滚的事务等待时间过,就会导致Oracle响应变慢,甚至出现长时间无响应的情况。以下是一些可能的解决方法: 1. 提高回滚段的大小:可以通过增加回滚段的大小来提高回滚性能,从而加快回滚操作的速度。可以使用如下命令来增加回滚段的大小: ALTER ROLLBACK SEGMENT segment_name ADD DATAFILE 'datafile_name' SIZE size; 2. 使用更快的存储设备:可以将回滚段放置在更快的存储设备上,如固态硬盘,以提高回滚性能。 3. 优化SQL语句:如果发现回滚操作主要是由于某个SQL语句引起的,可以通过优化SQL语句来减少回滚的数据量,从而提高回滚性能。 4. 调整Undo_retention参数:可以通过调整Undo_retention参数来减少回滚操作的时间。该参数控制了回滚段中事务的最存活时间,如果该时间过,回滚操作的速度就会变慢。 5. 增加回滚段的数量:可以通过增加回滚段的数量来提高回滚性能,从而减少回滚操作的时间。 6. 使用Flashback技术:如果Oracle数据库支持Flashback技术,可以使用该技术来快速回滚数据,从而加快回滚操作的速度。 以上是一些可能的解决方法,但具体应该根据实际情况进行选择。如果问题持续存在,建议联系Oracle技术支持或专业的数据库管理员进行进一步的诊断和解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值