当前位置:  数据库>oracle

使用了索引就一定能避免cache buffers chains争用吗

    来源: 互联网  发布时间:2017-06-22

    本文导语: 访问buffer cache里的数据块时需要先以独占模式申请管理hash bucket的latch,这个latch的名称就是所谓的cache buffers chains,系统中出现latch:cache buffers chains争用往往意味着以下两种可能:1、多个会话并发访问相同的数据块(这是最常见的...

访问buffer cache里的数据块时需要先以独占模式申请管理hash bucket的latch,这个latch的名称就是所谓的cache buffers chains,系统中出现latch:cache buffers chains争用往往意味着以下两种可能:
1、多个会话并发访问相同的数据块(这是最常见的一种情况)
2、不同的数据块挂载在同一个hash bucket下,或者虽然挂载在不同的hash bucket下但这些hash bucket恰好受同一个cache buffer chains latch管理(一个latch可以管理多个hash bucket)

以上只是概念上的笼统描述,是否真会引起latch:cache buffers chains等待还与SQL语句的访问路径有关:Full Table Scan的访问路径下确实同上面所描述的,
但在用到索引的情况下是否会触发latch:cache buffers chains取决于以下5种因素:
1、如果是针对于唯一性索引的叶块的等值访问,这里包括仅访问唯一性索引本身和既访问唯一性索引又通过唯一性索引访问数据表两种情况,访问时都会以共享模式申请管理hash bucket的latch,所以即便多个会话并发访问buffer cache里的同一个唯一性索引的块,也不会出现latch:cache buffers chains等待事件,这时能观察到的等待事件一般是"cursor: pin S"

2、如果是针对于唯一性索引的叶块的非等值访问,当然也包含仅访问索引和既访问索引又访问数据表两种情况,访问时都会以独占模式申请管理hash bucket的latch,多个会话并发访问buffer cache里的同一个唯一性索引的块,会出现latch:cache buffers chains等待事件

3、对于非唯一性索引的叶块,和表里的数据块一样会以独占模式申请cache buffers chains latch

4、对于唯一性索引里的同一个索引块如果两个session同时以等值方式访问不会出现latch:cache buffers chains等待

5、对于唯一性索引里的同一个索引块如果分别被两个session以等值、非等值方式访问时会出现latch:cache buffers chains等待

6、没有索引
这里之所以强调叶块,是因为索引里的非叶块访问时都是以共享方式持有cache buffers chains latch的,对于唯一性和非唯一性索引均是如此


以下我们构造几个测试场景了解一下Oracle是如何管理cache buffers chains latch的:其中1~3测试在不同block被同一个latch管理的场景下进行;4~5测试在同一个block被多个session并发访问的场景下进行


#####场景1:一个非唯一性索引的数据块、一个表的数据块被不同的session访问引起latch: cache buffers chains争用
---创建表和索引
create table scott.t1119_cb1 tablespace ts1116 as select * from all_users;
create index scott.ind_t1119_cb1 on scott.t1119_cb1(user_id) tablespace ts1116 ;


---执行计划用到了索引
explain plan for select * from scott.t1119_cb1 where user_id=0;
set linesize 120 pagesize 100
select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1836694578


---------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |     1 |    39 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T1119_CB1     |     1 |    39 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IND_T1119_CB1 |     1 |       |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------


---获取表、索引的object_id
select * from dba_objects where object_name in ('T1119_CB1','IND_T1119_CB1');
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID
SCOTT IND_T1119_CB1 41332
SCOTT T1119_CB1 41331


set linesize 150
select obj,indx,addr,hladdr,flag,lru_flag,class,state,dbarfil,dbablk,ba,tch from x$bh where obj=41332;
       OBJ       INDX ADDR             HLADDR                 FLAG   LRU_FLAG      CLASS      STATE    DBARFIL     DBABLK BA                      TCH
---------- ---------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ----------
     41332      82300 00000001109A5358 07000001BCD67618   35651584          0          9          1          5      60713 070000012ACE6000          1
     41332     156749 00000001109A5358 07000001BCE25910   35651584          0          1          1          5      60715 0700000123020000          5   select obj,indx,addr,hladdr,flag,lru_flag,class,state,dbarfil,dbablk,ba,tch from x$bh where obj=41332;


       OBJ       INDX ADDR             HLADDR                 FLAG   LRU_FLAG      CLASS      STATE    DBARFIL     DBABLK BA                      TCH
---------- ---------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ----------
     41332      82300 00000001109A5358 07000001BCD67618   35651584          0          9          1          5      60713 070000012ACE6000          1
     41332     156750 00000001109A5358 07000001BCE25910   35651584          0          1          1          5      60715 0700000123020000          6  


    
 
 

您可能感兴趣的文章:

  • SQL Server 索引结构及其使用(一)--深入浅出理解索引结构第1/4页
  • sql server对索引的使用
  • 解决多级索引速度慢的问题可否像解决多级页表那样使用TLB?
  • mysql中索引使用不当速度比没加索引还慢的测试
  • oracle10g全文索引自动同步语句使用方法
  • bitmap 索引和 B-tree 索引在使用中如何选择
  • C#入门之索引器使用实例
  • 在Oracle中监控和跟踪索引使用情况
  • 结构化文档全文索引的使用方式,以DB2 TIE为例,讲解一下结构化文档的全文索引的使用方法,希望对我的另一个帖子起到抛砖引玉的作用。
  • mysql5.6.19下子查询为什么无法使用索引
  • SQLSERVER全文目录全文索引的使用方法和区别讲解
  • SQL_Server全文索引的使用实例演示
  • 深度揭露Oracle索引使用中的限制
  • SQL Server 索引结构及其使用(二) 改善SQL语句第1/3页
  • MySQL索引使用全程分析
  • oracle 索引不能使用深入解析
  • SQL优化基础 使用索引(一个小例子)
  • MySQL索引类型总结和使用技巧以及注意事项
  • SQLSERVER如何查看索引缺失及DMV使用介绍
  • Sql Server 索引使用情况及优化的相关Sql语句分享
  • 在涉及临界资源时常常使用锁, 大量的锁会大大降低程序的效率,请问如何避免这种情况?
  • 基于WTL中使用双缓冲避免闪烁的解决方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何设定pipe使用的buffer大小
  • php output_buffering 缓存使用介绍
  • php缓冲 output_buffering和ob_start使用介绍
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    SQL Server 索引结构及其使用(一)--深入浅出理解索引结构第1/4页 iis7站长之家