oracle视图查询数据慢,8i查询DBA_FREE_SPACE视图极慢的问题

还是那套古老的8.1.7.4,在该系统上检查表空间使用情况的SQL运行缓慢,其SQL如下:

SELECT D.TABLESPACE_NAME,

SPACE "SUM_SPACE(M)",

SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",

ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",

FREE_SPACE "FREE_SPACE(M)"

FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME) D,

(SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE

FROM DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F

where d.tablespace_name = f.tablespace_name(+)

order by "USED_RATE(%)" desc;

/*很面熟的DBA常用脚本吧?*/

经确认其中对DBA_FREE_SPACE视图的查询耗费了大量时间,8i中该视图的默认定义是:

select ts.name,

fi.file#,

f.block#,

f.length * ts.blocksize,

f.length,

f.file#

from sys.ts$ ts, sys.fet$ f, sys.file$ fi

where ts.ts# = f.ts#

and f.ts# = fi.ts#

and f.file# = fi.relfile#

and ts.bitmapped = 0

/*以上查询DMT表空间上的FREE EXTENT*/

union all

/*以下查询LMT表空间上的FREE EXTENT*/

select /*+ ordered use_nl(f) use_nl(fi) */

ts.name,

fi.file#,

f.ktfbfebno,

f.ktfbfeblks * ts.blocksize,

f.ktfbfeblks,

f.ktfbfefno

from sys.ts$ ts, sys.x$ktfbfe f, sys.file$ fi

where ts.ts# = f.ktfbfetsn

and f.ktfbfetsn = fi.ts#

and f.ktfbfefno = fi.relfile#

and ts.bitmapped <> 0

and ts.online$ in (1, 4)

and ts.contents$ = 0

/*也许你感到奇怪,实际上8i中就有了本地管理模式的表空间了,只是很少有人用。("In Oracle 8i the EXTENT MANAGEMENT clause was introduced into the CREATE TABLESPACE statement allowing extent management to be LOCAL or DICTIONARY. Locally Manages Tablespaces (LMT) have a bitmap of the blocks, or groups of blocks, they contain allowing them to track extent allocation without reference to the data dictionary.")*/

/*因字典管理模式下FET$基表往往较大,导致UNION ALL以上部分在连接操作时会产生大量的逻辑读,最终导致了对DBA_FREE_SPACE视图的查询十分缓慢。*/

Oracle 提供了官方的视图并不意味着我们非它不可用,可以通过修改DBA_FREE_SPACE的定义,或另建一个具有相同功能但查询SQL构造不同的视图来加快查询速度:

explain plan for

select /*+use_hash (tsfi, fet2 ) */

tsfi.tablespace_name,

tsfi.file_id,

fet2.block_id,

tsfi.blocksize * fet2.blocks,

fet2.blocks,

tsfi.relfile#

from (select /*+ use_hash ( ts, fi ) */

ts.name tablespace_name,

fi.file# file_id,

ts.BLOCKSIZE,

fi.relfile#,

ts.ts#

from sys.ts$ ts, sys.file$ fi

where ts.ts# = fi.ts#

and ts.online$ in (1, 4)) tsfi,

(select f.block# block_id, f.length blocks, f.file# file_id, f.ts#

from sys.fet$ f

union all

select f.ktfbfebno block_id,

f.ktfbfeblks blocks,

f.ktfbfefno,

ktfbfetsn

from sys.x$ktfbfe f) fet2

where fet2.file_id = tsfi.relfile#

and fet2.ts# = tsfi.ts# /*此查询需SYSDBA权限*/ ;

Explained

select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------------------

Plan hash value: 717737944

---------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

---------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 20 | 1560 | 9 (12)| 00:00:01 |

|* 1 | HASH JOIN | | 20 | 1560 | 9 (12)| 00:00:01 |

|* 2 | HASH JOIN | | 4 | 104 | 6 (17)| 00:00:01 |

| 3 | TABLE ACCESS FULL | FILE$ | 4 | 36 | 2 (0)| 00:00:01 |

|* 4 | TABLE ACCESS FULL | TS$ | 5 | 85 | 3 (0)| 00:00:01 |

| 5 | VIEW | | 101 | 5252 | 3 (0)| 00:00:01 |

| 6 | UNION-ALL | | | | | |

| 7 | TABLE ACCESS FULL| FET$ | 1 | 52 | 3 (0)| 00:00:01 |

| 8 | FIXED TABLE FULL | X$KTFBFE | 100 | 5200 | 0 (0)| 00:00:01 |

---------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - access("FET2"."FILE_ID"="FI"."RELFILE#" AND

"FET2"."TS#"="TS"."TS#")

2 - access("TS"."TS#"="FI"."TS#")

4 - filter("TS"."ONLINE$"=1 OR "TS"."ONLINE$"=4)

/*改写后可以大幅减少逻辑读从而提高性能*/

/*可以建立DBA_FREE_SPACE功能相同的替代品,并代入到表空间使用率的脚本中*/

CREATE OR REPLACE VIEW DBA_FREE_SPACE_NEW (

TABLESPACE_NAME,

FILE_ID,

BLOCK_ID,

BYTES,

BLOCKS,

RELATIVE_FNO

) AS

select /*+use_hash (tsfi, fet2 ) */

tsfi.tablespace_name,

tsfi.file_id,

fet2.block_id,

tsfi.blocksize * fet2.blocks,

fet2.blocks,

tsfi.relfile#

from (select /*+ use_hash ( ts, fi ) */

ts.name tablespace_name,

fi.file# file_id,

ts.BLOCKSIZE,

fi.relfile#,

ts.ts#

from sys.ts$ ts, sys.file$ fi

where ts.ts# = fi.ts#

and ts.online$ in (1, 4)) tsfi,

(select f.block# block_id, f.length blocks, f.file# file_id, f.ts#

from sys.fet$ f

union all

select f.ktfbfebno block_id,

f.ktfbfeblks blocks,

f.ktfbfefno,

ktfbfetsn

from sys.x$ktfbfe f) fet2

where fet2.file_id = tsfi.relfile#

and fet2.ts# = tsfi.ts# /*建此视图需SYSDBA权限*/ ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj 4332:JSOI2012 分零食

描述 这里是欢乐的进香河&#xff0c;这里是欢乐的幼儿园。 今天是2月14日&#xff0c;星期二。在这个特殊的日子里&#xff0c;老师带着同学们欢乐地跳着&#xff0c;笑着。校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们。听到这个消息&#xff0c;所有同学都安安静静…

并发–顺序线程和原始线程

我不久前参与了一个项目&#xff0c;该项目的报告流程如下&#xff1a; 用户会要求举报 报告要求将被翻译成较小的部分 每个零件的报告将基于零件/节的类型由报告生成器生成 组成报告的各个部分将重新组合成最终报告&#xff0c;并返回给用户 我的目标是展示如何从错误的实…

借贷期末余额 oracle,应交税费期末余额分别在借贷方表示什么

应交税费是负债类科目&#xff0c;有时期末余额会在借方&#xff0c;有时会在贷方。因此&#xff0c;小伙伴们在实际的账务处理工作中&#xff0c;一定要弄清楚两者的含义。为了帮助大家进行有更进一步的理解&#xff0c;小编再次汇总了应交税费期末余额分别在借贷方表示什么的…

Android学习——ListView的缓存机制

在使用ListView的时候&#xff0c;需要加载适配器和数据源&#xff0c;这篇文章主要介绍一下ListView的使用以及利用ListView的缓存机制来减少系统的初始化时间。 ListView的使用 ListView和ViewPager很类似&#xff0c;首先在ArrayList中存放数据源&#xff0c;并把它作为Adap…

C#基础 特殊集合(栈集合、队列集合、哈希表集合)

一、 栈: Stank,先进先出&#xff0c;一个一个赋值&#xff0c;一个一个取值&#xff0c;按照顺序。 .count 取集合内元素的个数 .push 将元素一个一个推入集合 .pop 将元素一个一个弹出集合 .peek 查看集合中的一个元素 .clear 清空集合 Stack stnew Stack…

OSGi环境中的Servlet基本身份验证

您首先需要获得对OSGI HTTP Service的引用。 您可以通过声明性服务来做到这一点。 这篇文章将集中在获得对HTTP服务的引用之后的步骤。 注意&#xff1a;此职位的完整课程位于此处 通过OSGI HTTP Service注册Servlet时&#xff0c;它为您提供了提供HTTPContext实现的选项。 htt…

linux夏令时配置文件,Linux夏令时是怎么调整的?

以法国巴黎为例&#xff1a;root121 zoneinfo]# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime[root121 zoneinfo]# date2015年 10月 13日 星期二 03:45:09 CEST[root121 zoneinfo]# date -RTue, 13 Oct 2015 03:45:31 0200[root121 zoneinfo]# zdump -v /etc/localt…

Kali Linux渗透基础知识整理(二)漏洞扫描

Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量NmapHping3NessuswhatwebDirBusterjoomscanWPScan网络流量 网络流量就是网络上传输的数据量。 TCP协议 TCP是因特网中的传输层协议&#xff0c;使用三次握手协议建立连接。当主动方发出SYN连接请求后&#xff0c;等待…

嵌入式软件设计第09实验报告

学号&#xff1a;140201133 姓名&#xff1a;李宇昕 组别&#xff1a;第3组 实验地点&#xff1a;D19 一、实验目的&#xff1a; 1.熟悉WWW技术中的SSI&#xff08;Server Side Include&#xff09;技术。 2.学会使用SSI技术编写代码把当前开发板内…

TeamCity工件:HTTP,Ant,Gradle和Maven

您可以通过几种方式检索TeamCity工件&#xff1f; 我说有很多选择 &#xff01; 如果您使用的是Java构建工具&#xff0c;那么可以使用简单的HTTP请求&#xff0c;Ant Ivy&#xff0c;Gradle和Maven下载和使用TeamCity构建配置生成的二进制文件。 怎么样&#xff1f; 继续阅读…

linux中hadoop命令大全,hadoop常用命令

启动Hadoop进入HADOOP_HOME目录。执行sh bin/start-all.sh关闭Hadoop进入HADOOP_HOME目录。执行sh bin/stop-all.sh1、查看指定目录下内容hadoop dfs –ls [文件目录]eg: hadoop dfs –ls /user/wangkai.pt2、打开某个已存在文件hadoop dfs –cat [file_path]eg:hadoop dfs -ca…

Uber从Postgres切换到MySQL

Uber工程师在官方博客上描述了他们为什么要从 Postgres 切换到 MySQL 数据库。Uber的早期架构是由 Python编写的后端应用构成&#xff0c;使用了 Postgres 数据库。但此后&#xff0c;Uber的架构发生了显著的改变&#xff0c;转变到了微服务模型和新的数据平台。以前他们使用 P…

AutoCAD如何方便截图放到Word文档,改成白底黑字

将模型视图切换到布局2即可 比如下图所示的效果 先回到模型视图把所有线条颜色都改成白色&#xff0c;然后添加适当的标注&#xff08;比如要受力分析&#xff0c;则在CAD中绘制箭头也很方便的&#xff09;&#xff0c;文字说明。然后切换到布局2就OK 可以截图了。 转载于:http…

在Hotspot JVM中跟踪过多的垃圾回收

由于内存泄漏或其他内存问题&#xff0c;经常导致应用程序冻结&#xff0c;仅使垃圾收集器&#xff08;GC&#xff09;进程运行失败&#xff0c;试图释放一些空间。 直到看门狗&#xff08;或沮丧的管理员&#xff09;重新启动应用程序并且问题从未解决之前&#xff0c;这种情况…

linux 网络在线升级,linux在线升级

//前提信息&#xff1a;1.系统分区信息SPI-Flash:[0] 0x000000000000-0x000000020000 : "SPL,128KB"[1] 0x000000020000-0x0000000e0000 : "U-Boot,768KB"[2] 0x0000000e0000-0x000000100000 : "U-Boot Env,128KB"[3] 0x000000100000-0x00000020…

XML反序列化出错,XML 文档(2, 2)中有错误

XML转换为实体类的错误处理方案 一.错误描述&#xff1a; XML反序列化出错&#xff0c;XML 文档(2, 2)中有错误二.解决方案&#xff1a; 在实体类的字段要加上XmlElement属性三.具体实现: 1.XML文档 <EVENT_INSTANCE><EventType>ALTER_TABLE</EventType><…

iOS--支付宝环境集成

1.下载支付宝SDK以及Demo https://doc.open.alipay.com/doc2/detail?treeId54&articleId103419&docType1 2.新建文件夹“AliSDK”&#xff0c;将压缩包内的文件拷贝到该文件夹下&#xff0c;完成后如下图所示&#xff1a; 3.将文件夹拷贝到项目中&#xff0c; 4.执行完…

再见,再见,5 * 60 * 1000 //五分钟,再见,再见

在这篇文章中&#xff0c;我将讨论一个在1.5版中首次引入的类&#xff0c;我使用了太多&#xff0c;但是与一些人交谈&#xff0c;他们说他们不知道它的存在。 此类是TimeUnit 。 TimeUnit类表示给定粒度单位的持续时间&#xff0c;还提供了转换为不同单位的实用方法以及执行计…

windows如何调用Linux的API,Windows和Native API中的系统调用?

最近&#xff0c;我在* NIX操作系统中使用了很多汇编语言。我想知道Windows域。Linux中的调用约定&#xff1a;mov $SYS_Call_NUM, %eaxmov $param1 , %ebxmov $param2 , %ecxint $0x80而已。这就是我们应该如何在Linux中进行系统调用。linux中所有系统调用的参考&#xff1a;关…

maven生命周期和插件

maven生命周期和插件 生命周期 maven的生命周期有三套&#xff0c;互相独立。每个生命周期含有不同阶段&#xff0c;常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作clean 清理上一次构建生成的文件post-clean 执行清理后需要完成的工作default 构建项目 validate…