Oracle RAC Cache Fusion系列十八:Oracle RAC Statisticsand Wait Events

沃趣科技發表於2019-11-01

沃趣科技作為國內領先的資料庫雲平臺解決方案提供商,一直致力於企業級資料庫雲平臺產品的研發,為使用者提供高效能、高可用、可擴充套件的的資料庫雲環境及不同業務場景需求的資料庫平臺,滿足客戶對極致效能、資料安全、容災備份、業務永續等需求。沃趣科技憑藉專業的團隊,優質的產品,前沿的技術,貼心的服務贏得了客戶的信任與尊重,也獲得了市場的認同。

————————————————————————————————

Oracle   Database   Performance   Tuning   Guide

Oracle資料庫中我們分析一個會話或SQL執行時間效率或者分析解釋導致會話等待的原因的一個很重要的方法是分析它花費的時間構成。在Oracle RAC中,Oracle使 用不同的等待事件時間來表示不同的請求結果及時間消耗。例如,當一個會話上例項正在尋找全域性快取中的塊,它不知道它是否會接收另一個例項快取的資料塊,或者它是收到訊息讓它直接從磁碟讀取。全域性快取的等待事件向我們精確傳達它是等待全域性快取塊還是訊息:Oracle將RAC相關的等待事件彙總在一個名為Cluster Wait Class的廣泛類別中。當使用者需要請求訪問一個資料塊時,就會有相應的事件等待處於活動狀態,例如:

  • gc current block request

  • gc  cr block request

當知道請求的結果時:

  • gc current block 3-way

  • gc  current block busy

  • gc cr block grant 2-way

Oracle RAC的等待事件非常細緻的傳達了Cache Fusion發生的每一個階段消耗的時間,幫助我們很好的定 位問題。

GCS and GES Statistics

快取融合傳輸的響應時間由訊息傳遞、處理及私網傳輸時間(IPC協議和GCS協議)組成。gc current block busy等待事件表示對快取資料塊的延遲訪問,因為它 們在遠端或本地快取中正在被訪問。

這可能是由以下任何原因引起的:

  • 資料塊被pinned住。

  • 資料塊被其他會話持有。

  • 遠端例項上的日誌寫入出現延遲。

  • 同一例項上的會話已請求訪問的塊並且正在例項間進行轉換,當前會話的會產生(gc current block busy)等待。

使用V$SESSION檢視可以檢視具有爭用的物件和資料塊,並且其中的p1和p2列表示塊請求的資料檔案和塊號,AWR基礎結構提供了活動會話歷史記錄的檢視,也可以用於跟蹤最近的等待事件及其指標。AWR和Statspack報告工具都包含大多數相關的等待事件,這可以有效的幫助我們分析Cache fusion的問題。建議在AWR基礎架構收集的快照資料上執行ADDM獲得全域性快取影響的總體評估。該advisory也將識別繁忙物件和SQL高gc等待時間。

GCS Statistics

本節介紹如何透過識別讀取的物件修改和訪問所產生的服務時間來監視GCS效能。在cache fusion過程中對塊的請求到達是整個響應時間的重要組成部分,同樣從磁碟讀取可能會增加塊訪問延遲。在大多數情況下,快取融合傳輸比磁碟訪問響應更快。以下等待事件表明當前例項向主節點申請了一個當前或者一致性塊並且這個申請已經被主節點響應,而且沒有出現超時。也就是說遠端快取的塊已傳送到本地例項並且沒有產生busy,pinned或需要logflush:

  • gc current block 2-way

  • gc  current block 3-way

  • gc cr block 2-way

  • gc cr block 3-way

gc current blocks received和gc cr blocks received可用於快速判斷訪問的物件目前是被多個例項共享的。 前面列表中提到的事件的平均等待時間的任何增加可能是由以下事件引起的:

  • 系統負載過高:CPU,IO資源不足,執行佇列過長,計劃任務出現延遲等。

  • 私有網路問題: 網路延遲過高,頻寬不夠。

如果平均等待時間可以接受,並且診斷後沒有私網或負載問題,那麼等待的累計時間通常可以透過Top SQL進行SQL語句的調整最佳化以最小化訪問的塊數,使用檢查buffer cache的大小,fast_start_mttr_target(檢查點觸發頻繁)導致刷髒塊頻率過高。V$SQLAREA中的列CLUSTER_WAIT_TIME表示發生的全域性快取事件等待時長,可以透過它來進行確定哪些SQL需要調整。

注意:Oracle建議使用ADDM和AWR。Statspack也可以但是需要使用級別7執行Statspack才能收集統計資訊與塊爭用和段塊等待有關。

Response Times Based on Wait Events

大多數全域性快取等待事件在AWR報告或者動態效能檢視的中顯示時間佔比較高並且可能存在它們作為頂級資料庫時間消費者但是並不一定代表有問題。如果使用者響應時間增加並且等待很高比例的時間用於全域性快取記憶體(gc),這個時候需要我們確定原因。大多數報告都包括細分事件按總時間的百分比排序。從ADDM報告開始是有用的,該報告分析常規收集的報告效能統計與其影響有關,並指向哪些物件和SQL對等待的時間貢獻最大,然後由AWR和Statspack提供更詳細的報告。Oracle RAC最重要的等待事件包括以下類別:

  • Block-Related Wait Events

  • Message-Related Wait Events

  • Contention-Related Wait Events

  • Load-Related Wait Events

Block-Related Wait Events

與塊相關的等待事件統計資訊表明已收到的塊經過作為2次或3次訊息傳遞的結果,即塊是從任何一個傳送的資源master需要1次訊息和1次塊傳輸,或者被轉發到 第三個節點,需要2條訊息和1個塊傳輸。

  • gc current block 2-way

  • gc current block 3-way

  • gc cr block 2-way

  • gc cr block 3-way

Message-Related Wait Events

與訊息相關的等待事件統計資訊表明沒有收到任何阻塞,因為它在任何例項中都沒有快取。表示的是一個全域性授權,使其能夠實現請求例項從磁碟讀取塊或修改它。如果這些事件消耗的時間很長,那麼可以假設SQL導致很多磁碟I/O(在cr授權的情況下)或者說工作負載會插入大量資料,並且需要經常查詢和格式化新塊。

  • gc current grant 2-way

  • gc  cr grant 2-way

Contention-Related Wait Events

與爭用相關的等待事件統計資訊表明請求的塊被另一個節點上的會話持有,並且所做的更改尚未結束因此不能馬上傳送傳遞。一個塊產生busy等待也可能會發生在本地,當一個會話啟動了一個快取融合操作,同節點上的另一個會話正在嘗試讀取或修改相同的資料。高服務時間可能會加劇在全域性快取記憶體中傳遞塊的爭用,大部分情況下busy類的等待事件表明使用者對同一資料的頻繁併發讀寫訪問。

gc current block busy and gc cr block busy等待事件表明發出請求的本地例項沒有立即收到當前或一致性讀取塊。這些事件名稱中的busy一詞表示傳送該塊在遠端例項上被延遲傳送了。例如,如果Oracle資料庫尚未為塊的更改寫入redo。與block busy等待事件相比,gc buffer busy等待事件表Oracle資料庫無法立即授予對儲存在本地的快取的訪問許可權。這是因為緩衝區上的全域性操作正在等待且操作尚未完成。換句話說,緩衝區正忙,所有其他嘗試訪問本地緩衝區的程式必須等待完成。gc buffer busy也同樣意味著多次訪問本地塊的請求。Oracle資料庫必須排隊這些請求。Oracle資料庫需要處理的時間長度佇列取決於塊的剩餘服務時間。服務時間受:網路延遲時間,遠端和本地例項處理時間,以及等待佇列的時間。平均等待時間和總等 待時間都應該被考慮進去,這些特定的等待對系統有巨大的影響。

  • gc current block busy

  • gc cr block busy

  • gc buffer busy acquire/rel ease

Load-Related Wait Events

與負載相關的等待事件表明在處理中發生了延遲GCS,這通常是由高負載,CPU飽和,負載平衡,新節點的新增刪除。對於上面提到的事件,等待時間包含整個節點從會話開始等待啟 動塊請求之後到請求的塊被返回。

  • gc current block congested

  • gc cr block congested



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2662242/,如需轉載,請註明出處,否則將追究法律責任。

相關文章