什么是单块读?
顾名思义,就是单个块单个块得读,等待事件表现为db file sequential read;
单块读有哪些情况?
大部分索引扫描是单块读(除index fast full scan),rowid回表是单块读,undo里读数据是单块读,行迁移行链接是单块读,读取段头是单块读,读边界块是单块读。
现在就来探讨下undo里读数据是单块读的情况:
--session1:
SQL> begin
2 for x in 1..1000000 loop
3 update t set id=999;
4 end loop;
5 commit;
6 end;
7 /
执行了太久了,不出结果
--session2:
SQL> select count(*) from t;
--session3:
SQL> @getsession_my
SID_SERIAL SQL_ID_NUM P_NAME P_VALUE EVENT SQL_TEXT MINUTE1 MINUTE_EXEC INST_ID USERNAME
---------- --------------- --------------- --------------- ------------------------- -------------------- ---------- ----------- ---------- ----------
MACHINE
---------------
1,7 7kyc4rsrd3q1b,0 address 837617808 latch: cache buffers chai UPDATE T SET ID=999 469.68 7.1 1 SCOTT
number 150 ns
tries 0
lhj
29,871 cyzznbykb509s,0 file# 3 db file sequential read select count(*) from .98 .58 1 SCOTT
block# 398158 t
blocks 1
lhj
2 rows selected.
Elapsed: 00:00:00.09
--这里select count(*) from t 对应的等待时间为 db file sequential read
--隔一会再查还是一样
SQL> @getsession_my
SID_SERIAL SQL_ID_NUM P_NAME P_VALUE EVENT SQL_TEXT MINUTE1 MINUTE_EXEC INST_ID USERNAME
---------- --------------- --------------- --------------- ------------------------- -------------------- ---------- ----------- ---------- ----------
MACHINE
---------------
1,7 7kyc4rsrd3q1b,0 count 1 Data file init write UPDATE T SET ID=999 470.17 7.58 1 SCOTT
intr 256
timeout 4294967295
lhj
29,871 cyzznbykb509s,0 file# 3 db file sequential read select count(*) from 1.47 1.07 1 SCOTT
block# 419088 t
blocks 1
lhj
2 rows selected.
Elapsed: 00:00:00.01
--file#对应的是undo表空间
SQL> select file_id,tablespace_name from dba_data_files where file_id = 3;
FILE_ID TABLESPACE_NAME
---------- ------------------------------
3 UNDOTBS1 --可见对应的是undo表空间
1 row selected.
Elapsed: 00:00:11.88
说明表在做dml的时候,此时再发出一个关于此表的查询,如果查询的数据刚好是dml的数据,那么是从undo表空间读取的。
undo有优点也有缺点:优点是能保证能保证数据的准确性,在修改数据之前,oracle会把要修改的copy到undo表空间,事务成功了则释放可重新利用undo,事务失败了则通过undo来回滚到dml之前。这是oracle独有的机制;缺点也很明显,就是undo里面读数据是单块读,速度非常慢。这也就是为什么很多数据库down掉之后,恢复要很长一段时间。
单块读
最新推荐文章于 2022-07-10 21:16:53 发布