`
javayestome
  • 浏览: 1031792 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Statspack之十三-Enqueue

阅读更多

原文出处:

http://www.eygle.com/statspack/statspack13.htm



enqueue是一种保护共享资源的锁定机制。该锁定机制保护共享资源,如记录中的数据,以避免两个人在同一时间更新 同一数据。enqueue
包括一个排队机制,即FIFO(先进先出)排队机制。

Enqueue等待常见的有ST、HW 、TX 、TM等

ST enqueue,用于空间管理和字典管理的表空间(DMT)的区间分配,在DMT中典型的是对于uet$和fet$数据字典表的 争用。对于支持LMT的
版本,应该尽量使用本地管理表空间. 或者考虑手工预分配一定数量的区(Extent),减少动态扩展
时发生的严重队列竞争。

我们通过一个实例来看一下:

DB Name         DB Id    Instance     Inst Num Release     OPS Host
------------ ----------- ------------ -------- ----------- --- ------------------
DB       40757346      aaa                 1 8.1.7.4.0   NO    server

                Snap Id     Snap Time      Sessions
                ------- ------------------ --------
 Begin Snap:       2845 31-10月-03 02:10:16      46
   End Snap:       2848 31-10月-03 03:40:05      46
    Elapsed:                  89.82 (mins)


对于一个Statspack的report,采样时间是非常重要的维度,离开时间做参考,任何等待都不足以说明问题。

Cache Sizes
~~~~~~~~~~~
           db_block_buffers:      51200          log_buffer:    2097152
              db_block_size:      16384    shared_pool_size:  209715200
………..
Top 5 Wait Events
~~~~~~~~~~~~~~~~~                                   Wait     % Total
Event                                               Waits  Time (cs)   Wt Time
-------------------------------------------- ------------ ------------ -------
enqueue                                            53,793   16,192,686   67.86
rdbms ipc message                                  19,999    5,927,350   24.84
pmon timer                                          1,754      538,797    2.26
smon timer                                             17      522,281    2.19
SQL*Net message from client              		   94,525      520,104   2.18
          -------------------------------------------------------------

在Statspack分析中,Top 5等待事件是我们最为关注的部分。
这个系统中,除了enqueue 等待事件以外,其他4个都属于空闲等待事件,无须关注。我们来关注一下enqueue等
待事件,在89.82 (mins)的采样间隔内,累计enqueue等待长达16,192,686cs,即45小时左右。这个等待已经太过
显著,实际上这个系统也正因此遭遇了巨大的困难,观察到队列等待以后,我们就应该关注队列等待在等待什么
资源。快速跳转的Statspack的其他部分,我们看到以下详细内容:

Enqueue activity for DB: DB  Instance: aaa  Snaps: 2716 -2718
-> ordered by waits desc, gets desc

Enqueue            Gets      Waits
---------- ------------ ----------
ST                1,554      1,554
          -------------------------------------------------------------

我们看到主要队列等待在等待ST锁定,对于DMT,我们说这个等待跟FET$,UET$的争用紧密相关。我们在回过头来
研究捕获的SQL语句:

-> End Buffer Gets Threshold:   10000
-> Note that resources reported for PL/SQL includes the resources used by
   all SQL statements called within the PL/SQL code.  As individual SQL
   statements are also reported, it is possible and valid for the summed
   total % to exceed 100

  Buffer Gets    Executions  Gets per Exec  % Total  Hash Value
--------------- ------------ -------------- ------- ------------
      4,800,073       10,268          467.5    51.0   2913840444
select length from fet$ where file#=:1 and block#=:2 and ts#=:3

        803,187       10,223           78.6     8.5    528349613
delete from uet$ where ts#=:1 and segfile#=:2 and segblock#=:3 a
nd ext#=:4

        454,444       10,300           44.1     4.8   1839874543
select file#,block#,length from uet$ where ts#=:1 and segfile#=:
2 and segblock#=:3 and ext#=:4

         23,110       10,230            2.3     0.2   3230982141
insert into fet$ (file#,block#,ts#,length) values (:1,:2,:3,:4)

         21,201          347           61.1     0.2   1705880752
select file# from file$ where ts#=:1
….
          9,505           12          792.1     0.1   1714733582
select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t whe
re t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0

          6,426          235           27.3     0.1   1877781575
delete from fet$ where file#=:1 and block#=:2 and ts#=:3

我们看到数据库频繁操作UET$,FET$系统表已经成为了系统的主要瓶颈。
至此,我们已经可以准确的为该系统定位问题,相应的解决方案也很容易确定,在8.1.7中,使用LMT代替DMT,
这是解决问题的根本办法,当然实施起来还要进行综合考虑,实际情况还要复杂得多。

					  

HW enqueue指和段的高水位标记相关等待;手动分配适当区可以避免这一等待。

TX是最常见的enqueue等待。TX enqueue等待通常是以下三个问题之一产生的结果。
第一个问题是唯一索引中的重复索引,你需要执行提交(commit)/回滚(rollback)操作来释放enqueue。
第二个问题是对同一位图索引段的多次更新。因为单个位图段可能包含多个行地址(rowid),所以当多个用户试图更新同一段时,可能一个
用户会锁定其他用户请求的记录,这时等待出现。直到获得锁定的用户提交或回滚, enqueue释放。
第三个问题,也是最可能发生的问题是多个用户同时更新同一个块。如果没有足够的ITL槽,就会发生块级锁定。通过增大initrans和/或
maxtrans以允许使用多个ITL槽(对于频繁并发进行DML操作的数据表,在建表之初就应该考虑为相应参数设置合理的数值,避免系统运行
以后在线的更改,在8i之前,freelists等参数不能在线更改,设计时的考虑就尤为重要),或者增大表上的pctfree值,就可以很容易的避免
这种情况。

TM enqueue队列锁在进行DML操作前获得,以阻止对正在操作的数据表进行任何DDL操作(在DML操作一个数据表时,其结构不能被更改)。

本文作者:
eygle,Oracle技术关注者,来自中国最大的Oracle技术论坛itpub.
www.eygle.com是作者的个人站点.你可通过Guoqiang.Gai@gmail.com来联系作者.欢迎技术探讨交流以及链接交换.


原文出处:

http://www.eygle.com/statspack/statspack13.htm


分享到:
评论

相关推荐

    Oracle High-Performance Tuning with STATSPACK 中文版

    Oracle High-Performance Tuning with STATSPACK 是一本专注于优化Oracle数据库性能的专业书籍,中文版的出现使得更多中国用户能够理解并应用这些优化技巧。STATSPACK是Oracle数据库早期的一个性能分析工具,它提供...

    Statspack-v3.0.pdf

    - [Statspack Other Versions](http://www.oracle.com/oramag/oracle/00-Mar/index.html?statspack-other.html) 为了在 8.1.6 之前的版本中使用 Statspack,需要先运行 `statscbps.sql` 脚本来创建 `v$buffer_pool_...

    statspack使用指南-v2[1].1.pdf

    ### Statspack使用指南详解 #### 引言 Statspack,自Oracle 8.1.6版本引入以来,迅速成为数据库管理员(DBA)和Oracle专家诊断数据库性能问题的强大工具。通过Statspack,用户不仅能够轻松识别Oracle数据库的性能...

    statspack(使用指南)-v3[1][1][1].0.pdf

    - [http://www.oracle.com/oramag/oracle/00-Mar/index.html?statspack-other.html](http://www.oracle.com/oramag/oracle/00-Mar/index.html?statspack-other.html) - ...

    oracle 10g 性能调整statspack

    - **前十大关注点**:无论是Statspack还是AWR报告,都应重点关注前十项关键指标,如等待事件、闩锁竞争等。 - **管理Statspack数据**:定期清理Statspack数据是必要的,以保持数据库的良好状态。这包括分析数据的...

    ORACLE STATSPACK

    #### 三、Statspack的安装与配置 ##### 1. 安装前准备 安装Statspack之前,需要具备以下条件: - Oracle数据库环境已经搭建完成。 - 用户必须具有`sysdba`权限,以便进行安装和管理操作。 ##### 2. 安装步骤 - ...

    oracle statspack

    #### 三、Statspack的部署与管理 Statspack的部署相对简单,主要包括以下几个步骤: 1. **安装Statspack包**:确保已经安装了Statspack包,这通常是随着Oracle数据库一起安装的。 2. **创建快照**:使用`DBMS_...

    oracle statspack安装配置

    Oracle Statspack是一个强大的数据库性能分析工具,它为DBA提供了深入洞察Oracle数据库性能的能力。Statspack可以帮助用户收集和分析数据库的运行状况,从而快速定位性能问题,并为优化提供依据。以下将详细介绍...

    statspack安装与分析

    Statspack是Oracle数据库中的一种性能分析工具,它可以帮助DBA(数据库管理员)快速识别系统性能瓶颈,从而进行相应的优化工作。在本篇文章中,我们将详细探讨如何安装Statspack以及如何利用它来进行性能分析。 首先...

    statspack下载

    三、Statspack的基本信息 Statspack表格包含了丰富的信息,如: 1. **活动历史**:记录了数据库在不同时间点的活动,包括用户会话、后台进程等。 2. **等待事件**:显示了数据库在处理请求时遇到的各种等待情况,...

    statspack安装

    三、测试 Statspack 1. 连接 perfstat 用户:使用 perfstat 用户连接数据库,运行 statspack.snap 产生系统快照。 2. 生成报告:使用 spreport.sql 脚本生成基于两个时间点的报告,需要输入起始快照 ID 和结束快照...

    STATSPACK数据分析

    10. **与其他工具的集成**:STATSPACK数据可以被其他性能监控和诊断工具,如Oracle Enterprise Manager或第三方工具,用于更深入的分析和可视化。 通过细致地阅读和分析`statckpack_report.txt`文件,我们可以全面...

    Statspack分析报告详解

    三、生成Statspack报告 生成Statspack报告主要通过执行 `DBMS_STATS.REPORT_STATSPACK` 存储过程。报告可以根据时间范围、会话ID、执行计划等条件定制。基础报告通常包含以下部分: 1. Top SQL:列出执行频率高、...

    statspack完整使用手册

    statspack完整使用指南: 包括: statspack的安装; statspack的自动数据收集; statspack的门限调整; statspack的报表自动产生与邮件发送(aix环境下); statspack的报表详细解析.

    Oracle STATSPACK高性能调整

    Oracle STATSPACK是一种强大的性能分析工具,主要用于诊断和优化Oracle数据库的运行效率。它提供了详细的统计信息,帮助DBA(数据库管理员)理解数据库的...掌握并熟练运用STATSPACK,是每个Oracle DBA必备的技能之一。

Global site tag (gtag.js) - Google Analytics