关于Oracle多租户架构下的每个PDB的dbtime查询
有客户咨询在19c多租户这样的架构中,除了查询cdb本身外,还想查询具体pdb的负载(DB Time),但是使用之前的脚本发现查询不到,只显示cdb自己的结果,客户写的脚本如下:
SELECT i.instance_name instance_name_print,
s.snap_id snap_id,
TO_CHAR (s.startup_time, 'mm/dd/yyyy HH24:MI:SS') startup_time,
TO_CHAR (s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS')
begin_interval_time,
TO_CHAR (s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS')
end_interval_time,
ROUND (
EXTRACT (DAY FROM s.end_interval_time - s.begin_interval_time)
* 1440
+ EXTRACT (HOUR FROM s.end_interval_time - s.begin_interval_time)
* 60
+ EXTRACT (MINUTE FROM s.end_interval_time - s.begin_interval_time)
+ EXTRACT (SECOND FROM s.end_interval_time - s.begin_interval_time)
/ 60,
2)
elapsed_time,
ROUND ( (e.VALUE - b.VALUE) / 1000000 / 60, 2) db_time,
ROUND (
( ( ( (e.VALUE - b.VALUE) / 1000000 / 60)
/ (EXTRACT (
DAY FROM s.end_interval_time - s.begin_interval_time)
* 1440
+ EXTRACT (
HOUR FROM s.end_interval_time - s.begin_interval_time)
* 60
+ EXTRACT (
MINUTE FROM s.end_interval_time - s.begin_interval_time)
+ EXTRACT (
SECOND FROM s.end_interval_time - s.begin_interval_time)
/ 60)
/ 40)),
2)
CPU_Carrying_Capacity,
ROUND (
( ( ( (e.VALUE - b.VALUE) / 1000000 / 60)
/ (EXTRACT (
DAY FROM s.end_interval_time - s.begin_interval_time)
* 1440
+ EXTRACT (
HOUR FROM s.end_interval_time - s.begin_interval_time)
* 60
+ EXTRACT (
MINUTE FROM s.end_interval_time - s.begin_interval_time)
+ EXTRACT (
SECOND FROM s.end_interval_time - s.begin_interval_time)
/ 60))
* 100),
2)
pct_db_time
FROM dba_hist_snapshot s,
gv$instance i,
dba_hist_sys_time_model e,
dba_hist_sys_time_model b,
(SELECT (begin_interval_time) tt
FROM dba_hist_snapshot
WHERE instance_number =1) f
WHERE i.instance_number = s.instance_number
AND e.snap_id = s.snap_id
AND F.tt = s.begin_interval_time
AND b.snap_id = s.snap_id - 1
AND e.stat_id = b.stat_id
AND e.instance_number = b.instance_number
AND e.instance_number = s.instance_number
AND e.stat_name = 'DB time'
order by begin_interval_time;
因为自己前些年做运维的时候接触客户环境大部分还是使用的11g,没太关注这方面的更新,和同事讨论,第一想法看到 dba_hist_* 这类视图不包含pdb的信息,是否应该有 cdb_hist_*这类的视图包含呢?
这是一个比较正常的思考方向,但实际验证发现,在这个问题上并不是这样,这两个视图都没有对应的pdb信息。
SQL> select distinct CON_ID from dba_hist_sys_time_model;
CON_ID
----------
1
SQL> select distinct CON_ID from cdb_hist_sys_time_model;
CON_ID
----------
1
SQL> select distinct CON_ID from dba_hist_snapshot;
CON_ID
----------
0
SQL> select distinct CON_ID from cdb_hist_snapshot;
CON_ID
----------
0
看起来不是这个问题,那难道说19c多租户架构就查不到pdb层面的dbtime吗?
这也是不太可能的,毕竟AWR都能依据pdb层面做采集和分析呢。。
发现官方文档针对 "DBA_HIST_SYS_TIME_MODEL" 的描述,下面的See Also: 有提到另外一个相关视图 "DBA_HIST_CON_SYS_TIME_MODEL",这有啥区别?
正在找不同,此时同事 Shine 发我的一段描述恰好说明了二者的区别:
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/gathering-database-statistics.html#GUID-18E1B278-B3C5-4FE1-8E51-BC8878C439F5
DBA_HIST Views
The DBA_HIST views show the AWR data present only on the CDB root.
When the DBA_HIST views are accessed from a CDB root, they show all the AWR data stored on the CDB root.
When the DBA_HIST views are accessed from a PDB, they show the subset of the CDB root AWR data, which is specific to that PDB.
DBA_HIST_CON Views
The DBA_HIST_CON views are similar to the DBA_HIST views, but they provide more fine grained information about each container, and thus, they have more data than the DBA_HIST views.
The DBA_HIST_CON views show the AWR data present only on the CDB root.
When the DBA_HIST_CON views are accessed from a CDB root, they show all the AWR data stored on the CDB root.
When the DBA_HIST_CON views are accessed from a PDB, they show the subset of the CDB root AWR data, which is specific to that PDB.
感谢同事 Shine 的帮忙,更快的找到了这个区别对应的官方解释。
看起来DBA_HIST_CON系列视图会有更完整的每个pdb的信息,跟客户解释,客户说好像之前也尝试过这个视图,但是结果有负数的情况,感觉上不太对。
于是我在自己测试环境测了下,初步改了下几个点,没有细看,但没有负数显示不正确的情况:
主要修改就是替换视图,以及标识不同的con_id,具体修改如下:
SELECT e.con_id con_id,
s.snap_id snap_id,
TO_CHAR (s.startup_time, 'mm/dd/yyyy HH24:MI:SS') startup_time,
TO_CHAR (s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS')
begin_interval_time,
TO_CHAR (s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS')
end_interval_time,
ROUND (
EXTRACT (DAY FROM s.end_interval_time - s.begin_interval_time)
* 1440
+ EXTRACT (HOUR FROM s.end_interval_time - s.begin_interval_time)
* 60
+ EXTRACT (MINUTE FROM s.end_interval_time - s.begin_interval_time)
+ EXTRACT (SECOND FROM s.end_interval_time - s.begin_interval_time)
/ 60,
2)
elapsed_time,
ROUND ( (e.VALUE - b.VALUE) / 1000000 / 60, 2) db_time,
ROUND (
( ( ( (e.VALUE - b.VALUE) / 1000000 / 60)
/ (EXTRACT (
DAY FROM s.end_interval_time - s.begin_interval_time)
* 1440
+ EXTRACT (
HOUR FROM s.end_interval_time - s.begin_interval_time)
* 60
+ EXTRACT (
MINUTE FROM s.end_interval_time - s.begin_interval_time)
+ EXTRACT (
SECOND FROM s.end_interval_time - s.begin_interval_time)
/ 60)
/ 40)),
2)
CPU_Carrying_Capacity,
ROUND (
( ( ( (e.VALUE - b.VALUE) / 1000000 / 60)
/ (EXTRACT (
DAY FROM s.end_interval_time - s.begin_interval_time)
* 1440
+ EXTRACT (
HOUR FROM s.end_interval_time - s.begin_interval_time)
* 60
+ EXTRACT (
MINUTE FROM s.end_interval_time - s.begin_interval_time)
+ EXTRACT (
SECOND FROM s.end_interval_time - s.begin_interval_time)
/ 60))
* 100),
2)
pct_db_time
FROM dba_hist_snapshot s,
gv$instance i,
dba_hist_con_sys_time_model e,
dba_hist_con_sys_time_model b,
(SELECT (begin_interval_time) tt
FROM dba_hist_snapshot
WHERE instance_number =1) f
WHERE i.instance_number = s.instance_number
AND e.snap_id = s.snap_id
AND F.tt = s.begin_interval_time
AND b.snap_id = s.snap_id - 1
AND e.stat_id = b.stat_id
AND e.instance_number = b.instance_number
AND e.instance_number = s.instance_number
--add
AND e.con_id = b.con_id
AND e.stat_name = 'DB time'
order by begin_interval_time;
我没太细看客户的脚本,在假设原脚本正确的基础上,直接进行的修改,需要客户帮测试下,看是否还有问题,目前尚未有反馈。
大家如果感兴趣也可以测试下哈,若有任何问题都欢迎找我一起探讨。
关于Oracle多租户架构下的每个PDB的dbtime查询的更多相关文章
- Oracle 12c多租户架构浅析
Oracle数据库12c的一大创新即是其采用的多租户架构.对于多租户这项新功能,业内的评价褒贬不一.有的声音认为,这项功能的用处不是特别大,但在某些场景或特定的环境下,多租户依然有它的用处.其最大的用 ...
- ABP Zero 单部署,单数据库,多租户架构
首先,我们应该定义多租户系统中的两个条目: 租主(Host):租主是单例的(只有一个租主).租主会对创建和管理租户负责.因此,一个“租主用户”比所有的租户等级更高,并独立于所有租户,同时还能控制他们. ...
- Force.com 多租户架构
本文参考自官方文档. 多租户架构 作为云计算平台的先驱,Salesforce最大的特点是"软件即服务"(Software as a Service,Saas).实现这种技术的基础便 ...
- Rest架构下的增删改查
首先还是要连接一下什么是Rest, REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP, ...
- ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本
为什么需要ARM64架构的OpenJDK8的Docker镜像 对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(也可能是其他ARM环境 ...
- ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?
为什么需要ARM架构下的OpenJDK8的Docker镜像? 对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(或者其他ARM架构电脑 ...
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- OpenGL Insights 阅读有感 - Tile Based架构下的性能调校 翻译
Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校 by Bruce Merry GameKnife译 译序 在大概1 ...
- Oracle在中文环境下出现乱码解决办法
zysong.ttf下载是一款oracle字体乱码解决工具,实质于缺乏中文字体包! 01情况的例子 02情况的例子 01.在开始安装的时候出现乱码 下载zysong.ttf,unzip 解压 一 ...
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...
随机推荐
- v-cloak指令用法
插值表达式存在的问题:'闪动' 如何解决该问题:使用v-cloak指令 解决该问题的原理:先隐藏,替换好值之后再显示最终的值 背后的原理:先通过样式隐藏内容,然后在内存中进行值得替换,替换好之后再显示 ...
- 堆和栈:JS数据怎么存储的?
JS数据存储主要分堆和栈两种, 栈空间:通常情况栈空间不会设置太大,主要用来存放一些原始类型的小数据,原始类型的数据有:Boolean.Null.Undefined.Number.BigInt.Str ...
- 搬运 |(有刀🔪慎入)kwdnx、谷雨、更漏与我
本打算把文案投到官微,但官微说文案太长了,只能放删减版: 那就把文案放博客上吧 写于 癸卯年 戊午月 己亥日. 四年前的冬天我们初见,大家都是青涩的未成年人:在少年班团建的喧闹中,谷雨谈论高数竞赛,k ...
- 在Linux上安装和使用免费版本的PyMol
技术背景 PyMol是一个类似于VMD的分子可视化工具,也是在PyQt的基础上开发的.但是由于其商业化运营,软件分为了教育版.开源版和商业版三个版本.其中教育版会有水印,商业版要收费,但是官方不提供开 ...
- DC逻辑综合工具简介-Design Compiler
逻辑综合简介 逻辑综合:代码转变为网表 FPGA:代码转变为FPGA内部的数字单元 在进行综合的时候往往会使用一些脚本工具 需要学会看综合之后的报告 1.目标 进行综合需要读入RTL设计,还需要用到f ...
- 18-CMOS门电路
CMOS门电路 TTL是三极管构成的门电路,逐步被CMOS电路替代.CMOS电路能耗低.集成度高. CMOS反相器 CMOS管是由PMOS和NMOS组成,这里用的都是使用的增强型. COMS能够正常工 ...
- 23- 数码管动态显示02-转换BCD码
1.BCD码 数码管动态显示的data[19:0]使用二进制数表示的多位十进制数,不能直接生成段选和片选信号,需要使用BCD码表示的十进制数 BCD码(Binary-Coded Decimal),又称 ...
- Qt5.9 UI设计(一)——在win10系统上安装Qt5.9
安装环境 win10 系统 Qt5.9.0 版本 官方下载地址 可以从官方网站获取:https://www.qt.io/zh-cn/ 现在的安装包跟以前的有些区别,加上网络比较慢,我这里演示的是Qt5 ...
- [转帖]20--Deployment常规操作
https://www.cnblogs.com/caodan01/p/15309966.html 目录 一.Deployment滚动更新 1.更新配置清单 2.设置镜像 kubectl set ima ...
- [转帖]Java 容器化的历史坑(史坑) - 资源限制篇
原文:https://blog.mygraphql.com/zh/posts/cloud/containerize/java-containerize/java-containerize-resour ...