Oracle磁碟空間使用統計

來源:互聯網
上載者:User

對於大型資料庫,Oracle佔用的磁碟空間非常大,掌握資料庫中那些使用者、表佔用了多殺磁碟空間,以及增長情況,可以方便日後對磁碟系統進行維護和擴充。

對Oracle磁碟空間使用方式,可以分為按照資料表空間、使用者或者表來進行統計。

(一)、資料表空間

計算資料表空間的剩餘大小

select A.TABLESPACE_NAME,A.BYTES/(1024*1024*1024) "SPACE(G)",
C.BYTES/(1024*1024) "FREE SPACE(M)",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=C.TABLESPACE_NAME;
或者

select tablespace_name, sum(bytes)/(1024*1024*1024) "SPACE(G)"
from dba_free_space
group by tablespace_name;
(二)、使用者

計算每個使用者佔用的磁碟空間

select owner,sum(bytes)/1024/1024/1024 "Space(G)"
from dba_segments
group by owner
order by 2;
計算某個使用者佔用的磁碟空間

select owner,sum(bytes)/1024/1024/1024 "Space(G)"
from dba_segments
where owner='LIAOJL'
group by owner;
(三)、表

Oracle都是以段為儲存的,segment_name包含了表、索引、復原段等,所以在dba_extents,dba_segments都可以找到佔用空間大小的資訊。

select sum(bytes)/1024/1024 "Space(M)"
from dba_extents
where owner='LIAOJL' and segment_name='STUDENTS';
dba_segments也可以計算表的大小:

select segment_name,bytes/1024/1024 "Space(MB)"
from dba_segments
where SEGMENT_TYPE='TABLE' and segment_name=upper('你要尋找的表的名字');
當時上面的寫法不完全正確,當表是分區表,dba_segments有多條資訊,可改成:

select segment_name,sum(bytes)/1024/1024 "Space(MB)"
from dba_segments
where segment_name=upper('你要尋找的表的名字');
上述方法對於一個很大的資料庫,SQL語句執行起來會很慢,而且消耗資料庫資源。Oracle支援對錶進行分析,執行分析表操作後可以在dba_tables等系統資料表中查詢表大小、行數等資訊,不過這些資訊不是即時更新的,可以在資料庫空閑時,通過計劃任務來更新。

分析SQL方法:

analyze   table   tab_name   compute   statistics;
表太大的話可以執行:

analyze   table   tab_name   estimate   statistics;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.