悉数表空间的计算情况,也许碰到查看EM时,某个表空间的使用超过90%, 进入的数据库发现查看不同的视图又得到不同的结果。
接下来我们详细解释每个视图的空间用途和区别:
1. EM 是从dba_tablespace_usage_metrics获取的数据,自动扩展(autoextensible)的情况下,这个视图中的tablespace_size是dba_data_files的最大的块数
也就是dba_tablespace_usage_metrics的tablespace_size是datafile能增长到的最大值。
dba_tablespace_usage_metrics的used_space是已经分配的空间,对应v$filespace_usage的allocated_space字段
而对于非自动扩展的表空间,使用DBA_TABLESPACE_USAGE_METRICS视图,与传统脚本使用的DBA_DATA_FILE和DBA_FREE_SPACE查询的结果是一致的。
具体请参考:Difference in Tablespace Size Values From dba_data_files and dba_tablespace_usage_metrics/V$Filespace_usage (Doc ID 455715.1)
2. 关于临时表空间的使用,也许会碰到v$temp_space_header的temp usage怎么大于v$tempseg_usage(或v$sort_usage)的值呢?
视图v$sort_usage或者v$tempseg_usage(和v$sort_segment)给出了sort segment分配的正确信息,我们应该通过使用这三个表来查询当前临时空间的确切使用情况的。
但是,v$temp_space_header则是当临时空间使用最高的时候每个临时文件的多少块数,事实上,它展示了每个临时文件初始块的个数并非实际分配的块。
v$sort_usage/v$tempseg_usage确切的反映了初始块中对每个事务分配了多少实际的sort extent。
另外,v$temp_space_header的信息是持久化的,即便重启也不会改变;而V$sort_segment and v$sort_usage不是持久的。
$sqlplus / as sysdba
———————–<
set lines 500
set long 9999
set pages 999
set serveroutput on size 1000000
set feedback off
SET MARKUP HTML ON SPOOL ON HEAD “<TITLE>SQL*Plus Report</title><STYLE TYPE=’TEXT/CSS’><!–BODY {background: ffffc6} –></STYLE>”
spool query_result.html
set echo off
select TABLESPACE_NAME,TOTAL_BLOCKS,USED_BLOCKS,FREE_BLOCKS from v$sort_segment;
SELECT a.username, a.sid, a.serial#, a.osuser,a.schemaname,a.program,a.type,b.tablespace, to_char(trunc((b.blocks * d.value) / 1024 /1024)) || ‘ MB’ siz
, b.segtype , c.sql_text
FROM v$session a, v$tempseg_usage b, v$sqlarea c
, (select value from v$parameter where name = ‘db_block_size’) d
WHERE a.saddr = b.session_addr
AND c.address= a.sql_address
AND c.hash_value = a.sql_hash_value
ORDER BY b.tablespace, b.blocks;
spool off
SET MARKUP HTML OFF
set echo on
———————–>
具体请参考:Mismatch Between V$TEMP_SPACE_HEADER and V$TEMPSEG_USAGE/V$SORT_USAGE (Doc ID 2095211.1)
正确的查看空间使用情况的脚本是:Script to Monitor Tablespace Usage and Information (Doc ID 1902106.1)
下载TSINFO.sql脚本,在执行:
@<Complete path of the .sql file> Tablespace name
i.e
@”C:\Users\administrator\Desktop\TSINFO.sql USERS”