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

来源:https://www.cnblogs.com/lfree/archive/2019/11/25/11928763.html
-Advertisement-
Play Games

[20191125]探究等待事件的本源.txt--//當工作中遇到oracle的性能問題時,查看awr報表提供很好的解決問題途徑.但是有時候很容易想當然.--//比如以前我一看到 log file sync等待事件就很主觀的認為redo 磁碟IO不行,實際上真實的情況可能有許多原因.--//比如提交 ...


[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太慢造成的,與前面的不同.這樣定位問題就不會太盲目亂猜.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 修改nginx的配置文件,添加client_max_body_size 欄位 註:client_max_body_size 必須要放在server下的server_name下,而不是放在location欄位下麵 ...
  • https://sqlserver.code.blog/2019/11/25/you-may-fail-to-backup-log-or-restore-log-after-tde-certification-key-rotation/ ...
  • https://sqlserver.code.blog/2019/11/25/password-required-when-you-trying-to-add-a-database-having-a-master-key-to-ag-group/ ...
  • 上一篇說到,在Spark 2.x當中,實際上SQLContext和HiveContext是過時的,相反是採用SparkSession對象的sql函數來操作SQL語句的。使用這個函數執行SQL語句前需要先調用DataFrame的createOrReplaceTempView註冊一個臨時表,所以關鍵是先 ...
  • MongoDB簡介 基於分散式文件存儲的開源資料庫系統 將數據存儲為一個文檔,文檔類似於Json格式 MongoDB進入與退出 進入:mongo 退出:exit 庫級操作 顯示所有庫: show dbs 切換/創建資料庫: use 資料庫名稱 查看所在庫: db 刪除庫:db.dropDatabas ...
  • 一.MHA簡介 作者簡介 松信嘉範: MySQL/Linux專家 2001年索尼公司入職 2001年開始使用oracle 2004年開始使用MySQL 2006年9月 2010年8月MySQL從事顧問 2010年 2012年 DeNA 2012年~至今 Facebook 軟體簡介 MHA能夠在較短的 ...
  • 1.MySQL版本: (目前到8了) 5.x: 5.0-5.1:早期產品的延續,升級維護 5.4 - 5.x : MySQL整合了三方公司的新存儲引擎 (推薦5.5),企業使用最多的是5.5 2.linux下安裝方式 yum tar.gz rpm版(本次使用) 安裝:rpm -ivh rpm軟體名 ...
  • [20191125]oracel SQL parsing function qcplgte 2.txt--//參考前面的測試:http://blog.itpub.net/267265/viewspace-2665273/=>[20191122]oracel SQL parsing function ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...