百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

临时表空间的实时监控,百度99%的搜索结果都是错误的

sinye56 2024-10-09 19:42 7 浏览 0 评论

你是否曾经担忧更新语句因为临时表空间不足而报错?你是否曾经碰到过临时表空间不足而导致的错误?你是否曾经使用百度进行查询 “临时表空间使用率”。但结果却不是你想要的?如果你经历过这些,那么这篇文章非常适合你”


关于临时表空间的监控,通过百度进行搜索,你会发现几乎都是错误的答案。百度靠前的答案永远都是查询临时表空间曾经最大使用情况,而不是实时查询临时表空间的使用情况。看完文章后你将知道如何实时的监控临时表空间。本文分为两部分:第一部分主要是对网络上错误结果进行分析。第二部分才是对临时表空间的实时监控的试验。如果你只想要相关语句则可以直接跳到第二部分进行阅读。

本文为原创内容,首发公众号:唯一的小彬哥

01

百度的结果真的不靠谱

首先我们来看一看百度上搜索到的查询语句吧,这个语句在网络上被称为临时表空间使用率查询

SELECT C.TABLESPACE_NAME,

C.BYTES/1024/1024 TOTAL_MB,

(C.BYTES-D.BYTES_USED)/1024/1024 FREE_MB,

D.BYTES_USED/1024/1024 USE_MB,

ROUND(D.BYTES_USED*100/C.BYTES,2)|| '%'USE

FROM (SELECT TABLESPACE_NAME,SUM(BYTES) BYTES

FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME) C,

(SELECT TABLESPACE_NAME,SUM(BYTES_CACHED) BYTES_USED

FROM V$TEMP_EXTENT_POOL GROUP BY TABLESPACE_NAME) D

WHERE C.TABLESPACE_NAME = D.TABLESPACE_NAME;

我保证我的数据库现在是空闲的,但通过这个语句却显示使用百分比已经是99%以上了。这个语句实际上应该被称为临时表空间曾经最大使用情况。如果你通过这个语句来评估是不是该加临时表空间了,那是可以的。但是你要用这个监控临时表空间使用情况?逗我玩呢?


再来看另外一个语句 这个语句在网络上被称为 查看哪些用户正在使用临时表空间

SELECT A.USERNAME,A.SQL_ID,A.SEGTYPE,

B.BYTES_USED/1024/1024 ||'MB',

B.BYTES_FREE/1024/1024

FROM V$TEMPSEG_USAGE A JOIN

V$TEMP_SPACE_HEADER B ON A.TABLESPACE = B.TABLESPACE_NAME;

这个SQL根据网络上的解释是这样的

SQL_ID:正在执行的SQL。

BYTES_USED:SQL语句使用的临时表空间的大小。也就是924MB。BYTES_FREE:空闲的临时表空间大小,也就是0。

所以上面的图翻译一下就是现在我的临时表空间已经用了924MB了,没有剩余临时表空间了,你再执行什么排序啊,分组啊就该报错了。可是我的数据库没有在执行任何SQL。


再来看看占用的SQL到底是什么?这个可以通过查询V$SQL表找到

我保证这个语句真的不是我执行的。

所以我得出的结论是:百度上的结果真是太扯淡了。


02

临时表空间的实时监控

临时表空间如何实时监控?其实可以通过使用V$TEMP_EXTENT_POOL视图来监控。语句如下:

SELECT

A.TABLESPACE_NAME,

case when A.MAXBYTES/power(1024,3)>1 THEN ROUND(A.MAXBYTES/power(1024,3),4)||'GB'

ELSE ROUND(A.MAXBYTES/power(1024,2),4)||'MB' END "允许最大值",

case when A.BYTES/power(1024,3)>1 THEN ROUND(A.BYTES/power(1024,3),4)||'GB'

ELSE ROUND(A.BYTES/power(1024,2),4)||'MB' END "历史峰值",

case when B.BYTES_USED/power(1024,3)>1 THEN

ROUND(B.BYTES_USED/power(1024,3),4)||'GB'

ELSE ROUND(B.BYTES_USED/power(1024,2),4)||'MB' END "已使用",

round((B.BYTES_USED/A.BYTES)*100,2)||'%' "已使用/历史峰值",

round((B.BYTES_USED/A.MAXBYTES)*100,2)||'%' "已使用/允许最大值"

FROM (SELECT F.TABLESPACE_NAME, SUM(F.BYTES) BYTES,SUM(F.MAXBYTES) MAXBYTES FROM DBA_TEMP_FILES F GROUP BY TABLESPACE_NAME) A,

(SELECT P.TABLESPACE_NAME, SUM(P.BYTES_CACHED) BYTES_CACHED,SUM(P.BYTES_USED) BYTES_USED FROM V$TEMP_EXTENT_POOL P GROUP BY TABLESPACE_NAME ) B

WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME

以TEMP为例,在这个查询中可以看到

临时表空间允许的最大值是32G

历史曾经达到的峰值是924MB(网络上的语句都把这个峰值作为了实时值)

当前已使用空间为0

为了验证该语句的效果

可以运行排序查询(WYDXBG2021 共2千万数据):

SELECT * FROM WYDXBG2021 ORDER BY F1 DESC;


查询未完成时的结果:

使用率为0.88%


查询完成后的结果:

使用率为1.41%


连接释放后的结果:

使用率为0%


从该试验可以看出该SQL确实对临时表空间进行了实时监控。监控关键就在于视图V$TEMP_EXTENT_POOL。根据Oracle官方解释这个视图的主要作用就是监控临时表空间被实例缓存和使用的情况。

BYTES_USED指正在被使用的

BYTES_CACHED指被缓存的

通过文档理解很容易误解为BYTES_USED+BYTES_CACHED才是实时的使用情况。但是根据我的试验我认为BYTES_USED其实才能反映出临时表空间的实时使用情况。


03

结束语

文章中使用的数据库是Oracle 11g,有兴趣的小伙伴可以自己去验证一下。也可以验证一下百度出来的语句,你会发现不管你的排序语句是执行中,执行后,百度出的语句查询出的结果数值都是完全不变的。自己动手记忆永远是最深刻的。


如果看完本文,您有所收获,欢迎扫码关注,您的支持是我创作的动力,我会以优质的原创文章回报大家。

相关推荐

一个不错的软件版本命名规范!

之前写了一篇如何自动生成版本号的文章,《让你的C程序,自动打印版本信息》初衷是让自己的程序在运行时自动打印与版本相关的信息,避免测试时因为版本信息不确定导致的一些功能对应不上去的问题,当时留了一个坑,...

国产操作系统迎来发展风口 公务领域更能培育起Linux生态

谷歌和微软在俄罗斯市场的一番套路猛如虎,就让我们深刻地意识到了,只有自己的东西才能靠得住。也由此,国内操作系统发展迎来了发展风口。我就看到有朋友就秀出了他们单位采购的纯国产的主机,一款华为的主机,纯国...

5个大有“前途”的Linux桌面发行版本

ZD至顶网CIO与应用频道08月27日专栏:Linux无处不在。你的服务器里,你的电话、汽车、手表、烤面包机、冰箱……和台式机里都有Linux的身影。虽然在桌面上见到Linux的用户比在自动调温...

Linux 常用应用软件大全

编译自:https://www.fossmint.com/most-used-linux-applications/作者:MartinsD.Okoi译者:HankChow对于许多应用程序...

Linux 4.1 系列的最大版本 4.1.18 LTS发布,带来大量修改

(LCTT译注:这是一则过期的消息,但是为了披露更新内容,还是发布出来给大家参考)著名的内核维护者GregKroah-Hartman貌似正在度假中,因为SashaLevin2016年2月16日的...

Linux发行版需要杀软吗?卡巴斯基推出免费KVRT病毒扫描清理工具

IT之家6月4日消息,你认为使用Linux发行版,需要杀毒软件吗?或许很多用户认为Linux发行版偏小众,因此受到黑客攻击的风险也相对较小,不过卡巴斯基并不这么认为,近期推出了适用于...

适合开发人员的 5款 Linux 发行版

什么是Linux?Linux是基于Unix的操作系统。由LinusTorvalds开发于1991年首次发布其内核。因为Linux是开源软件,其发行版由不同组织发布,因此不同的发行版具有不同的风格...

VMware Workstation 17.0 Pro 发布:新增 TPM 2.0 完美兼容Win11

IT之家11月18日消息,VMwareWorkstation17.0Pro现已发布,它带来了许多新特性,例如微软Windows11硬性要求:虚拟可信平台模块(TPM)2.0。...

你是否需要一个容器专用的Linux发行版本?

单单使用容器是不够的,提供商们认为你需要一个容器专用的Linux发行版本。我们可以让容器在不同的操作系统上运行,不同的操作系统都有自己的虚拟化服务,如:SolarisZones、BSDJails、...

Tizen 3.0版本发布 采用Linux 4.1内核

2015-09-2111:31:39作者:马荣【中关村在线软件资讯】9月21日消息:尽管三星靠着Android系统设备在移动市场赚钱,但是仍然没有忘记自家的Tizen开发。现在Tizen3.0版...

欧拉操作系统演进:应用累计超130万套 支持鲲鹏、英特尔、飞腾等芯片

21世纪经济报道记者倪雨晴深圳报道4月15日,在欧拉开发者大会(openEulerDeveloperDay2022)的主论坛上,欧拉首个数字基础设施全场景长周期版openEuler22.03...

Papyros:以Material Design为灵感的Linux发行版本

项目团队并不希望只是采用传统的桌面主题,而是致敬谷歌Android系统的MaterialDesign设计语言想要打造出某些不同以往足够吸引用户的Linux发行版本,自然该版本还在不断的更新和改进中,...

比特网早报:全国空间计量技术委员会成立,银河麒麟操作系统上架微信Linux4.0.0版本

2024年11月6日消息,昨夜今晨,科技圈都发生了哪些大事?行业大咖抛出了哪些新的观点?比特网为您带来值得关注的科技资讯:全国空间计量技术委员会在北京成立近日,经市场监管总局批准,全国空间计量技术委员...

2024年最稳定的5个Linux发行版,赶紧收藏!

Linux是最流行的免费开源平台之一。Linux已被广泛使用,因为它安全、可扩展和灵活。Linux发行版收集开源代码,对其进行编译,并将其组合成一个可以轻松启动和安装的操作系统。它们还提供不同的...

彰显Linux生态繁华,Ubuntu、Fedora等四发行版同时发布新版本

上周对于开源社区来说是忙碌的一周。EndeavourOS和TrueNASScale于周二(4月16日)发布,Fedora于周三(4月17日)发布,Ubuntu于周四(4月18日)发布。四个新版本中都...

取消回复欢迎 发表评论: