弗兰克·帕乔(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,存储,也许还需要查看虚拟机管理程序级别…