Select/Update 引起的read by other session

来源:互联网 发布:王乐平1368单词淘宝 编辑:程序博客网 时间:2024/05/19 18:45
Select/Update 引起的buffer lock争用于Select/Select 或Update/Update 引起的buffer lock 争用机制有很大差异。Oracle 的Select 操作i奔上一致性读取(cr)为基础,若实际应该读取的数据已修改,则必须读取持有过去映像的CR块。这时若CR块不在当前的高速缓冲区上时,则应该从磁盘读取撤销块。若多个会话试图读取撤销块时,在将撤销块载入到内存上的过程中发生buffer lock争用。因此Select/Update引起的buffer lock争用会在如下情况发生:*特定进程修改特定表,数据的过去映像记录在撤销块。*很多进程试图同时(或之后)读取已修改的数据。让我们通过测试对此进行确认,测试方案如下:1)创建拥有5W行的BFW_TEST表2)一个进程上对BFW_TEST表执行Update,以此创建撤销块。3)多个进程同时对已修改的数据执行读取(select)操作4)在此过程中发生buffer lock争用。【测试6】Select/Update 引起的buffer lock争用--执行select 的procedurecreate or replace procedure  bfw_do_selectis begin for x in (select t1.id as ID1,t2.id as ID2 from bfw_test t1,bfw_test t2 where rownum<=500000) loop null; end loop; end;---对相同的表执行Update的Procedurecreate or replace procedure bfw_do_updateis begin           update bfw_test set id='';           end;---在执行Update期间,多个会话同时执行Select操作。var job_no number;begin    dbms_job.submit(:job_no,'bfw_do_update;');    commit;    for idx in 1 .. 10 loop      dbms_job.submit(:job_no,'bfw_do_select;');      end loop;      commit;      end;124-6月 -14 11.24.32.652 上午6db file sequential read316295100316295224-6月 -14 11.24.32.652 上午11db file sequential read37593611003759361324-6月 -14 11.24.32.652 上午13read by other session3162952200316295424-6月 -14 11.24.32.652 上午15read by other session3162952200316295924-6月 -14 11.24.32.652 上午1147read by other session31629522003162951024-6月 -14 11.24.32.652 上午1149read by other session31629522003162951124-6月 -14 11.24.32.652 上午1151read by other session31629522003162951224-6月 -14 11.24.32.652 上午1713read by other session31629522003162951424-6月 -14 11.24.32.652 上午1718read by other session31629522003162951524-6月 -14 11.24.32.652 上午1720read by other session31629522003162951624-6月 -14 11.24.31.642 上午6read by other session3167052200316705查看访问的对象:SQL>  select owner,segment_name,segment_type from dba_extents where file_id=3 and 16295 between block_id and block_id + blocks-1;  2  OWNER   SEGMENT_NAME      SEGMENT_TYPE---------- --------------------------------------------------------------------------------- ------------------SYS   _SYSSMU3_4004931649$      TYPE2 UNDO

0 0