Buffer Busy Waits
1. Basic Info
访问特定块的进程需要得到对特定块获得 Buffer Lock。假如要修改特定的块,需要以独占(Exclusive)模式获得的 Buffer Lock。相反,只是要读取特定块需要以共享(Shared)模式获得 Buffer Lock。
如果进程 A 对块 X 已获得 Buffer Lock 的状态时,因进程 B 对同一个块不能以互换模式获取而进行 Buffer Lock 等待。 这时发生的就是 buffer busy waits 事件。
Buffer busy waits 最常见的情况是在多个进程对同一个块进行 Insert 或者 Update 的情况。对块进行 Insert 或者 Update 的时候, 要求以独占模式获取 Buffer Lock 的争用,通过 buffer busy wait 事件来进行观察。
2 Parameter & Wait Time
2.1 Wait Parameters
buffer busy waits 等待事件的等待参数如下。
2.2 Wait Time
一般等待1秒。假如为了以独占模式获取 Buffer Lock 等待 Buffer busy wait 事件 1 秒后, 再次获取时,需要等待 3 秒。要读取特定块的会话必须获得 Buffer Lock。
3. Check Point & Solution
因不同的块类而发生 buffer busy waits 事件的原因和解决方法如下。
1. Basic Info
访问特定块的进程需要得到对特定块获得 Buffer Lock。假如要修改特定的块,需要以独占(Exclusive)模式获得的 Buffer Lock。相反,只是要读取特定块需要以共享(Shared)模式获得 Buffer Lock。
如果进程 A 对块 X 已获得 Buffer Lock 的状态时,因进程 B 对同一个块不能以互换模式获取而进行 Buffer Lock 等待。 这时发生的就是 buffer busy waits 事件。
Buffer busy waits 最常见的情况是在多个进程对同一个块进行 Insert 或者 Update 的情况。对块进行 Insert 或者 Update 的时候, 要求以独占模式获取 Buffer Lock 的争用,通过 buffer busy wait 事件来进行观察。
2 Parameter & Wait Time
2.1 Wait Parameters
buffer busy waits 等待事件的等待参数如下。
P1: File#
P2: Block#
P3: 在 Oracle 10g 表示的是块类 (block class),在 Oracle 9i 表示的是 Reason Code。
2.2 Wait Time
一般等待1秒。假如为了以独占模式获取 Buffer Lock 等待 Buffer busy wait 事件 1 秒后, 再次获取时,需要等待 3 秒。要读取特定块的会话必须获得 Buffer Lock。
3. Check Point & Solution
因不同的块类而发生 buffer busy waits 事件的原因和解决方法如下。
数据块 (块类=1) | 用户应用程序的多个会话对同一块执行修改的时,这种块称一般称为热块 (Hot Block)。 解决热快的方法有以下几种。对用户进程进行修改: 通过对应用修改使得多个会话不会同时对一个块进行修改。 - PCTFREE 值得调整: 通过加大 PCTFREE 值创建对象时,在一个块里的行数自然会减少,从而减少对块的争用。 - 右倾索引的修改:索引键右倾斜会发生对索引叶节点的争论。最具代表性的是利用序列(sequence)值产生的键的值作为索引使用。这时可以利用反转索引 (Reverse Index)使键值分散,从而减少争用。 - 使用 FLM 时:使用 FLM(Free List Management) 的时候,在 Storage 属性中要赋予充分大的FREELISTS 属性值。FREELISTS的值是 1 的时候,因为会有多个进程对同一个块 Insert 而发生争用。FREELISTS值最好赋予成可以同时执行 Insert 进行的最大值 - 分区 (partitioning):通过段的分区可以任意的分散块。如果通过使用像哈希分区(Hash Partition)技术把聚集在一个块上的块用物理方法随机分散到任意空间上,以此可以减少争用。 |
段头 (块类=4) | 使用 FLM 的时候,在 Storage 属性中赋予充分大的 FREELISTS 属性值。如果是在 OPS 或 RAC 的环境下,需要给 FREELIST GROUPS 赋予跟实例个数一样的值。赋予了 FREELIST GROUPS 属性值后,与段头块使用不同的 FREELIST, 所以会减少对段头块的争用。 |
位图块 (块类= 8, 9, 10) | 使用 ASSM (Automatic Segment Space Management) 时可能会发生三个阶段的位图块的争用。位图块中发生的块争用无法利用 Oracle的调优而改善,而是要通过应用程序的修改要减少过多的并发的DML。 ASSM 堆大规模的同时 DML 相比较 FLM 是有一点的开销。但大部分情况下的这种开销是可以无视的。ASSM 相比 FLM 提供更多有点,特别对 RAC 提供最佳性能。 |
回滚头快 (块类=15+2*r) | 使用 AUM(Automatic Undo Management)的时候在回滚头的块不会经常出现发生争用。使用手动模式的回滚头段时,提供足量的回滚段数而减少回滚段的争用。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31135309/viewspace-2092634/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31135309/viewspace-2092634/