latch分类
从oracle 9201起,oracle根据不同的spin_count对latch进行了分类。为什么要进行这样的分类了?因为以前版本中,改一个latch的spin_count,会牵一发而动全身,让所有latch的spin_count都被同样地改变了。这种做法明显不太具有实际应用的可行性。所以oracle根据不同的spin_count对latch分成了8类,说明你可以把系统中的latch按它们的不同spin_count分成8类,但它们的系统默认值spin_count都是16000。这样做有什么应用前景?可以根据系统自身资源使用情况,针对不同latch不同资源使用特点,优化各个latch的spin_count.如某个latch的spin成功率
latch的层次概念
latch的层次概念为什么要有这个层次概念?大家都知道oracle锁有一个死锁问题,那么latch了?有没有可能两个进程都持有对方正在等待的latch而形成死锁现象?oracle的latch没有这个现象,为什么?就因为有层次的概念,有效的防止latch死锁现象。那么是如何防止的了?那就要说oracle是怎么用这个level的。关层次oracle有两个规则分别对应不同的latch请求模式:一个是在愿意等待模式下,一个进程请求的latch的level必须高于这个进程现有持有的latch level。一个是在不愿意等待模式下,一个进程不能出现持有两个以上同一层次上的latch的情况。这
Enqueue&Lock and Latch
Enqueue&Lock and Latch Enqueue 和Latch的层次是不一样的,它们不是类似物,不具可比性。而latch 同lock是一个层面的。而enqueue是oracle系统内一个队列,一个等待某个锁的队列,保证对这个锁请求的有序性,FIFO。所以主要讲一下Latch 和Lock1.保护对象不同,一个保护内存结构,一个保护对象结构。2.保护方法不同,一个无序竞争,一个是有序竞争。3.请求模式不同,前者只有二种,后者多达6种。4.可见范围不同,latch保护的是SGA里面的东东,所以当然与实例有密不可分的关系。某个实例里的latch跟其它的实例不搭界的。而lock就不同了,
Free buffer waits
Free buffer waits顾名思义就是data buffer里没有空闲可用buffer,使得当前会话当前进程处于Free buffer wiats等待事件。而oracle这时在做的是DBWR写脏块,清理buffer.为什么会产生这个等待事件?很直接的一个反应是data buffer不够大。这是可能原因之一:原因还有其它如:1.DBWn进程写速度不够快,或触发不够勤快,或有没有使用足够DBWn进程。2.系统本身I/O速度比较慢。3.延迟块清除。4.SQL语句太滥。这么多原因如何判断具体是那个原因导致这个等待事件?如果Buffer cache size不够大。有可能所有buffer都在使用中,且没有dirty buffer可写
我为什么要写等待事件的学习笔记
写等待事件的学习笔记写博客时我是诚惶诚恐!因为一来,我写的学习笔记不是在自己的私人笔记本里,而是在公开blog上,(虽然不一定会有看众,但毕竟是很多人都有可能看到!)一提到公开,公布于众,让大众来查看,评判,我便惶恐起来。厚积薄发的道理我还是懂的,且深以为然。所以按我的性子,即使我是TOM那样的大师,如果要把自己对oracle的一些看法和理解公布于众,我也会三思而行,宜少不多宜精不滥,能省则省。二来我毕竟不是什么大师,不是高手,只是一个中级菜鸟,且我深信山外有山楼外有楼,个人有能力是很有限的,更何况我这个庸人!那我
Buffer busy waits
Buffer busy waits 等待事件表示当前在等待中的会话想操作的buffer 正在被别的会话占有使用或正在被别的会话读入到buffer中。所以要等待别的会话使用完后释放这个buffer。产生这个等待事件的原因很多。我就挑二个主要和常见的原因讲述我的见解。第一种数据块在buffer中,被其它会话占有进行DML操作,导致后面的会话大量buffer busy waits等待。解决办法1.减少每一个块的row数。a.修改pctfree参数.重建对象,把pctfree参数值增加,注:增加后与pctused的差不要太近,如果这个差太小会造成free_list的竟争。如把pctfree设为49 pctused为50,
等待事件之log篇
Log buffer space 表示会话正在进行把UGA中redo entries 复制到log buffer中,但是log buffer里没有可用的空间,(在当前设置下lgwr写速度跟不上产生速度过快的日志量)所以等待log buffer中的可用空间。这时系统等待log buffer清理,以便释放buffer。也就是等待触发lgwr进行redo entries 写操作的事件。可能原因是1。log buffer size 不妥当2。lgwr写性能有问题,一些原因导致写的速度比较慢。解决办法1。加大log buffer。注没必要把log buffer设的太大,具体size看系统是不是很忙。一般系统不是特大特忙的系统1M左右或以这个基础上稍微调整