enq: RO fast object reuse
它是用于同步前台进程与后台进程(dbwr, ckpt)的。当你truncate或者drop一个对象的时候,前台进程,首先获取一个RO enq, 以排它模式。
CKPT进程,请求单对象checkpoint,并请求DBWr写脏块,并把buffer里的块无效化。DBWR把所有的块写完以后, 前台进程释放RO enq,这是它使用的过程。
如果有多个session同时truncate/drop就会发生争用。
truncate, drop之前要把buffer pool刷出去。
D111 2015/4/18 18:55:07
是的
上海2015/4/18 18:55:15
_db_fast_obj_truncate把这个参数关掉,truncate时,这个行为就没了。
D111- 2015/4/18 18:55:17
所以 ddl操作也是比较费资源的
上海 2015/4/18 18:55:28
要刷出去就要加RO enq.
D111 2015/4/18 18:55:53
直路径读之前,也有类似的行为。。。
上海2015/4/18 18:59:11
enq: KO - fast object checkpoint
D103 2015/4/18 19:00:45
恩 研究研究
上海 2015/4/18 19:01:12
在direct path read之前,也要把脏块先写进数据文件, 如果ckpt,dbwr不够快等原因,就会有KO的等待。
上海2015/4/18 19:02:13
SQL> r
1* select description from v$lock_type where type='KO'
DESCRIPTION
--------------------------------------------------------------------------------
Coordinates checkpointing of multiple objects
D103- 2015/4/18 19:02:18
direct path read 之前为什么要先写 脏块呢
D103 2015/4/18 19:02:28
以为要从磁盘 读 最新的 是吧
D1112015/4/18 19:02:34
因为不走 buffer cache
上海 2015/4/18 19:02:43
你想,它从数据文件直接读。。。不写脏块,那不读错了呀。
上海 2015/4/18 19:02:46
是的。
D103 2015/4/18 19:02:58
明白
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-1585026/ ,如需转载,请注明出处,否则将追究法律责任。