弗蘭克·帕喬(Franck Pachot)


昨天,我在Oracle Midlands上發表了“解釋AWR報告” Prezi。有一點我在這里解釋說,我總是檢查“已捕獲的SQL帳戶占數據庫總時間的…%”,以便知道是否在報告中獲取所有詳細信息。未能捕獲最重要的語句的兩個主要原因是:報告覆蓋的時間范圍太短,或者許多不可共享的SQL語句很快從庫緩存中淘汰了。兩種情況都是因為報告僅顯示保留在最終快照共享池中的語句。但是在多租戶中,還有另一個原因。

在進行詳細介紹之前,我想在此先說一下Oracle Midland是一次很棒的聚會。演講者應毫不猶豫地訪問:http : //oraclemidlands.com/present

AWR

在多租戶中,AWR在CDB級別收集統計信息。一些統計信息是實例范圍的,CON_ID = 0。其他一些與由CON_ID標識的可插拔數據庫有關。當我們從可插入數據庫中運行awrrpt.sql時,就會出現問題。
這是CDB級別的AWR報告的摘錄:


SQL ordered by Gets                           DB/Inst: CDB/CDB  Snaps: 139-143
…
-> Total Buffer Gets:      24,958,807
-> Captured SQL account for   88.9% of Total

然后是來自兩個活動可插入數據庫的兩個數據庫:


SQL ordered by Gets                           DB/Inst: CDB/CDB  Snaps: 139-143
…
-> Total Buffer Gets:      24,958,807
-> Captured SQL account for   21.6% of Total


SQL ordered by Gets                           DB/Inst: CDB/CDB  Snaps: 139-143
…
-> Total Buffer Gets:      24,958,807
-> Captured SQL account for   60.3% of Total

在這里我們看到,即使報表在PDB級別運行,總的邏輯讀取(24,958,807個緩沖區)也來自實例統計信息。
但是報告中僅顯示帶有PDB CON_ID的SQL語句,這說明了某些PDB的百分比較低。那么就很難知道這些語句是未被捕獲(由於上述原因)還是未被報告。

因此,我認為我們始終需要在CDB級別上收集AWR報告。

Statspack

我已經將Statspack安裝在同一數據庫中,並且與AWR快照同時拍攝了快照。文檔(spdoc.txt)表示Statspack只能安裝在PDB級別,但是我也可以在CDB $ ROOT上安裝。以下是這些配件:


SQL ordered by Gets  DB/Inst: CDB/CDB  Snaps: 2-6
-> End Buffer Gets Threshold:     10000 Total Buffer Gets:      24,956,570
-> Captured SQL accounts for   10.5% of Total Buffer Gets
-> SQL reported below exceeded  1.0% of Total Buffer Gets

在CDB級別,總數是實例的總數(CON_ID = 0),但是語句僅是在CDB $ ROOT中運行的語句(CON_ID = 1)


SQL ordered by Gets  DB/Inst: CDB/CDB  Snaps: 1-5
-> End Buffer Gets Threshold:     10000 Total Buffer Gets:       5,709,168
-> Captured SQL accounts for  112.5% of Total Buffer Gets
-> SQL reported below exceeded  1.0% of Total Buffer Gets

該百分比高於100%,因為Statspack可以計算從PL / SQL調用的遞歸SQL的兩倍。
重要的是,必須根據PDB邏輯讀取來計算hre百分比:
這是總計24,956,570(與AWR報告相同)的22%。


SQL ordered by Gets  DB/Inst: CDB/CDB  Snaps: 1-5
-> End Buffer Gets Threshold:     10000 Total Buffer Gets:      17,138,586
-> Captured SQL accounts for  102.0% of Total Buffer Gets
-> SQL reported below exceeded  1.0% of Total Buffer Gets

這是總數24,956,570中的68%,與AWR報告相似。

在PDB級別,Statspack僅計算來自連接到PDB的會話的邏輯讀取。這與AWR行為有很大不同。在這里,我們可以將每個可插拔數據庫真正視為一個獨立的數據庫。

所以呢?

如果像我一樣,您想查看AWR或Statspack報告中的數字是否匹配,那么您可能會這樣做

  • AWR在CDB級別上報告,因為它們收集實例統計信息
  • Statspack報告在PDB級別,因為它們收集了容器統計信息

但是多租戶是新手,我還沒有與非CDB AWR或Statspack報告相同的經驗,所以請分享您的觀點。
通常,合並不會使調整更容易。在某些情況下,您將不得不查看PDB,然后是CDB,然后是OS,存儲,也許還需要查看虛擬機管理程序級別…

 

 

########CDB/PDB 加數據文件的方式 仍然一致

感謝

Oracle 12c 開始支持 PLUGGABLE DATABASE,並且提供了一個方法在CDB和PDB之間切換。

 

1. 使用 show pdbs 可以確認當前有哪些PDB?

  1.  
    SQL> show pdbs
  2.  
     
  3.  
    CON_ID CON_NAME OPEN MODE RESTRICTED
  4.  
    ---------- ------------------------------ ---------- ----------
  5.  
    2 PDB$SEED READ ONLY NO
  6.  
    3 TESTP1 MOUNTED
  7.  
    SQL>

上圖中 PDB$SEED 並不是一個 PDB 而是一個 PDB的模板,狀態始終是 READ ONLY。TESTP1 是一個PDB。

 

2. 切換到 TESTP1。

 

  1.  
    SQL> alter session set container=TESTP1;
  2.  
     
  3.  
    Session altered.
  4.  
     
  5.  
    SQL> show pdbs;
  6.  
     
  7.  
    CON_ID CON_NAME OPEN MODE RESTRICTED
  8.  
    ---------- ------------------------------ ---------- ----------
  9.  
    3 TESTP1 MOUNTED
  10.  
    SQL>

 

 

 

3. 切回到 CDB。

 

    1.  
      SQL> alter session set container=CDB$ROOT;
    2.  
       
    3.  
      Session altered.
    4.  
       
    5.  
      SQL> show pdbs
    6.  
       
    7.  
      CON_ID CON_NAME OPEN MODE RESTRICTED
    8.  
      ---------- ------------------------------ ---------- ----------
    9.  
      2 PDB$SEED READ ONLY NO
    10.  
      3 TESTP1 MOUNTED
    11.  
      SQL>

 

alter tablespace users add datafile '' size 2m;