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; /*SELECT tablespace_name, sum ( blocks ) as free_blk ,   trunc ( sum ( bytes ) /(1024*1024) ) as free_m,   max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks   FROM dba_free_space GROUP BY tablespace_name;*/
/*
* SqlName: obj_seg
* 2006-11-17 By HuiYi
* 查詢對象大小
*/
select owner,sum(bytes)/1024/1024/1024 "Space(G)" from dba_segments group by owner order by 2 desc col segment_name format a30
col segment_type format a15
col tablespace_name format a10
col bytes heading "Size(M)"
with t as(
select segment_name,owner,owner||‘.‘||segment_name,
       segment_type,
       tablespace_name,
       bytes / 1024 / 1024 bytes
  from dba_segments
where owner = upper(‘&user‘)
order by bytes desc
)
select * from t where rownum<10;

Oracle磁碟空間使用統計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.