银行信用卡交易响应超时处理 - Read By Other Session 等待事件

1.      现象

 

6813:15,某银行信用卡交易处理响应超时。

 

2.      分析

 

v$active_session_history视图中显示,在13:15:06-13:15:19时间段内,sql_id为“0tgfgq061mcbk”的语句出现“read by other session”等待,语句内容如下:

 

UPDATE LINC.MSDB_ACCT SET AGEING_A=NVL(:1, ' '), AGEING_G=NVL(:2, ' '), ETL_DAY=:3, MTHS_ODUE=:4, ODUE_HELD=:5 WHERE ROWID = :6;

 

13:15:19,有12个会话正在执行该sql语句(会话数与处理交易的进程总数一致),其中,有1个会话事件为“db file sequential read”,该事件一般与单块读操作有关(比如访问索引),注意这里的sequential read指的是将数据文件上的块读入到内存的连续区域中。其他11个会话都出现“read by other session”等待事件。

 

SAMPLE_ID

SAMPLE_TIME

SESSION_ID

SQL_ID

EVENT

38192645

08-6 -11 01.15.19.232 下午

825

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

867

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

842

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

814

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

800

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

779

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

766

0tgfgq061mcbk

db file sequential read

38192645

08-6 -11 01.15.19.232 下午

760

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

733

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

723

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

713

0tgfgq061mcbk

read by other session

38192645

08-6 -11 01.15.19.232 下午

836

0tgfgq061mcbk

read by other session

 

从视图中发现,当时12个会话均在访问21号数据文件的第1394515号块。

 

CURRENT_OBJ#

CURRENT_FILE#

CURRENT_BLOCK#

43146

21

1394515

 

可以用以下语句定位该块信息:

 

SELECT owner,segment_name,segment_type,tablespace_name FROM dba_extents where file_id=21 and block_id<=1394515 and block_id+blocks>1394515;

 

OWNER

SEGMENT_NAME

SEGMENT_TYPE

TABLESPACE_NAME

LINC

MSDB_ACCT

TABLE

DATATB

 

通过查询,该块属于LINC.MSDB_ACCT表。这和我们定位的sql语句是一致的。

 

当数据被请求访问时,oracle会首先将该数据从磁盘读到数据缓冲区中,如果有2个或2个以上会话请求同一份数据,那么第一个会话会读入该数据到缓冲区,其他会话会出现等待。在oracle 10g以后,该等待事件从“Buffer Busy Wait”中分离开,成为“read by other session”事件。

 

3.      结论

 

从数据库层面来分析,本次银行出现交易响应时间过长的原因为:多个会话同时对LINC.MSDB_ACCT表进行UPDATE,且请求读取同一个数据块,造成读竞争,相关会话出现“read by other session”等待。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20750200/viewspace-697835/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20750200/viewspace-697835/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值