还是那套古老的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权限*/ ;

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

  1. SAP MM 物料主数据分类视图的数据会带入批次分类视图里?

    SAP MM 物料主数据分类视图的数据会带入批次分类视图里? 1,我们在物料主数据的分类视图里的023类型的分类里,维护了一个特性的值,比如'Potency in IU/MG' 这个特性的值为500. ...

  2. Oracle查询数据提示ORA-00942:表或视图不存在

    问题背景 imp导入数据,查询数据提示表不存在,表名是小写的,加了双引号查询是可以的. 查看imp日志,发现导入表,表名是有双引号的!!! 解决方法 ALTER TABLE "aa" ...

  3. 项目中查询数据和模糊查询

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:WPF .Select 撰写日期:2020年08月07 ...

  4. mysql查询数据教程_MySQL 查询数据

    sql 语句的关联查询 左关联: left join ... on ... 右关联: right join... on ... 格式: select 字段 from 表1 left join 表2 o ...

  5. mysql 查询数据 程序_MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  6. php查询数据方法,php查询数据库的方法

    php查询数据库的方法 发布时间:2020-08-28 14:14:45 来源:亿速云 阅读:104 作者:小新 php查询数据库的方法?这个问题可能是我们日常学习或工作经常见到的.希望通过这个问题能 ...

  7. 第14章_视图(创建视图、查看视图、更新视图的数据、修改、删除视图)

    第14章_视图 第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创 ...

  8. ajax连接mysql数据库查询数据_ajax动态查询数据库数据并显示在前台的方法

    今天做了一个ajax动态查询数据库的小Demo,又重新学习了一下ajax的一些知识.在此和大家分享一下...... 啥都别说了,先上代码 Controller层 查询总用户数 @RequestMapp ...

  9. sqllite查询数据量_Sqlite3查询指定行数数据

    Sqlite中提供的方法和Mysql的一样,也是通过关键字limit限制. SQL1 selectt.user_id,random()asRandomfromudb_user t limit 10; ...

最新文章

  1. kibana升级之后原本保存的数据dashboards, visualizations, index patterns丢失
  2. Python:课程期待
  3. android 权限动态申请
  4. python--pexpect
  5. windows 下eclipse 连HBASE
  6. 判断字符串为空 为null
  7. ajax同步导致ajax上面的代码不执行?
  8. 【转】把我这段时间的教训分享一下,希望北邮校友们以我为鉴。
  9. Mutual Component Convolutional Neural Networks for Heterogeneous Face Recognition阅读笔记
  10. D. Lizard Era: Beginning
  11. Ubuntu 设置屏幕字体大小
  12. start.bat批处理文件
  13. 强基计划 数学相关书籍 推荐
  14. 郑州、昆明、韶关等多地全面推行商品房买卖合同电子签约
  15. C1见习工程师(二)
  16. 机器学习——关联规则
  17. 在职可以考计算机吗,沈阳师范大学在职研可以考计算机证吗
  18. 虚拟信用卡风控方案介绍
  19. 特此郑重声明!我的文章全部是原创作品!转载请注明出处!
  20. Avada学习之-如何修改Header-logo和favicon图标

热门文章

  1. java maven 项目依赖关系,java – 关于依赖关系共享的Maven多模块项目组合
  2. nsct matlab,图像融合 NSCT算法 matlab
  3. 实战sqlmap绕过WAF
  4. 封装cookie设置和获取的简易方法
  5. CSS3新特性应用之用户体验
  6. 【RTOS】基于V7开发板的uCOS-III,uCOS-II,RTX4,RTX5,FreeRTOS原版和带CMSIS-RTOS V2封装层版全部集齐...
  7. Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
  8. (转)利用WPF的ListView进行大数据量异步加载
  9. 推荐一些经过实践检验的学习方法
  10. bzoj 4332:JSOI2012 分零食