<让oracle跑得更快-3> latch和等待

标签: oracle latch 等待 | 发表时间:2015-02-27 21:18 | 作者:
出处:http://www.iteye.com
经常有人把latch造成的等待事件误认为是lock造成的阻塞,其实这是两个完全不同的概念。在性能优化上,如果能够区别开这两个因素引起的性能问题,将能极大地提高我们的性能分析判断能力。
Latch是oracle为了 保护内存结构而发明出的一种资源,按照它保护的资源类型不同,可以把latch分成很多种。可以把latch理解为一种轻量级的锁,它不会造成阻塞,只会导致等待。这是两个截然不同的概念。 阻塞,是一种系统设计上的问题,而等待是一种系统资源争用的问题。
还可以参考java的阻塞和等待: http://www.outflush.com/2014/07/difference-between-block-and-wait-in-java/

导致latch争用而等待的原因非常多,内存中很多资源都可能存在争用。下面介绍两类最常见的latch争用,他们都会导致数据库的性能下降,这是一个DBA在做数据库性能分析和优化时必须知道的知识:
(1) 共享池中的latch争用
(2) 数据缓冲池中的latch争用

3.1 共享池中的latch争用
共享池中如果存在大量的sql被反复分析,就会造成很大的latch争用和长时间的等待, 最常见到的现象是没有绑定变量。最常见的几种共享池里的latch是:
Select * from v$latchname where name like ‘library cache%’
Latch#     name
157      library cache
158      library cache pin
159      library cache pin allocation
160      library cache load lock

在分析系统性能时,如果看到有library cache这样的latch争用,就可以断定是共享池出了问题,这种问题基本上是由sql语句导致的,比如没有绑定变量或者一些存储过程被反复分析。

3.2 数据缓冲池latch争用
访问频率非常高的数据块被称为热块(hot block),当很多用户一起访问某几个数据块时,就会导致一些latch争用。最常见的latch争用是:
(1) buffer 不适用waits
(2) cache buffer chain
这两个latch的争用分别发生在访问数据块的不同时刻。
当一个会话需要去访问一个内存块时,它首先要去一个像链表一样的结构去搜索这个数据块是否在内存中,当会话访问这个链表时需要获得一个latch,如果获取失败,将会产生latch cache buffer chain等待,导致这个等待的原因是访问相同数据块的会话太多或者这个列表太长。
当一个会话需要访问一个数据块,而这个数据块正在被另外一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个buffer busy waits等待。
产生这些latch争用的直接原因是太多的会话去访问相同的数据块导致热块问题, 造成热块的原因可能是数据库设置导致或者是重复执行的sql频繁访问一些相同数据块导致。
热块产生的原因不尽相同,按照数据块的类型,可以分为以下几种热块类型,不同的热块类型处理的方式都是不同的:
(1) 表数据块
(2) 索引数据块
(3) 索引根数据块
(4) 文件头数据块


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [oracle latch 等待] 推荐:

<让oracle跑得更快-3> latch和等待

- - ITeye博客
经常有人把latch造成的等待事件误认为是lock造成的阻塞,其实这是两个完全不同的概念. 在性能优化上,如果能够区别开这两个因素引起的性能问题,将能极大地提高我们的性能分析判断能力. Latch是oracle为了 保护内存结构而发明出的一种资源,按照它保护的资源类型不同,可以把latch分成很多种.

Oracle Tuning Log File Sync 等待事件的几种策略

- - CSDN博客数据库推荐文章
    在一个频繁 commit/rollback 或磁盘 I/O 有问题、大量物理读写争用.    那么、我们便会经常瞧见 LOG FILE SYNC 等待事件出现在 TOP EVENTS 中.    评估 LOG FILE SYNC等待事件的指标是平均等待时间、以及 AWR 后续的 WAIT EVENT HISTOGRAM.

Oracle查看等待事件_yh_zeng2的博客-CSDN博客

- -
--查询等待的会话ID , 阻塞的等待时间类型、事件ID 、 SQLID 等等信息. --会话发生过的所有等待事件查询. --被锁了之后,查看持有该锁的会话查询. --查询持有锁的会话执行了的SQL.

生产上数据库大量的latch free 导致的CPU资源耗尽的问题的解决

- - CSDN博客推荐文章
中午的时候,我们生产上的某个数据库,cpu一直居高不下. 通过如下的sql语句,我们查看当时数据库的等待,争用的情况:. 从event可以看到,是latch 的争用导致的原因. 通过如果的sql,查看是什么样的latch. P2就是 这个latch的name,通过v$latchname这个视图就可以知道哪个具体的latch.

Oracle 收购 Ksplice

- feng823 - LinuxTOY
实现无需重启即可为 Linux 内核打安全补丁的 Ksplice 被 Oracle 收购. 在被收购前, Ksplice 为 Fedora, Ubuntu 免费提供该功能,对于 RHEL 和 CentOS 则需要订阅其产品. Oracle 表示将把 Ksplice 带来的零宕机安全更新功能添加到 Oracle 产品订阅服务中,同时停止对其他企业级 Linux 发行版的支持,将 Oracle Unbreakable Linux 打造成唯一具备零宕机安全更新功能的企业级 Linux 发行版.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

oracle license计算

- Fenng - eagle&#39;s home
Oracle license的计算是基于CPU core的. 用core的数目乘以一个系数core factor就可以得到所需的oracle license的数目. 对于不同的CPU,core factor是不一样的,可以从oracle提供的这张列表中查到 Oracle Processor Core Factor Table.

Oracle Exadata初探

- - 技术改变世界 创新驱动中国 - 《程序员》官网
在我们看来,它是一个把硬件和软件根据合理的配置整合在一起的 Oracle数据库(在本文编写时是11gR2版本)平台. Exadata数据库机器包含了存储子系统,在存储层上运行着研发的新软件,这使得研发人员可以做一些在其他平台上无法完成的事情. 实际上,Exadata一开始是以一个存储系统形式诞生的,如果你跟参与研发此产品的人交谈,你经常会听到他们称存储组件为Exadata或者是SAGE (Storage Appliance for Grid Environments,网格环境存储设备),这是该产品研发项目的代码名称.

Oracle MySQL Or NoSQL续

- - Sky.Jian 朝阳的天空
接前面一篇,这里再将之前在“中国系统架构师大会”5周年的时候发布的纪念册“IT架构实录”上的一篇文章发出来,也算是前面博文中PPT的一个文字版解读吧. Oracle,MySQL 还是 NoSQL. 随着阿里系的“去IOE”运动在社区的宣传声越来越大,国内正在掀起一股“去xxx”的技术潮. 不仅仅是互联网企业,包括运营商以及金融机构都已经开始加入到这个潮流之中.

[转]Oracle 碎片

- - 小鸥的博客
  当生成一个数据库时,它会 分成称为表空间( Tablespace )的多个逻辑段( Segment ),如系统( System )表空间 , 临时( Temporary )表空间等. 一个表空间可以包含多个数据范围( Extent )和一个或多个自由范围块,即自由空间( Free Space ).