• Oracle等待事件之log file parallel write


    log file parallel write表示等待 LGWR 向操作系统请求 I/O 开始直到完成 I/O。这种事件发生通常表示日志文件发生了I/O 竞争或者文件所在的驱动器较慢。这说明这种等待与日志切换、检查点的执行都没有关系,而是直接反映了LGWR 的写能力,因此即使日志文件组数过少、文件偏小,也与目前的等待事件没有直接关系,所以增加日志组数、日志文件大小并不会有助于解决现在的性能问题。

    那么现在怎么解决这个问题呢?这个问题的直接原因主要跟LGWR 的写能力有关,但是单纯的LGWR 进程的写能力不可能像DBWR 进程那样可以通过多个写进程来提高,所以这时候要考虑的是如何在单个LGWR 进程的前提下让写的日志量不超过当前的LGWR 写能力。这个可以从两个方面来考虑,一方面要考虑是否在应用中产生了太多无意义的重做日志,导致日志产生量太大,从而使日志的产生量超出了LGWR 的写能力,如果是这样,那么考虑通过一些方法限制重做日志的产生。另一方面也要考虑如果日志产生量确定的情况下,如何让LGWR 进程写日志能够写得更多更快,这主要取决于两个方面,一个是LGWR 在写日志的时候是否发生了I/O 竞争,另一方面是重做日志文件所在的磁盘速度是否过低,如果是竞争引起的,移动重做日志文件到其他的磁盘上,如果是磁盘速度引起的,那么选择高速磁盘存放重做日志。

    通过前面的分析发现,主要的等待事件是与LGWR 的写能力相关的,而LGWR 写的重做日志都是由用户执行的DML 语句产生的,那么现在就应该进一步分析,搞清楚问题到底是哪些会话中执行的哪条SQL 语句引起的。首先需要找到哪些会话产生了大量的log file parallel write 等待事件,为了找到答案,就需要查看另外一些与会话相关的动态性能视图,会话级的视图有v$session_event 和 v$session_wait,当然,由于要找的是当前发生了大量log file parallel write 等待事件的会话,所以真正需要的视图应该是反映了当前会话等待信息的v$session_wait 视图,通过这个视图可以找到是由哪些会话导致的这个等待。

    在这里,将通过查询v$session_wait 来得到产生log file parallel write 等待事件最多的那些

    会话。当然,前面说过这个视图中的P1、P2 和P3 字段都是非常有用的字段,不过在这个案例中,

    对于log file parallel write 这个事件来说,这几个字段是用不上的。

    SELECT SID,

    EVENT "Wait Event",

    STATE "Wait Stat",

    WAIT_TIME "W'd So Far (secs)",

    SECONDS_IN_WAIT "Time W'd (secs)"

    FROM v$session_wait

    WHERE EVENT LIKE '&a&'

    ORDER BY 5;

    现在需要找到的是引起大量log file parallel write 等待事件的那些SQL 语句,那么怎么得到我们所关心的这些语句呢?在前面已经得到了那些产生等待事件的会话信息,那么通过这些会话信息与v$sqltext 视图进行关联查询,就可以得到相关的SQL 语句了。从上面的会话中随便找出一个,看看这个会话执行的哪条语句带来了大量logfile parallel write 等待。然后通过这个语句地址可以在v$sqltext中进行查询,这样就找到了这条SQL 语句。

    select cpu.sid "SID",

    cpu.username "User Name",

    cpu.value "CPU(sec)",

    reads.value "IO Read(k)",

    writes.value "IO Write(k)"

    from (select a.sid sid,

    a.username username,

    b.name,

    c.value value,

    a.serial# serial#

    from v$session a, v$statname b, v$sesstat c

    where a.sid = c.sid

    and b.statistic# = c.statistic#

    and b.name = 'CPU used by this session' ) cpu, (select a.sid,

    a.username, b.name, c.value value from v$session a, v$statname b,

    v$sesstat c

    where a.sid = c.sid

    and b.statistic# = c.statistic#

    and b.name = 'physical reads' ) reads, (select a.sid, a.username,

    b.name, c.value value from v$session a, v$statname b, v$sesstat c

    where a.sid = c.sid

    and b.statistic# = c.statistic#

    and b.name = 'physical writes' ) writes

    where cpu.sid = reads.sid

    and reads.sid = writes.sid

    and cpu.username is not null;

    DBA 所需要关心的性能信息主要包括了CPU、I/O、内存、SWAP 交换这些,在UNIX 系统上,常用的收集这些信息的工具有Top、Sar、iostat、vmstat 等在OS级别看看系统资源使用情况,以辅助上面的分析结果。

  • 相关阅读:
    tomcat work 目录
    上传图片预览 支持IE8+,FF,Chrome ,保留原图片比例
    设计模式学习笔记-观察者模式
    jcarousellite 实现图片列表滚动
    linux一些常用命令
    http&https&证书&数字签名
    醉笑陪君三万场 不诉离伤
    笔记本光驱位安装固态硬盘及window系统一些过程记录
    linux 添加定时任务脚本
    设置 SSH 免密码登陆——仍提示输入密码
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/6660405.html
Copyright © 2020-2023  润新知