[转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE。
Oracle
11g引入了DBA_TABLESPACE_USAGE_METRICS视图。其实,Oracle
10g中就已经引入了该视图。能够使用。但在10g官方文档中查不到,11g官方文档对该视图作了说明。
Oracle 11g 官方文档中对DBA_TABLESPACE_USAGE_METRICS视图的说明:
DBA_TABLESPACE_USAGE_METRICS describes tablespace usage metrics for all types of tablespaces,including permanent,temporary,and undo tablespaces.
Column |
Datatype |
NULL |
Description |
TABLESPACE_NAME |
VARCHAR2(30) |
Tablespace name |
|
USED_SPACE |
NUMBER |
Total space consumed by the tablespace,in database blocks |
|
TABLESPACE_SIZE |
NUMBER |
Total size of the tablespace,in database blocks |
|
USED_PERCENT |
NUMBER |
Percentage of used space,as a function of the maximum possible tablespace size |
从官网的说明来看。通过视图DBA_TABLESPACE_USAGE_METRICS能够非常方便的查看各类型表空间的使用情况,包含永久、暂时和undo表空间。
可是,通过这个视图查询到的结果,和传统的SQL脚步查询到的结果不一致。并且相差非常大。
看一下DBA_TABLESPACE_USAGE_METRICS视图的定义语句:
select text from dba_views where view_name='DBA_TABLESPACE_USAGE_METRICS';
TEXT
-----------------------------------------------------------------
SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
(sum(f.allocated_space)/sum(f.file_maxsize))*100
FROM sys.ts$ t, v$filespace_usage f
WHERE
t.online$ != 3 and
t.bitmapped <> 0 and
t.contents$ = 0 and
bitand(t.flags, 16) <> 16 and
t.ts# = f.tablespace_id
GROUP BY t.name, f.tablespace_id
union
SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
(sum(f.allocated_space)/sum(f.file_maxsize))*100
FROM sys.ts$ t, v$filespace_usage f
WHERE
t.online$ != 3 and
t.bitmapped <> 0 and
t.contents$ <> 0 and
f.flag = 6 and
t.ts# = f.tablespace_id
GROUP BY t.name, f.tablespace_id
union
SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
(sum(f.allocated_space)/sum(f.file_maxsize))*100
FROM sys.ts$ t, gv$filespace_usage f, gv$parameter param
WHERE
t.online$ != 3 and
t.bitmapped <> 0 and
f.inst_id = param.inst_id and
param.name = 'undo_tablespace' and
t.name = param.value and
f.flag = 6 and
t.ts# = f.tablespace_id
GROUP BY t.name, f.tablespace_id
-----------------------------------------------------------------
能够看出,DBA_TABLESPACE_USAGE_METRICS查询到的重要数据出自v$filespace_usage视图。
对v$filespace_usage图,11g官方文档的说明例如以下:
V$FILESPACE_USAGE summarizes space allocation information of each datafile and tempfile.
Column |
Datatype |
Description |
TABLESPACE_ID |
nubmer |
ID of the tablespace to which the file belongs |
RFNO |
NUMBER |
Relative file number of the file |
ALLOCATED_SPACE |
NUMBER |
Total allocated space in the file |
FILE_SIZE |
NUMBER |
Current file size |
FILE_MAXSIZE |
NUMBER |
Maximum file size |
CHANGESCN_BASE |
NUMBER |
SCN base of the last change to the file |
CHANGESCN_WRAP |
NUMBER |
SCN wrap of the last change to the file |
FLAG |
NUMBER |
Flags for file attributes |
依据以上分析,能够得出下面结论:
1、DBA_TABLESPACE_USED_SPACE是已经分配的空间,相应V$FILESPACE_USAGE的ALLOCATED_SPACE字段。
2、DBA_TABLESPACE_USAGE_METRICS的TABLESPACE_SIZE相应V$FILESPACE_USAGE的FILE_MAXSIZE字段(而不是FILE_SIZE)。
个blocks。
SQL> select * from dba_tablespace_usage_metrics;
TABLESPACE_NAME USED_SPACE TABLESPACE_SIZE USED_PERCENT
------------------------------ ---------- --------------- -------
SYSAUX 16576 4194302 .395202825
SYSTEM 33912 4194302 .808525471
TEMP 0 4194302 0
UNDOTBS1 288 4194302 .006866458
USERS 24 4194302 .000572205
而以下是用SQL脚本查询到的表空间使用率情况,出入非常大:
TABLESPACE_NAME SUM_SPACE SUM_BLOCKS USED_SPACE USED_RATE FREE_SPACE
---------- ---------- ---------- ---------- ---------- ----------
SYSAUX 140M 17920 129.56M 92.54% 10.44M
SYSTEM 300M 38400 265M 88.33% 35M
TEMP 20M 2560 16M 80% 4M
UNDOTBS1 200M 25600 19.31M 9.66% 180.69M
USERS 5M 640 .19M 3.8% 4.81M
以下測试对于自己主动扩展和非自己主动扩展的表空间。两种方法的查询结果:
1、创建表空间
TS1:自己主动扩展。
TS2:非自己主动扩展。
SQL> create tablespace TS1 datafile 'E:\oracle\product\10.2.0\oradata\ORCL\DATAFILE\ts01.dbf' size 100M autoextend on next 10M maxsize 1G;
表空间已创建。
SQL> create tablespace TS2 datafile 'E:\oracle\product\10.2.0\oradata\ORCL\DATAFILE\ts02.dbf' size 100M autoextend off;
表空间已创建。
2、分别使用两种方法查看表空间情况
(1)、使用DBA_TABLESPACE_USAGE_METRICS视图
SQL> select * from dba_tablespace_usage_metrics where tablespace_name in ('TS1','TS2');
TABLESPACE_NAME USED_SPACE TABLESPACE_SIZE USED_PERCENT
------------------------------ ---------- --------------- -------
TS1 0 131072 0
TS2 0 12800 0
(2)、使用SQL脚本查看
TABLESPACE_NAME SUM_SPACE SUM_BLOCKS USED_SPACE USED_RATE FREE_SPACE
--------------- ---------- ---------- ---------- ----------
TS1 100M 12800 .06M .06% 99.94M
TS2 100M 12800 .06M .06% 99.94M
3、分别在两个表空间创建一样的表,插入数据
SQL> create table tt1 tablespace ts1 as select * from dba_objects;
表已创建。
SQL> insert into tt1 select * from dba_objects;
已创建11334行。
SQL> insert into tt1 select * from dba_objects;
已创建11334行。
SQL> insert into tt1 select * from dba_objects;
已创建11334行。
SQL> insert into tt1 select * from dba_objects;
已创建11334行。
SQL> insert into tt1 select * from dba_objects;
已创建11334行。
SQL> commit;
提交完毕。
SQL> create table tt2 tablespace ts2 as select * from dba_objects;
表已创建。
SQL> insert into tt2 select * from dba_objects;
已创建11335行。
SQL> insert into tt2 select * from dba_objects;
已创建11335行。
SQL> insert into tt2 select * from dba_objects;
已创建11335行。
SQL> insert into tt2 select * from dba_objects;
已创建11335行。
SQL> insert into tt2 select * from dba_objects;
已创建11335行。
SQL> commit;
提交完毕。
4、再用两种方法查看表空间使用情况
SQL> select * from dba_tablespace_usage_metrics where tablespace_name in ('TS1','TS2');
TABLESPACE_NAME USED_SPACE TABLESPACE_SIZE USED_PERCENT
--------------- ---------- --------------- ------------
TS1 896 131072 .68359375
TS2 896 12800 7
通过对照,表空间TS1和TS2实际使用的空间是一致的,都是896个block。但对于能够扩展的表空间TS1,这里表空间的最大值为131072个block,即指定的能够扩展到的1G。由此,计算出的使用率也就出现了偏差。
因此,对于自己主动扩展的表空间。DBA_TABLESPACE_USAGE_METRICS视图就不那么适用了。
使用脚本:
TABLESPACE_NAME SUM_SPACE SUM_BLOCKS USED_SPACE USED_RATE FREE_SPACE
--------------- ---------- ---------- ---------- ----------
TS1 100M 12800 7.06M 7.06% 92.94M
TS2 100M 12800 7.06M 7.06% 92.94M
能够看出。通过脚本查询出的结果。两个表空间的使用率是一致的。
总结:
对于非自己主动扩展的表空间,使用DBA_TABLESPACE_USAGE_METRICS视图,与传统脚本使用的DBA_DATA_FILE和DBA_FREE_SPACE查询的结果是一致的。
对于自己主动扩展的表空间,DBA_TABLESPACE_USAGE_METRICS视图查询的结果就不准确了,还要使用传统的方法查询。
转自:http://blog.itpub.net/25744374/viewspace-774253
[转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别的更多相关文章
- db2 查看表空间使用率
1. 统计所有节点表空间使用率 select substr(TABLESPACE_NAME,1,20) as TBSPC_NAME,bigint(TOTAL_PAGES * PAGE_SIZE)/10 ...
- 查看表空间使用率及shrink 表空间
首先,可以通过下面的sql statement来查看表空间的使用情况.注意,该语句是在10g下测试过. SELECT FREE.TABLESPACE_NAME, FREE.FREE_SPACE/TOT ...
- ORACLE查看表空间对象
ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME AS TABLESPACE_NAME ...
- Oracle数据库查看表空间sql语句
转: Oracle数据库查看表空间sql语句 2018-09-03 15:49:51 兰海泽 阅读数 6212 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...
- oracle查看表空间的大小及使用情况sql语句
--------------------------tablespace------------------------------------------------ 1.//查看表空间的名称及大小 ...
- Oracle 查看表空间的大小及使用情况sql语句
--1.查看表空间的名称及大小 )), ) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.t ...
- oracle表空间使用率统计查询
今天发现有一张采样表从1月5号开始不记录数据了,所以想查看一下表空间使用率,在网上零零散散找了很多资料,现在记录如下,也不知道哪一个最准确.还有一个就是网上拷贝的sql代码格式太乱了,不好看,找到一个 ...
- Oracle dba_tablespace_usage_metrics 视图 查看表空间 说明
一.DBA_TABLESPACE_USAGE_METRICS 视图的理论说明 群里一朋友说使用dba_tablespace_usage_metrics 视图查看表空间的结果不正确,如下: ...
- SYSAUX表空间使用率高问题处理
SYSAUX表空间做为SYSTEM表空间的辅助表空间,主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等,而假设SYSAUX表空间在默认条件下你假设不做不论什么配置,随着时间的推移.会膨胀的 ...
随机推荐
- css中vertical-align垂直居中的认识
目标大纲 1.vertical-align为何不起作用?? vertical-align只钟情于“inline-block内联块级元素/inline元素” vertical-align属性 text- ...
- online_jf.lua --累计在线时间领取物品(积分)的lua脚本
原作者: ayase 8-27修正 修复首次使用后的红字不需要额外进数据库导入计分表,这lua全自动生成 ----------------------------------------------- ...
- Gitblit中采用Ticket模式进行协作开发
Git目前的代码分支管理模型中,比较主要的有Git-Flow.Github Pull Request.大家日常或多或少都在用着. 在不想安装Gitlab这种重量级的环境的情况下,如果是利用git一步步 ...
- AutoHotkey之自问自答
偶然的机会,接触到了AutoHotkey这个东西,觉得不错,便花时间了解了一下.以此来记录我在学习AutoHotkey时遇到的各种问题,以及我对其的解释(有可能不专业甚至出错). Time:2015- ...
- JVM调优-Jva中基本垃圾回收算法
从不同的的角度去划分垃圾回收算法. 按照基本回收策略分 引用计数(Reference Counting) 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回 ...
- JVM 1.类的加载、连接、初始化
Java类的加载是由类加载器来完成的,过程如下: 首先,加载是把硬盘.网络.数据库等的class文件中的二进制数据加载到内存的过程,然后会在Java虚拟机的运行时数据区的堆区创建一个Class对象,用 ...
- linux 给用户添加进新的组
给用户user1添加一个新的组group1 usermod -G group1 #给当前登录用户所在组设置为 group1 注意:上面的命令有个问题需要知道,这个操作是重置用户所在组,也就是会让当前用 ...
- 设定MS SQL Server 2008定期自动备份
1.说明 SQL Server2008 本身具有定期自动备份功能,我们只需要通过简单的配置就可以实现非常简单高效的自动备份功能. 2.打开SQL Server代理服务 要实现自动备份功能,首先要保证S ...
- SquirrelMQ消息队列
SquirrelMQ是一个快速的消息队列. SquirrelMQ特性: 1. SquirrelMQ使用Slab内存分配算法来降低内存碎片,使用epoll来解决高并发问题.效率比redis要高,使用简单 ...
- macaca web(4)
米西米西滴,吃过中午饭来一篇,话说,上回书说道macaca 测试web(3),参数驱动来搞,那么有小伙本又来给雷子来需求, 登录模块能不能给我给重新封装一下吗, 我说干嘛封装,现在不挺好,于是乎,接着 ...