Oracle dba_tablespace_usage_metrics 视图 查看表空间 说明
一.DBA_TABLESPACE_USAGE_METRICS 视图的理论说明
群里一朋友说使用dba_tablespace_usage_metrics 视图查看表空间的结果不正确,如下:
dba_tablespace_usage_metrics视图在oracle 10g中引入,但未公开。 到了Oracle11g公开了这个视图。因为在Oracle 10g里可以使用这个视图,但是在官网文档里看不到说明,但是在11g的官方文档里可以查看到该视图的说明。
Oracle 11g中对这个视图的说明如下:
DBA_TABLESPACE_USAGE_METRICS describestablespace 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(blocks) |
TABLESPACE_SIZE |
NUMBER |
|
Total size of the tablespace(blocks) |
USED_PERCENT |
NUMBER |
|
Percentage of used space, as a function of the maximum possible tablespace size(USED_SPACE / TABLESPACE_SIZE * 100) |
从官网的说明,这个视图很方便,通过DBA_TABLESPACE_USAGE_METRICS视图就可以查看所有类型表空间的使用情况,包括永久,临时和undo 表空间。
Oracle的文档也说的不够详细。上面表格中的括号部分Dave的补充。 DBA_TABLESPACE_USAGE_METRICS
视图中的USED_SPACE和TABLESPACE_SIZE的单位是block。默认情况下,oracle的每个block 是8k。
我们先查看DBA_TABLESPACE_USAGE_METRICS视图的创建代码:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 -Production
NLSRTL Version 11.2.0.3.0 – Production
SQL> set pagesize 500
SQL> set long 999999
SQL> select text from dba_views where view_name='DBA_TABLESPACE_USAGE_METRICS';
TEXT
--------------------------------------------------------------------------------
SELECT t.name,
tstat.kttetsused,
tstat.kttetsmsize,
(tstat.kttetsused / tstat.kttetsmsize) * 100
FROM sys.ts$ t, x$kttets tstat
WHERE
t.online$ != 3 and
t.bitmapped <> 0 and
t.contents$ = 0 and
bitand(t.flags, 16) <> 16 and
t.ts# = tstat.kttetstsn
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, t.ts#
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, t.ts#
SQL>
通过上面的代码,我们可以看到,DBA_TABLESPACE_USAGE_METRICS说能查询所有类型的表空间,其本质也是进行了3个union。其关键数据还是出自:v$filespace_usage 视图。
官网对v$filespace_usage 视图的说明如下:
V$FILESPACE_USAGE summarizes spaceallocation information of each datafile and tempfile.
Column |
Datatype |
Description |
TABLESPACE_ID |
NUMBER |
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_USAGE_METRICS的USED_SPACE是已经分配的空间,对应V$FILESPACE_USAGE的ALLOCATED_SPACE的字段。
2. DBA_TABLESPACE_USAGE_METRICS的TABLESPACE_SIZE对应V$FILESPACE_USAGE的FILE_MAXSIZE字段。 这里对应的是最大值,如果我们的数据文件是自增长的,那么对于8k的block,那么这里的最大值就是32G。也就是最开始显示的4194302个blocks。
这个值与我们使用传统的DBA_DATA_FILES和DBA_FREE_SPACE查询的结果就会有很大的出入。
/* Formatted on 2013/3/21 20:39:40(QP5 v5.185.11230.41888) */
SELECTD.TABLESPACE_NAME,
SPACE"SUM_SPACE(M)",
BLOCKSSUM_BLOCKS,
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( SELECTTABLESPACE_NAME,
ROUND (SUM(BYTES)/(1024 * 1024),2) SPACE,
SUM (BLOCKS)BLOCKS
FROM DBA_DATA_FILES
GROUPBYTABLESPACE_NAME) D,
( SELECTTABLESPACE_NAME,
ROUND (SUM(BYTES)/(1024 * 1024),2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUPBYTABLESPACE_NAME) F
WHERED.TABLESPACE_NAME =F.TABLESPACE_NAME(+)
ORDER BY"USED_RATE(%)"DESC;
二.测试
我们这里创建2个表空间永久的表空间:
1) TS1: 自增长
2) TS2:不增长
然后分别使用使用上面说的2种方法查询表空间的使用情况。
2.1 创建表空间
SQL> create tablespace TS1 datafile'/u01/app/oracle/oradata/dave/ts01.dbf' size 100M autoextend on next 10Mmaxsize 1G;
Tablespace created.
SQL> create tablespace TS2 datafile'/u01/app/oracle/oradata/dave/ts02.dbf' size 100M autoextend off;
Tablespace created.
2.2 使用2种方法查看表空间情况
SQL> col tablespace_name for a15
SQL> select * from DBA_TABLESPACE_USAGE_METRICSwhere tablespace_name in ('TS1','TS2');
TABLESPACE_NAME USED_SPACE TABLESPACE_SIZEUSED_PERCENT
--------------- ---------- ---------------------------
TS1 128 131072 .09765625
TS2 128 12800 1
SQL> SELECT D.TABLESPACE_NAME,
2 SPACE"SUM_SPACE(M)",
3 BLOCKS SUM_BLOCKS,
4 SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",
5 ROUND ( (1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",
6 FREE_SPACE"FREE_SPACE(M)"
7 FROM ( SELECT TABLESPACE_NAME,
8 ROUND (SUM(BYTES) / (1024 * 1024), 2) SPACE,
9 SUM (BLOCKS) BLOCKS
10 FROM DBA_DATA_FILES
11 GROUP BY TABLESPACE_NAME) D,
12 ( SELECT TABLESPACE_NAME,
13 ROUND (SUM (BYTES) / (1024* 1024), 2) FREE_SPACE
14 FROM DBA_FREE_SPACE
15 GROUP BY TABLESPACE_NAME) F
16 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) AND D.TABLESPACE_NAME in('TS1','TS2');
TABLESPACE_NAME SUM_SPACE(M) SUM_BLOCKSUSED_SPACE(M) USED_RATE(%) FREE_SPACE(M)
--------------- ------------ ----------------------- ------------ -------------
TS2 100 12800 1 1 99
TS1 100 12800 1 1 99
2.3 分别在2个表空间创建一样的表
SQL> create table D1 tablespace TS1 asselect * from dba_objects;
Table created.
SQL> insert into D1 select * fromdba_objects;
75489 rows created.
SQL> insert into D1 select * fromdba_objects;
75489 rows created.
SQL> insert into D1 select * fromdba_objects;
75489 rows created.
SQL> insert into D1 select * fromdba_objects;
75489 rows created.
SQL> commit;
Commit complete.
SQL> create table D2 tablespace TS2 asselect * from dba_objects;
Table created.
SQL> insert into D2 select * fromdba_objects;
75490 rows created.
SQL> insert into D2 select * fromdba_objects;
75490 rows created.
SQL> insert into D2 select * fromdba_objects;
75490 rows created.
SQL> insert into D2 select * fromdba_objects;
75490 rows created.
SQL> commit;
Commit complete.
2.4 再次查看表空间变化
SQL> select * from DBA_TABLESPACE_USAGE_METRICS where tablespace_name in('TS1','TS2');
TABLESPACE_NAME USED_SPACE TABLESPACE_SIZEUSED_PERCENT
--------------- ---------- ---------------------------
TS1 5632 131072 4.296875
TS2 5632 12800 44
注意:
我们TS1是最大表空间是131072。 因为我们创建TS1表空间时指定的大小是1G。所以我们计算一下:131072*8K/1024= 1024M =1G。这样就正好和我们第一节的理论知识保持一致。
通过对比我们也可以确定,我们TS1表空间实际使用的空间和TS2表空间一致,都是5632个block。但是在计算使用率的时候,就出现了偏差。所以对于自动增长的表空间,DBA_TABLESPACE_USAGE_METRICS 视图就不那么适用了。
SQL> SELECT D.TABLESPACE_NAME,
2 SPACE"SUM_SPACE(M)",
3 BLOCKS SUM_BLOCKS,
4 SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",
5 ROUND ( (1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",
6 FREE_SPACE"FREE_SPACE(M)"
7 FROM ( SELECT TABLESPACE_NAME,
8 ROUND (SUM(BYTES) / (1024 * 1024), 2) SPACE,
9 SUM (BLOCKS) BLOCKS
10 FROM DBA_DATA_FILES
11 GROUP BY TABLESPACE_NAME) D,
12 ( SELECT TABLESPACE_NAME,
13 ROUND (SUM (BYTES) / (1024* 1024), 2) FREE_SPACE
14 FROM DBA_FREE_SPACE
15 GROUP BY TABLESPACE_NAME) F
16 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) AND D.TABLESPACE_NAME in('TS1','TS2');
TABLESPACE_NAME SUM_SPACE(M) SUM_BLOCKSUSED_SPACE(M) USED_RATE(%) FREE_SPACE(M)
--------------- ------------ ----------------------- ------------ -------------
TS2 100 12800 44 44 56
TS1 100 12800 44 44 56
但我们通过DBA_DATA_FILES和DBA_FREE_SPACE查询结果就是一致的。
三.小结
通过上面的对比,dba_tablespace_usage_metrics视图对于非自动增长的表空间,和我们使用传统的DBA_DATA_FILES和DBA_FREE_SPACE查询的结果是一致的。
但是对于自动增长的表空间,dba_tablespace_usage_metrics的表空间就不准确了。还是要使用原始的方法来查询。
Oracle dba_tablespace_usage_metrics 视图 查看表空间 说明的更多相关文章
- Oracle 数据库中查看表空间的2种方法
在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...
- [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE. Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.其实, ...
- Oracle 查看表空间大小及其扩展
在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成.系统中默认创建的几个表空间:S ...
- 【总结】Oracle数据库 查看表空间和增加表空间
一.Oracle查看 表空间 的名称及其大小 查看 表空间的名称及其大小的SQL语句: select t1.tablespace_name,round(sum(bytes/(1024*1024)),0 ...
- Oracle以及SDE维护常用命令-查看表空间等
之前现场反馈一个数据更新的问题,查看感觉是因为表空间满了导致的(错误在之前的博客随笔中写过),因此远程对服务器进行查看.个人平常都是通过Oracle客户端的Entreprise Manager Con ...
- ORACLE查看表空间对象
ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME AS TABLESPACE_NAME ...
- Oracle 查看表空间的大小及使用情况sql语句
--1.查看表空间的名称及大小 )), ) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.t ...
- Oracle查看表空间及修改数据文件大小
Oracle查看表空间及修改数据文件大小 第一步:查看所有表空间及表空间大小: select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from ...
- Oracle查看表空间,创建表空间
查看表空间: SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space FROM ...
随机推荐
- JavaSE中Collection集合框架学习笔记(1)——具有索引的List
前言:因为最近要重新找工作,Collection(集合)是面试中出现频率非常高的基础考察点,所以好好恶补了一番. 复习过程中深感之前的学习不系统,而且不能再像刚毕业那样死背面试题,例如:String是 ...
- 设置select标签的高度
当无法给select标签设置高度的时候,给他加一个背景色,就可以设置了.
- php七牛批量删除空间内的所有文件方法
相信大家都在使用七牛的免费云存储服务的同时,有清空七牛云存储镜像文件或者批量删除七牛云空间文件的需求,该怎么做?官方的工具好像并没有提供批量删除的功能,七牛云官方给出的建议是删除空间,再新建一个这样太 ...
- HttpServletResponse addHeader() 与 setHeader() 区别
对于addHeader() 和 setHeader()这两个方法,可能我们在需要的时候,用起来感觉都一样,都能达到想要的效果.但是这两个方法本质上是不一样的. setHeader(name, val ...
- iOS多线程开发之NSOperation - 快上车,没时间解释了!
一.什么是NSOperation? NSOperation是苹果提供的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更加的面向对象.代码可读性更高.可控性更强 ...
- Redis基本数据结构总结之SET、ZSET和HASH
Redis基本数据结构总结 前言 Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况:还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我 ...
- php利用ob缓存机制实现页面静态化方法全解
首先介绍一下php中ob缓存常用到的几个常用函数 ob_start():开启缓存机制 ob_get_contents():获取ob缓存中的内容 ob_clean()清除ob缓存中的内容,但不关闭缓存 ...
- linux用户及权限管理
[文件管理.管道.用户及组管理.用户及权限管理]\用户及组管理 用户与组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...
- 【微信小程序开发教程】如何显示群名称?
今年 5 月份的时候,微信宣布:「为了更好的针对群场景提供个性化服务,当用户在群聊中点击小程序分享卡片时,小程序支持开发者获取群 ID 和群名称」.但随后没多久,发现小程序只返回了群 ID,并没有给我 ...
- maven创建web工程Spring配置文件找不到问题解决方案
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
