一、背景
某個資料庫在20200312 14:00:28-15:00:18期間,監控系統發出DBTime超出門檻值告警,資訊如下:
二、問題分析
1、擷取期間AWR報告,進行分析
1.1、檢視Elapsed、DB Time名額
通過AWR可以看到,伺服器規格是4CPU16G,Elapsed*CPUs=239.36min遠遠小于DB Time(22,862.47min),反應awr統計的時間段資料庫很繁忙。
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等待上。
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部分反應上面的問題。
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。
從下面的截圖來看,session數的變化也能印證可能是使用者并發通路資料庫引起的。
2、檢視ash報告
通過awr分析,問題基本可以确定是使用者并發通路資料庫頻繁執行sql引起cursor: pin S wait on X,但是哪些sql引起,需要從ash報告中檢視。
通過下面截圖可以看到,sql_id為39cbpxu5sp7zt和1dxpz6s60pyy2是造成這個現象的主要原因,接下來需要确認這兩個sql頻繁執行原因。
2.3、了解sql執行的情況
将上面2個sql回報給客戶後,并且詢問這個期間使用者登陸資料庫的情況,客戶回報:
①第一個sql是使用者登陸資料庫做權限校驗用的,第二個是擷取病人資訊使用的,這兩個sql都是在使用者登入時觸發的
②sql中使用了dblink,awr期間dblink有異常,不能正常執行
③sql不能執行,使用者端端擷取不到結果,護士持續發起請求,連接配接資料庫,最終導緻了上面的情況
3、總結
上面的情況大緻就是,用戶端查詢資訊,沒有得到結果,之後不斷重試,并發通路,在資料庫端,sql中使用了dblink,dblink在那個期間出現問題,不能執行,最終出現了上面的問題。上面如果有不正确的地方歡迎大家指正。