查詢tablespace實際使用量與剩餘空間(free space)以及db或table實際資料量問題

tolywang發表於2007-07-16
到某表空間所有段的加和值,即按表空間分組統計
dba_data_files.bytes-dba_free_space.bytes=dba_segments.bytes
dba_segments中可查詢已分配的段空間大小(dba_extents則是dba_segments中的詳表,segment是由多個extent組成的),表空間總
大小可查詢dba_data_files來獲得,剩餘大小可查詢dba_free_space獲得,這兩者相減就是已分配掉的空間大小可以透過對錶分析後查詢dba_tables(下面多個+1就是段頭塊了)dba_tables.blocks+ dba_tables.empty_blocks+1=user_extents.blocks=user_segments.blocks

另外:
平均行長*總行數=表資料量大小
這裡是資料量,oracle分配給該表的空間自然要比這個大,而且還要受到到pctfree的限制以及該表是否有經過刪除,例如delete很多記錄,空間是不會釋放的,分配的空間就浪費更多
一種極端就是表的引數設定pctfree=0 initial跟next也設定很小例如都是16K,然後插入資料
例如10M的資料量,然後對錶進行分析,那麼這種情況空間利用率很高,按上面公式計算,結果
就會跟dba_segments分配空間的值很接近了,幾乎相等了。
大概量演算法:
查詢tablespace使用量:select tablespace_name,sum(bytes)/1024/1024 from dba_extents where tablespace_name='MIS_TABLESPACE' group by tablespace_name

查詢tablespace剩餘空間:select tablespace_name,round(sum(bytes)/1024/1024,2) "FREE_MB" from dba_free_space group by tablespace_name

查詢table所佔硬碟的大小:select table_name, blocks * (select value from v$parameter where name='db_block_size')/1024/1024 as size_mb from user_tables where table_name=TABLE_NAME

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84793/,如需轉載,請註明出處,否則將追究法律責任。

相關文章