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

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

sinye56 2024-10-09 19:42 3 浏览 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,有兴趣的小伙伴可以自己去验证一下。也可以验证一下百度出来的语句,你会发现不管你的排序语句是执行中,执行后,百度出的语句查询出的结果数值都是完全不变的。自己动手记忆永远是最深刻的。


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

相关推荐

Linux基础知识之修改root用户密码

现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...

Linux如何修改远程访问端口

对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...

如何批量更改文件的权限

如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...

CentOS「linux」学习笔记10:修改文件和目录权限

?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...

Linux下更改串口的权限

问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...

Linux chown命令:修改文件和目录的所有者和所属组

chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...

chmod修改文件夹及子目录权限的方法

chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...

Android 修改隐藏设置项权限

在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...

完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!

最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...

linux改变安全性设置-改变所属关系

CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...

Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod

#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...

linux更改用户权限为root权限方法大全

背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...

怎么用ip命令在linux中添加路由表项?

在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...

Linux配置网络

1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...

Linux系列---网络配置文件

1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...

取消回复欢迎 发表评论: