[20191125]探究等待事件的本源.txt

[20191125]探究等待事件的本源.txt[20191125]探究等待事件的本源.txt–//当工作中遇到oracle的性能问题时,查看awr报表提供很好的解决问题途径.但是有时候很容易想当然.–//比如以前我一看到 log file s

[20191125]探究等待事件的本源.txt

–//当工作中遇到oracle的性能问题时,查看awr报表提供很好的解决问题途径.但是有时候很容易想当然.
–//比如以前我一看到 log file sync等待事件就很主观的认为redo 磁盘IO不行,实际上真实的情况可能有许多原因.
–//比如提交进程太多,cpu调度不过来.总之需要wait chains确定问题的本源.
–//上午看了大师Tanel Poder的dash_wait_chains.sql与ash_wait_chains.sql脚本,简单学习它的使用.
–//dash_wait_chains.sql 是基于DBA_HIST_ACTIVE_SESS_HISTORY视图.而ash_wait_chains.sql基于V$ACTIVE_SESSION_HISTORY视图.
–//二者命令执行格式差不多,仅仅学习ash_wait_chains.sql就ok了.

–//实际上根本不需要学习与记忆,看看脚本的开头就知道如何执行与使用:
— Usage:
—     @ash_wait_chains <grouping_cols> <filters> <fromtime> <totime>

— Example:
—     @ash_wait_chains username||”:”||program2||event2 session_type=”FOREGROUND” sysdate-1/24 sysdate

— Other:
—     This script uses only the in-memory V$ACTIVE_SESSION_HISTORY, use
—     @dash_wait_chains.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive

—     Oracle 10g does not  have the BLOCKING_INST_ID column in ASH so you”ll need
—     to comment out this column in this script. This may give you somewhat
—     incorrect results in RAC environment with global blockers.

——————————————————————————–

–//我做一点点简单的修改:
COL wait_chain FOR A300 WORD_WRAP
–//修改为:
COL wait_chain FOR A200 WORD_WRAP

–//我的工作环境最大显示宽度是271列.如果设置再小,字体显示就太小,我同事许多设置才237.
$ echo $COLUMNS
271

–//因为我还需要管理10g的数据库,根据前面的说明,可以拷贝脚本命名为ash_wait_chains10g.sql.
–//注解如下,当然对于rac环境可能不正确.
—         AND PRIOR d.blocking_inst_id = d.inst_id

–//作者还重新定义字段program,event为program2,event2.这样显示更加直观,占用宽度更小一些.
–//以下是测试部分:

1.环境:
qqqqqqqqqqq> @ ver1
PORT_STRING         VERSION    BANNER
——————- ———- —————————————————————————-
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production

qqqqqqqqqqq> @ tpt/ash/ash_wait_chains  program2||”:”||event2 1=1 trunc(sysdate)+9/24 trunc(sysdate)+10/24
— Display ASH Wait Chain Signatures script v0.2 BETA by Tanel Poder ( http://blog.tanelpoder.com )
%This     SECONDS        AAS WAIT_CHAIN
—— ———- ———- ——————————————————————-
  33%        4362         .1 -> (XXXYYY.EXE) :ON CPU
  10%        1368          0 -> (NSSn) :LNS wait on SENDREQ
  10%        1323          0 -> (LGWR) :LGWR-LNS wait on channel
   6%         735          0 -> (XXXYYY.EXE) :log file sync  -> (LGWR) :LGWR-LNS wait on channel
   5%         605          0 -> (CAPAA-PIPE) :ON CPU
   5%         604          0 -> (XXXYYY.exe) :ON CPU
   4%         573          0 -> (wnwp.exe) :ON CPU
   3%         378          0 -> (DIAn) :ON CPU
   2%         274          0 -> (sqlplus) :ON CPU
   2%         246          0 -> (httpd.exe) :ON CPU
   2%         230          0 -> (PSPn) :ON CPU
   1%         115          0 -> (CKPT) :ON CPU
   1%         111          0 -> (LMSn) :ON CPU
   1%         111          0 -> (wnwp.exe) :log file sync  -> (LGWR) :LGWR-LNS wait on channel
   1%          89          0 -> (routine.exe) :ON CPU
   1%          87          0 -> (oracle) :ON CPU
   1%          86          0 -> (sqlplus) :control file sequential read
   1%          83          0 -> (LGWR) :ON CPU
   1%          76          0 -> (routine.exe) :log file sync  -> (LGWR) :LGWR-LNS wait on channel
   1%          72          0 -> (ARCn) :ON CPU
   1%          69          0 -> (XXXYYY.EXE) :gc current block 2-way
   1%          68          0 -> (XXXYYY.EXE) :gc cr block 2-way
   0%          63          0 -> (LGWR) :log file parallel write
   0%          55          0 -> (LMON) :ON CPU
   0%          55          0 -> () :null event
   0%          47          0 -> (XXXYYY.EXE) :log file sync
   0%          46          0 -> (nnnn.exe) :log file sync  -> (LGWR) :LGWR-LNS wait on channel
   0%          39          0 -> (LMSn) :gcs log flush sync  -> (LGWR) :LGWR-LNS wait on channel
   0%          38          0 -> (XXXYYY.EXE) :direct path read
   0%          38          0 -> (XXXYYY.EXE) :gc cr block busy
30 rows selected.

–//开始不理解AAS表示什么.表示如下
ROUND(COUNT(*) / ((CAST(&4 AS DATE) – CAST(&3 AS DATE)) * 86400), 1) AAS
–//相当于每秒取样几次.
–//参数3,参数4是时间范围,我建议使用类似例子的格式.你仅仅需要知道1/24表示1小时,1/1440表示1分钟就ok了.
–//比如你需要查看当天8:15到9:10的情况,时间可以写成:
trunc(sysdate)+8/24+15/1440 trunc(sysdate)+9/24+10/1440
–//另外注意一点:V$ACTIVE_SESSION_HISTORY保留信息有限制,时间太久的可能查询不到.要改用dash_wait_chains.sql脚本查询.
–//参数2可以加入一些过滤例子:session_type=”FOREGROUND” 或者使用 1=1 表示全部.

–//你可以看到这台服务器的log file sync等待事件实际上由于(LGWR) :LGWR-LNS wait on channel.
–//问题在与安装配置dg时的参数:

qqqqqqqqqqq> show parameter log_archive_dest_2
NAME               TYPE   VALUE
—————— —— —————————————————————————————————-
log_archive_dest_2 string service=rzdbra lgwr sync reopen=15 max_failure=10 net_timeout=30 optional noaffirm db_unique_name=XXXXXX
–//对方配置了sync,这样在提交时要确定dg方已经写入日志文件才算提交.
–//如果改成async,相关等待LNS wait on SENDREQ,LGWR-LNS wait on channel,log file sync都会消失或者减少.

–//再来看看另外1个10g的数据库:
WWWWWWWWW> @ ver1
PORT_STRING         VERSION        BANNER
——————- ————– —————————————————————-
x86_64/Linux 2.4.xx 10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – 64bi

WWWWWWWWW> @ tpt/ash/ash_wait_chains10g  program2||”:”||event2 1=1 trunc(sysdate)+9/24 trunc(sysdate)+10/24
— Display ASH Wait Chain Signatures script v0.2 BETA by Tanel Poder ( http://blog.tanelpoder.com )
%This     SECONDS        AAS WAIT_CHAIN
—— ———- ———- ————————————————————————
  30%        3602         .1 -> (xxxzzzz.exe) :db file sequential read
  19%        2244          0 -> (DBWn) :ON CPU
  11%        1321          0 -> (LGWR) :log file parallel write
   9%        1113          0 -> (xxxzzzz.exe) :ON CPU
   7%         890          0 -> (xxxzzzz.exe) :db file scattered read
   6%         784          0 -> (xxxzzzz.exe) :log file sync  -> (LGWR) :log file parallel write
   5%         633          0 -> (aaatobbbb.exe) :log file sync  -> (LGWR) :log file parallel write
   4%         490          0 -> (CKPT) :control file parallel write
   1%         106          0 -> (wnwp.exe) :db file sequential read
   1%          88          0 -> (JDBC Thin Client) :db file sequential read
   1%          86          0 -> (aaatobbbb.exe) :db file scattered read
   1%          82          0 -> (mnnn) :db file sequential read
   0%          59          0 -> (xxxzzzz.exe) :read by other session
   0%          55          0 -> (wnwp.exe) :ON CPU
   0%          54          0 -> (JDBC Thin Client) :ON CPU
   0%          45          0 -> (plsqldev.exe) :enq: TX – row lock contention
   0%          44          0 -> (sqlplus) :ON CPU
   0%          27          0 -> (wnwp.exe) :log file sync  -> (LGWR) :log file parallel write
   0%          27          0 -> (aaatobbbb.exe) :ON CPU
   0%          25          0 -> (xxxzzzz.exe) :SQL*Net more data from dblink
   0%          25          0 -> (mnnn) :ON CPU
   0%          24          0 -> (ARCn) :log file sequential read
   0%          19          0 -> (xxxzzzz.exe) :db file parallel read
   0%          13          0 -> (CTWR) :ON CPU
   0%          13          0 -> (aaatobbbb.exe) :db file sequential read
   0%          12          0 -> (Jnnn) :db file sequential read
   0%          10          0 -> (aaatobbbb.exe) :log file sync
   0%          10          0 -> (SMON) :db file sequential read
   0%          10          0 -> (ARCn) :ON CPU
   0%          10          0 -> (CJQn) :ON CPU
30 rows selected.
–//可以发现这台系统磁盘io已经不行.如果负荷在增加就不行.顺便说一下这台机器硬件配置很差.

WWWWWWWWW> @ tpt/ash/ash_wait_chains10g  event2 1=1 trunc(sysdate)+7/24 sysdate
— Display ASH Wait Chain Signatures script v0.2 BETA by Tanel Poder ( http://blog.tanelpoder.com )
%This     SECONDS        AAS WAIT_CHAIN
—— ———- ———- ———————————————————–
  32%        4910         .1 -> db file sequential read
  32%        4887         .1 -> ON CPU
  12%        1896          0 -> log file sync  -> log file parallel write
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11%        1761          0 -> log file parallel write
   7%        1078          0 -> db file scattered read
   4%         650          0 -> control file parallel write
   0%          59          0 -> read by other session
   0%          45          0 -> enq: TX – row lock contention
   0%          34          0 -> SQL*Net more data to client
   0%          34          0 -> SQL*Net more data from dblink
   0%          24          0 -> log file sequential read
   0%          23          0 -> db file parallel read
   0%          21          0 -> log file sync
   0%           7          0 -> log file switch completion
   0%           6          0 -> null event
   0%           5          0 -> change tracking file synchronous write
   0%           4          0 -> SQL*Net more data from client
   0%           4          0 -> control file sequential read
   0%           3          0 -> os thread startup
   0%           2          0 -> enq: CF – contention  -> control file parallel write
   0%           1          0 -> SQL*Net break/reset to client
   0%           1          0 -> Log archive I/O
   0%           1          0 -> latch: library cache
   0%           1          0 -> log file sync  -> ON CPU
24 rows selected.

–//注意看下划线,log file sync主要是由于log file parallel write太慢造成的,与前面的不同.这样定位问题就不会太盲目乱猜.

[20191125]探究等待事件的本源.txt

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10782.html

(0)
上一篇 2022-12-21 21:30
下一篇 2022-12-21

相关推荐

  • Postgresql统计信息概述[通俗易懂]

    Postgresql统计信息概述[通俗易懂]对于sql优化,除了索引之外,执行计划和统计信息是无法绕开的一个话题,如果sql优化(所有的RDBMS)脱离了统计信息的话就少了一个为什么的过程,味道就感觉少了一大半。刚接触Postgresql,粗浅

    2023-03-25
    150
  • 如何安装Tesseract

    如何安装TesseractTesseract是一个由HP实验室开发的免费OCR引擎。它最初发布于1985年,但直到2005年才成为开源软件。自那时以来,Tesseract已经成长为一款功能强大的OCR引擎,并且已被许多人在各种应用程序中使用。

    2024-08-28
    24
  • 实时数仓搭建_大数据实时数仓架构

    实时数仓搭建_大数据实时数仓架构目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切,需要实时数仓的能力来赋能。传统离线数仓的数据时效性是 T+1,调度频率以天为单位,无法支撑实时场景的数据需求。即使能将调度频率设置成小时

    2023-05-09
    140
  • 简单理解分表分库及其缺点[亲测有效]

    简单理解分表分库及其缺点[亲测有效]当我们系统达到瓶颈时候,最影响系统性能的永远是最底层的。例如数据库,所以数据库优化相对重要,当数据库性能由于数据量过大导致达到瓶颈的时候,我们会选择对数据库拆分或者对表拆分,也就是分表分库。分表分库…

    2023-04-13
    155
  • sql在视图中查询_sql中的子查询的用法

    sql在视图中查询_sql中的子查询的用法前几篇我们一起学习了 SQL 如何对表进行创建、更新和删除操作、SQL SELECT WHERE 语句如何指定一个或多个查询条件 和 SQL 如何插入、删除和更新数据 等数据库的基本操作方法。 从本文

    2023-05-21
    204
  • python的hashib模块的简单介绍

    python的hashib模块的简单介绍测试用CGI,名字为test.py,放在apache的cgi-bin目录下:

    2023-12-02
    138
  • JDBC快速入门_jdbc有必要学吗

    JDBC快速入门_jdbc有必要学吗JDBC快速入门 详解 1.0DriverManager 功能1 功能2 2.0 connection对象 3.0 statement对象 4.0 ResultSet 遍历结果集的一个案例 impor

    2023-03-22
    152
  • mysql中间件proxysql实现mysql读写分离「建议收藏」

    mysql中间件proxysql实现mysql读写分离「建议收藏」mysql中间件proxysql实现mysql读写分离 1. mysql实现读写分离的方式 mysql 实现读写分离的有以下几种: 程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机…

    2023-04-04
    149

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注