且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[20150320]逻辑读增加.txt

更新时间:2022-09-13 10:27:49

[20150320]逻辑读增加.txt

--昨天在看awr报表发现一个奇怪的现象,一个小表在全表扫描时逻辑读增加许多。

--有一个小表逻辑读很高比平时高,一开始以为是高水位的问题,检查发现不是。后来才发现一开发在做维护后,在执行select for
-- upate查看,然后离开办别的事情,忘记提交或者回滚。导致其它用户执行时访问回滚段,导致逻辑读增加。我kill后恢复正常。

--我做一个简单的例子来说明:

1.session 1:
SCOTT@test> select * from emp for update ;

2.session 2:
SCOTT@test> alter session set statistics_level=all ;

Session altered.

SCOTT@test> select * from emp ;
SCOTT@test> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  g5wp7pwtq4kwp, child number 0
-------------------------------------
select * from emp
Plan hash value: 3956160932
--------------------------------------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |       |     3 (100)|          |     14 |00:00:00.01 |      22 |
|   1 |  TABLE ACCESS FULL| EMP  |      1 |     14 |   532 |     3   (0)| 00:00:01 |     14 |00:00:00.01 |      22 |
--------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / EMP@SEL$1

--逻辑读增加到22.

3.回到session 1:
SCOTT@test> @xid
X
------------------------------
12.12.12998

    XIDUSN    XIDSLOT     XIDSQN     UBAFIL     UBABLK     UBAREC     UBASQN STATUS            USED_UBLK  USED_UREC XID              ADDR             C70
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- ---------------- ----------------------------------------------------------------------
        12         12      12998          3      12225          6       2897 ACTIVE                    2         14 0C000C00C6320000 00000000BBF8F000 ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU12_1585900997$' XID 12 12 12998;
                                                                                                                                                      ALTER SYSTEM DUMP UNDO HEADER '_SYSSMU12_1585900997$';
SCOTT@test> @viewlock;
   SID    SERIAL# USERNAME   OSUSER     MACHINE    LOCK_TYPE    MODE_HELD  MODE_REQUE LOCK_ID1   LOCK_ID2   OWNER  OBJECT_TYP OBJECT_NAME          BLOCK LOCKWAIT
------ ---------- ---------- ---------- ---------- ------------ ---------- ---------- ---------- ---------- ------ ---------- -------------------- ----- --------------------
   395       2201 SCOTT      oracle11g  hisdg      DML(TM)      Row-X (SX) None       73201      0          SCOTT  TABLE      EMP                  No
   395       2201 SCOTT      oracle11g  hisdg      Transaction  Exclusive  None       786444     12998                                             No

--可以发现有事务在emp表上。

SCOTT@test> rollback ;
Rollback complete.

--回到session 2:

SCOTT@test> select * from emp ;
SCOTT@test> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  g5wp7pwtq4kwp, child number 0
-------------------------------------
select * from emp
Plan hash value: 3956160932
--------------------------------------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |       |     3 (100)|          |     14 |00:00:00.01 |       7 |
|   1 |  TABLE ACCESS FULL| EMP  |      1 |     14 |   532 |     3   (0)| 00:00:01 |     14 |00:00:00.01 |       7 |
--------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / EMP@SEL$1

--逻辑读=7.

--有许多开发习惯在修改数据时,使用pl/developer时执行select * from t where ... for update;来操作,应该提醒做这些维护完成
--后,及时提交。

--我定位走了1个弯路。使用10200事件看看。
$ oerr ora 10200
10200, 00000, "consistent read buffer status"
// *Cause:
// *Action:

SCOTT@test> alter session set events '10200 trace name context forever, level 10';
Session altered.

SCOTT@test> select * from emp ;

SCOTT@test> alter session set events '10200 trace name context off';
Session altered.

ktrget2(): started for block  objd: 0x00011df1
env [0x2a97481924]: (scn: 0x0002.cbb97d23  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000661)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a97481924]: (scn: 0x0002.cbb97d23  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a97481924]: (scn: 0x0002.cbb97d23  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a97481924]: (scn: 0x0002.cbb97d23  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a97481924]: (scn: 0x0002.cbb97d23  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 1 on:  0x9afaac18  cr-scn: 0x0002.cbb97c9f  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c9f  sfl: 0
ktrexf(): returning 1 on:  0x8dfbd038  cr-scn: 0x0002.cbb97c02  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c02  sfl: 0
ktrexf(): returning 1 on:  0xa0f76ba8  cr-scn: 0x0002.cbb97b18  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97b18  sfl: 0
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrexf(): returning 1 on:  0x93fb4ec8  cr-scn: 0x0002.cbb95c13  xid: 0x000c.00c.000032c6  uba: 0x00c02fc0.0b51.25  cl-scn: 0x0002.cbb95c13  sfl: 0
showing 0x94fcd3d8 c000c0 (3) dscn 0:0 bcrp 2:cbb44400, bestcrp (nil)
new dscn 0:0 ret=3
showing 0x90f846e8 c000c0 (1) dscn 0:0 bcrp ffff:ffffffff, bestcrp (nil)
new dscn 0:0 ret=2
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg updating CR fields for 0x9aff7068, 16777367; 2:cbb97d23
kcbchg new CR fields for 0x9aff7068, 16777367; 2:cbb97d23
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a97481924]: (scn: 0x0002.cbb97d23  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0x9aff70d8  cr-scn: 0x0002.cbb97d23  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97d23  sfl: 0
ktrexf(): returning 1 on:  0x9afaac18  cr-scn: 0x0002.cbb97c9f  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c9f  sfl: 0
ktrexf(): returning 1 on:  0x8dfbd038  cr-scn: 0x0002.cbb97c02  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c02  sfl: 0
ktrexf(): returning 1 on:  0xa0f76ba8  cr-scn: 0x0002.cbb97b18  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97b18  sfl: 0
ktrexf(): returning 1 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrexf(): returning 1 on:  0x93fb4ec8  cr-scn: 0x0002.cbb95c13  xid: 0x000c.00c.000032c6  uba: 0x00c02fc0.0b51.25  cl-scn: 0x0002.cbb95c13  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1

SCOTT@test> @xid
X
------------------------------


XIDUSN    XIDSLOT     XIDSQN     UBAFIL     UBABLK     UBAREC     UBASQN STATUS  USED_UBLK  USED_UREC XID              ADDR             C70
------ ---------- ---------- ---------- ---------- ---------- ---------- ------ ---------- ---------- ---------------- ---------------- ----------------------------------------------------------------------
     5         15      48565          3      10948         36      12070 ACTIVE          1         14 05000F00B5BD0000 00000000BBF8F000 ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU5_2973757209$' XID 5 15 48565;
 
-- bdb5 = 48565,还是从xid可以看出,为了构造CR,逻辑读增加。

--提交后,再做跟踪:

*** 2015-03-20 10:08:01.956
ktrget2(): started for block  objd: 0x00011df1
env [0x2a9753a34c]: (scn: 0x0002.cbb97f8a  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000661)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a9753a34c]: (scn: 0x0002.cbb97f8a  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a9753a34c]: (scn: 0x0002.cbb97f8a  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a9753a34c]: (scn: 0x0002.cbb97f8a  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a9753a34c]: (scn: 0x0002.cbb97f8a  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 1 on:  0x9aff70d8  cr-scn: 0x0002.cbb97d23  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97d23  sfl: 0
ktrexf(): returning 1 on:  0x9afaac18  cr-scn: 0x0002.cbb97c9f  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c9f  sfl: 0
ktrexf(): returning 1 on:  0x8dfbd038  cr-scn: 0x0002.cbb97c02  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c02  sfl: 0
ktrexf(): returning 1 on:  0xa0f76ba8  cr-scn: 0x0002.cbb97b18  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97b18  sfl: 0
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1
ktrget2(): started for block  objd: 0x00011df1
env [0x2a9753a34c]: (scn: 0x0002.cbb97f8a  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  statement num=0  parent xid: 0x0000.000.00000000  st-scn: 0x0000.00000000  hi-scn: 0x0000.00000000  ma-scn: 0x0002.cbb97b08  flg: 0x00000660)
ktrexf(): returning 1 on:  0x9aff70d8  cr-scn: 0x0002.cbb97d23  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97d23  sfl: 0
ktrexf(): returning 1 on:  0x9afaac18  cr-scn: 0x0002.cbb97c9f  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c9f  sfl: 0
ktrexf(): returning 1 on:  0x8dfbd038  cr-scn: 0x0002.cbb97c02  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97c02  sfl: 0
ktrexf(): returning 1 on:  0xa0f76ba8  cr-scn: 0x0002.cbb97b18  xid: 0x0005.00f.0000bdb5  uba: 0x00c02ac4.2f26.17  cl-scn: 0x0002.cbb97b18  sfl: 0
ktrexf(): returning 9 on:  0xb9f42b0  cr-scn: 0xffff.ffffffff  xid: 0x0000.000.00000000  uba: 0x00000000.0000.00  cl-scn: 0xffff.ffffffff  sfl: 0
ktrgcm(): completed for block  objd: 0x00011df1
ktrget3(): completed for  block objd: 0x00011df1

--注意看没有kcbchg函数的调用。