ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 银行信用卡交易响应超时处理 - Read By Other Session 等待事件

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

原创 Linux操作系统 作者:is.x 时间:2011-06-13 23:22:22 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: datafile resize 脚本
请登录后发表评论 登录
全部评论

注册时间:2011-04-27

  • 博文量
    73
  • 访问量
    265255