• 低效的SQL引发的cache buffers chains latch


    1.低效的SQL
    
    低效的SQL语句时发生cache buffers chains 锁存器争用的最重要原因。多个进程同时扫描大范围的索引或表时,可能广泛
    
    地发生cache buffers chains latch争用。
    
     低效的SQL语句时怎样引起cache buffers chain latch争用的,我们可以测试进一步进行了解。测试方案如下:
    
    
    
    1) 创建cbc_test(id,name)表,对于ID列创建cbc_test_idx索引。ID列是唯一键,是选择性非常好的列。
    
    
    2)多个会话同时通过cbc_test_idx索引查询扫描cbc_test表
    
    
    3)广泛的索引扫描引起不必要的缓冲区查询的增加
    
    
    
    ----创建测试表
    SQL> create table cbc_test(id number,name char(100));
    
    表已创建。
    
    SQL>insert into cbc_test(id,name) select rownum,object_name from dba_objects;
    
    SQL> select count(*) from cbc_test;
    
      COUNT(*)
    ----------
        217740
    
    ---创建索引
    SQL> create index cbc_test_idx on cbc_test(id);
    
    索引已创建。
    
    ---扫描表cbc_test的Procedure
    create or replace Procedure cbc_do_select is
    begin
      --不必要的索引扫描
      for x in (select /*+ index(cbc_test cbc_test_idx)*/
                 *
                  from cbc_test
                 where id >= 0) loop
        null;
      end loop;
    end;
    
    
    ---2个会话同时执行
    
    SQL> var job_no number;
    begin
    for idx in 1 .. 20 loop
    dbms_job.submit(:job_no,'cbc_do_select;');
    commit;
    end loop;
    end;SQL>   2    3    4    5    6  
      7  /
    
    PL/SQL 过程已成功完成。
    
    
    
    查看ASH信息:
    530	1021634	33	15-6?? -14 09.43.26.937 é???	f73c0sc1z2y9k	latch: cache buffers chains	57	SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    531	1021634	83	15-6?? -14 09.43.26.937 é???	f73c0sc1z2y9k	resmgr:cpu quantum		SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    532	1021633	33	15-6?? -14 09.43.25.927 é???	f73c0sc1z2y9k	latch: cache buffers chains	57	SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    533	1021633	83	15-6?? -14 09.43.25.927 é???	f73c0sc1z2y9k	resmgr:cpu quantum		SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    534	1021632	33	15-6?? -14 09.43.24.907 é???	f73c0sc1z2y9k	latch: cache buffers chains	57	SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    535	1021632	83	15-6?? -14 09.43.24.907 é???	f73c0sc1z2y9k	resmgr:cpu quantum		SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    536	1021631	33	15-6?? -14 09.43.23.907 é???	f73c0sc1z2y9k	latch: cache buffers chains	57	SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    537	1021631	83	15-6?? -14 09.43.23.907 é???	f73c0sc1z2y9k	resmgr:cpu quantum		SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    538	1021630	33	15-6?? -14 09.43.22.897 é???	f73c0sc1z2y9k	latch: cache buffers chains	57	SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    539	1021630	83	15-6?? -14 09.43.22.897 é???	f73c0sc1z2y9k	resmgr:cpu quantum		SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    540	1021629	33	15-6?? -14 09.43.21.877 é???	f73c0sc1z2y9k	latch: cache buffers chains	57	SELECT /*+ index(cbc_test cbc_test_idx)*/ * FROM CBC_TEST WHERE ID>=0 
    
    查看等待事件;
      SID EVENT                          P1      P2 P3  p1raw
    1	33	latch: cache buffers chains	758421644	150	0	 000000002D34988C	0
    2	83	latch: cache buffers chains	758421644	150	0	 000000002D34988C	16
    
    
    查看latch: cache buffers chains p1 p2 p3 参数:
    
    latch: cache buffers chains 等待事件的3 个参数
    p1  代表的是内存中latch锁的地址
    p2  代表闩锁号
    p3   没意义
    
    SELECT OBJ data_object_id, FILE#, DBABLK,CLASS, STATE, TCH from x$bh where HLADDR='P1RAW';
    
    SQL> SELECT OBJ data_object_id, FILE#, DBABLK,CLASS, STATE, TCH,HLADDR from x$bh where HLADDR LIKE '%2D34988C%';
    
    DATA_OBJECT_ID	    FILE#     DBABLK	  CLASS      STATE	  TCH HLADDR
    -------------- ---------- ---------- ---------- ---------- ---------- --------
    	 75499		4      72988	      1 	 1	     0                   2D34988C
    	 75500		4      73454	      1 	 1	    0                    2D34988C
    	 75499		7     293294	      1 	 1	    0                    2D34988C
    	 75451		2      62537	      1 	 1	    2                    2D34988C
    
    
    
    SQL> SELECT object_id,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_ID IN (75499,75500,75499,75451);
    
     OBJECT_ID OBJECT_NAME
    ---------- --------------------------------------------------------------------------------------------------------------------------------
         75451 WRH$_ACTIVE_SESSION_HISTORY
         75499 CBC_TEST
         75500 CBC_TEST_IDX
         
     HLADDR      RAW(4) Hash Chain Latch Address
      

  • 相关阅读:
    About Spring
    execle导入后 数据 无刷新 显示在 输入页面
    前端小神龟 -- 分页导航栏
    如何在mysql命令窗口获取到程序正在执行的sql语句
    div+css(ul li)实现图片上文字下列表布局
    C#异常之(已有打开的与此 Command 相关联,已有打开的与此命令相关联的 DataReader,必须首先将它关闭。)
    台灣VR內容產業聯盟_技術推廣中心
    2014新的一年到来,祝大家新年快乐
    matlab 提取文件路径名称,用于实现遍历读取文件(我的目的是遍历图像)
    无监督学习一些算法的简要概括(一)-稀疏自编码
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3797845.html
Copyright © 2020-2023  润新知