天天看點

一次DB Time過高告警處理一、背景二、問題分析3、總結

一、背景

        某個資料庫在20200312 14:00:28-15:00:18期間,監控系統發出DBTime超出門檻值告警,資訊如下:

一次DB Time過高告警處理一、背景二、問題分析3、總結

二、問題分析

1、擷取期間AWR報告,進行分析

1.1、檢視Elapsed、DB Time名額

        通過AWR可以看到,伺服器規格是4CPU16G,Elapsed*CPUs=239.36min遠遠小于DB Time(22,862.47min),反應awr統計的時間段資料庫很繁忙。

一次DB Time過高告警處理一、背景二、問題分析3、總結

1.2、檢視Load Profile

        從下圖看到,DBtime中DB cpu所占比例其實并不大,DBTime大部分是在DB Wait Time上,從Top 10 Foreground Events by Total Wait Time可以看到主要是在cursor: pin S wait on X等待上。

一次DB Time過高告警處理一、背景二、問題分析3、總結

1.3、檢視Top 10 Foreground Events by Total Wait Time

        從截圖中可以看出,cursor: pin S wait on X等待事件占了DB time 86.9%,造成這個等待事件最常見的原因就是sql并發執行,可以從Wait Classes by Total Wait Time、SQL Statistics部分反應上面的問題。

一次DB Time過高告警處理一、背景二、問題分析3、總結

1.4、檢視Wait Classes by Total Wait Time、SQL Statistics

        檢視下面2個截圖,可以發現目前資料庫并發等待事件比較突出,之後檢視SQL Statistics,發現是和使用者登陸權限校驗的sql有關,正常來講,第二個截圖中的一些sql不會造成cursor: pin S wait on X等待事件,這個需要在更具ash報告檢視下,具體是哪些sql造成cursor: pin S wait on X。

一次DB Time過高告警處理一、背景二、問題分析3、總結
一次DB Time過高告警處理一、背景二、問題分析3、總結

        從下面的截圖來看,session數的變化也能印證可能是使用者并發通路資料庫引起的。

一次DB Time過高告警處理一、背景二、問題分析3、總結

2、檢視ash報告

        通過awr分析,問題基本可以确定是使用者并發通路資料庫頻繁執行sql引起cursor: pin S wait on X,但是哪些sql引起,需要從ash報告中檢視。

        通過下面截圖可以看到,sql_id為39cbpxu5sp7zt和1dxpz6s60pyy2是造成這個現象的主要原因,接下來需要确認這兩個sql頻繁執行原因。

一次DB Time過高告警處理一、背景二、問題分析3、總結

2.3、了解sql執行的情況

    将上面2個sql回報給客戶後,并且詢問這個期間使用者登陸資料庫的情況,客戶回報:

        ①第一個sql是使用者登陸資料庫做權限校驗用的,第二個是擷取病人資訊使用的,這兩個sql都是在使用者登入時觸發的

        ②sql中使用了dblink,awr期間dblink有異常,不能正常執行

        ③sql不能執行,使用者端端擷取不到結果,護士持續發起請求,連接配接資料庫,最終導緻了上面的情況

3、總結

        上面的情況大緻就是,用戶端查詢資訊,沒有得到結果,之後不斷重試,并發通路,在資料庫端,sql中使用了dblink,dblink在那個期間出現問題,不能執行,最終出現了上面的問題。上面如果有不正确的地方歡迎大家指正。