通过案例学调优之--和 LOG BUFFER 相关的主要 Latch

通过案例学调优之--和 LOG BUFFER 相关的主要 Latch 


4.1、和 LOG BUFFER 相关的主要 Latch 

有:  Latch:Redo Copy
      Latch:Redo Allocation Latch

4.2 当一个进程在修改数据时候将会产生 Redo,这个 Redo 首先在 PGA 中保存。

然后进程需要
获取Redo Copy Latch(这个Latch的个数由隐含参数_log_simultaneous_copies决定),当获
得 Redo Copy Latch 后,进程接着获取 Redo Allocation Latch 来分配 Redo Log Buffer 中的空间,
空间分配完成后,释放 Redo Allocation Latch。然后进程把 PGA 里临时存放的 Redo 信息复制
到 Redo Log Buffer,复制完成后,释放 Redo Copy Latch。

4.3 逻辑架构如下: 

案例分析:

测试redo中Latch的竞争

1、建立测试环境
15:08:51 [email protected] prod >select name ,bytes/1024/1024 from v$sgastat where rownum <6;
NAME                       BYTES/1024/1024
-------------------------- ---------------
fixed_sga                       1.27443695
buffer_cache                            60
log_buffer                       6.0078125
kkj jobq  wor                   .003913879
dpslut_kfdsg                    .000244141

  建立一个最小的日志组
15:09:33 [email protected] prod >select group#,sequence#,status,bytes/1024/1024 from v$log;
    GROUP#  SEQUENCE# STATUS           BYTES/1024/1024
---------- ---------- ---------------- ---------------
         4        108 CURRENT                        4
         5        106 INACTIVE                       4
         
2、建立三张测试表         
15:11:59 [email protected] prod >create table tb1 as select * from user_objects;
Table created.
15:13:48 [email protected] prod >select count(*) from tb1;
  COUNT(*)
----------
    376832
    
15:19:16 [email protected] prod >create table tb2 as select * from tb1 where rownum <100000;
Table created.

15:20:30 [email protected] prod >create table tb3 as select * from tb1 where rownum <100000;
Table created.

4、建立测试脚本
[[email protected] ~]$ cat 22.sh
#!/bin/bash
export ORACLE_SID=prod
count=0
while [ $count -lt 1000 ]
do
sqlplus ‘scott/tiger‘<<EOF
update tb1 set object_id=1000 ;
rollback;
EOF
count=`expr $count + 1`
done

[[email protected] ~]$ cat 33.sh
#!/bin/bash
export ORACLE_SID=prod
count=0
while [ $count -lt 1000 ]
do
sqlplus ‘scott/tiger‘<<EOF
update tb2 set object_id=1000 ;
rollback;
EOF
count=`expr $count + 1`
done

[[email protected] ~]$ cat 44.sh
#!/bin/bash
export ORACLE_SID=prod
count=0
while [ $count -lt 1000 ]
do
sqlplus ‘scott/tiger‘<<EOF
update tb3 set object_id=1000 ;
rollback;
EOF
count=`expr $count + 1`
done

5、通过3个session,运行脚本

6、查看session event
15:22:08 [email protected] prod >select sid,username ,event from v$session where username=‘SCOTT‘;
       SID USERNAME                       EVENT
---------- ------------------------------ ----------------------------------------------------------------
        31 SCOTT                          log file switch (checkpoint incomplete)
        45 SCOTT                          enq: TX - row lock contention
Elapsed: 00:00:00.00
15:22:14 [email protected] prod >/
       SID USERNAME                       EVENT
---------- ------------------------------ ----------------------------------------------------------------
        31 SCOTT                          log file switch completion
        41 SCOTT                          enq: TX - row lock contention
        44 SCOTT                          log file switch completion
        45 SCOTT                          enq: TX - row lock contention
        47 SCOTT                          log file switch completion
15:23:42 [email protected] prod >/
       SID USERNAME                       EVENT
---------- ------------------------------ ----------------------------------------------------------------
        31 SCOTT                          db file sequential read
        41 SCOTT                          enq: TX - row lock contention
        44 SCOTT                          latch: redo copy
        45 SCOTT                          enq: TX - row lock contention
        47 SCOTT                          latch: redo allocation
15:26:54 [email protected] prod >r
  1* select sid,username ,event from v$session where username=‘SCOTT‘
       SID USERNAME                       EVENT
---------- ------------------------------ ----------------------------------------------------------------
        31 SCOTT                          log file switch completion
        41 SCOTT                          enq: TX - row lock contention
        44 SCOTT                          log file switch completion
        45 SCOTT                          enq: TX - row lock contention
        47 SCOTT                          log file switch completion

        
7、查看redo latch竞争        
15:25:11 [email protected] prod >select name,misses,sleeps,spin_gets,wait_time from v$latch
15:25:34   2   where name in (‘redo copy‘,‘redo allocation‘);
NAME                                                                 MISSES     SLEEPS  SPIN_GETS  WAIT_TIME
---------------------------------------------------------------- ---------- ---------- ---------- ----------
redo copy                                                               101        116          0     279828
redo allocation                                                          48         50          0      54560
Elapsed: 00:00:00.02
15:25:53 [email protected] prod >/
NAME                                                                 MISSES     SLEEPS  SPIN_GETS  WAIT_TIME
---------------------------------------------------------------- ---------- ---------- ---------- ----------
redo copy                                                               111        126          0     300388
redo allocation                                                          50         52          0      56124
Elapsed: 00:00:00.01
15:26:08 [email protected] prod >/
NAME                                                                 MISSES     SLEEPS  SPIN_GETS  WAIT_TIME
---------------------------------------------------------------- ---------- ---------- ---------- ----------
redo copy                                                               111        126          0     300388
redo allocation                                                          50         52          0      56124
Elapsed: 00:00:00.00
15:26:12 [email protected] prod >/
NAME                                                                 MISSES     SLEEPS  SPIN_GETS  WAIT_TIME
---------------------------------------------------------------- ---------- ---------- ---------- ----------
redo copy                                                               202        234          0     594703
redo allocation                                                          75         79          0      83114
Elapsed: 00:00:00.00
15:27:58 [email protected] prod >/
NAME                                                                 MISSES     SLEEPS  SPIN_GETS  WAIT_TIME
---------------------------------------------------------------- ---------- ---------- ---------- ----------
redo copy                                                               220        258          0     661577
redo allocation                                                          81         85          0     103697

15:28:29 [email protected] prod >/

NAME                                                                 MISSES     SLEEPS  SPIN_GETS  WAIT_TIME
---------------------------------------------------------------- ---------- ---------- ---------- ----------
redo copy                                                               346        400          1    1174583
redo allocation                                                         146        150          0     189359

可以看到,在系统中产生了大量的redo latch的争用。

时间: 2024-11-04 12:35:00

通过案例学调优之--和 LOG BUFFER 相关的主要 Latch的相关文章

通过案例学调优之--模拟buffer busy waits事件

通过案例学调优之--模拟buffer busy waits事件 buffer busy waits等待事件     Wait occurs when a session attempts to access a block in memory, is denied and must wait until the buffer becomes available. This event happens because a buffer is either being read into the b

通过案例学调优之--Oracle Time Model(时间模型)

通过案例学调优之--Oracle Time Model(时间模型) 数据库时间  优化不仅仅是缩短等待时间.优化旨在缩短最终用户响应时间和(或)尽可能减少每个请求占用的平均资源.有时这些目标可同时实现,而有时则需要进行折衷(如在并行查询时).通常可以认为,优化就是避免以浪费的方式占用或保留资源. 对数据库发出的任何请求都由两个不同的段组成:等待时间(数据库等待时间)和服务时间(数据库 CPU 时间).等待时间是各种数据库实例资源的所有等待时间的总和.CPU 时间是实际处理请求时消耗的时间的总和.

通过案例学调优之--RECORDS_PER_BLOCK参数

通过案例学调优之--RECORDS_PER_BLOCK参数      RECORDS_PER_BLOCK参数用于设定每个BLOCK中记录数的最大值,其先找到当前表所有BLOCK中容纳的最大行数,并会把这个数字记录到数据字典,以后任何导致BLOCK行数超过这个数字的插入都会被拒绝. RECORDS_PER_BLOCK参数是为位图索引而生的,能够改善位图索引的存储,减小位图索引的长度.这样,利用该位图索引的时候,就能获得比较好的效率了.     测试案例: 1.表默认的存储分析 15:45:46 [

通过案例学调优之--AWR基本概念

通过案例学调优之--AWR基本概念 一.Automatic Workload Repository 概念详解 Automatic Workload Repository (AWR) 收集.处理和维护用于问题诊断的性能统计信息.该数据既存在于数据块中,也存在于内存中.AWR 收集的数据可以通过报告和视图进行查看. AWR 处理和收集的统计信息包括: 1.确定数据块 segment 访问路径和使用情况的对象统计信息 2.基于数据库活动的时间使用情况的时间模型统计信息,可在 V$SYS_TIME_MO

通过案例学调优之--Oracle参数(db_file_multiblock_read_count)

通过案例学调优之--Oracle参数(db_file_multiblock_read_count) 应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2   Oracle DB_FILE_MULTIBLOCK_READ_COUNT是Oracle比较重要的一个全局性参数,可以影响系统级别及sessioin级别.主要是用于设置最小化表扫描时Oracle一次按顺序能够读取的数据块数.通常情况下,我们看到top events中的等待事件db file scatte

通过案例学调优之--AWR BaseLine管理

通过案例学调优之--AWR BaseLine管理 BaseLine Baseline 是指一个特定时间段内的性能数据,保留这些数据是为了在性能问题产生时与其他类似的工作负载时间段进行比较.Baseline 中包含的快照将从自动 AWR 清理进程中排除,并无限期的保留. 在 Oracle Database 中存在多种类型的 baseline:      Fixed Baseline:fixed baseline 表示的是您指定的一个固定的.连续的时间段.在创建 fixed baseline 之前,

通过案例学调优之--SQL Profile

通过案例学调优之--SQL Profile 一.什么是SQL Profile(概要) SQL Profile在性能优化中占有一个重要的位置. MOS里这么描述SQL Profile: SQL Profile是10g中的新特性,作为自动SQL调整过程的一部分,由Oracle企业管理器来管理.除了OEM,SQL Profile可以通过DBMS_SQLTUNE包来进行管理. 查询优化器有时候会因为缺乏足够的信息,而对一条SQL语句做出错误的估计,生成糟糕的执行计划.而自动SQL调整通过SQL概要分析来

通过案例学调优之--AWR baseline对比生成AWR报告

通过案例学调优之--AWR Baseline对比生成AWR报告 一.建立Baseline 查看snapshot: 16:46:08 [email protected] prod >select SNAP_ID,BEGIN_INTERVAL_TIME from dba_hist_snapshot;    SNAP_ID BEGIN_INTERVAL_TIME ---------- -----------------------------------------------------------

通过案例学调优之--Oracle Cluster Table

通过案例学调优之--Oracle Cluster Table About Clusters A cluster provides an optional method of storing table data. A cluster is made up of a group of tables that share the same data blocks. The tables are grouped together because they share common columns an