弗兰克·帕乔(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;