首页 > 代码库 > 单块读
单块读
什么是单块读? 顾名思义,就是单个块单个块得读,等待事件表现为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掉之后,恢复要很长一段时间。
单块读
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。