반응형
딕셔너리뷰에서
USER_SEGMENTS 에서 확인할수 있습니다.
SELECT SEGMENT_NAME, BYTES FROM USER_SEGMENTS where SEGMENT_TYPE=''TABLE''
에서 점유용량을 확인할수 있습니다.
//////////////////////////////////////////////////////////////////////////////////
위 delri님의 방법은 해당 Table에 할당되어 있는 크기를 측정하는 방법이며
만일 Table에 공간 할당은 되었으나 아직 (전혀)사용되지 않은 공간을 제외한 실
제 사용되고 있는
공간을 확인하실려면(즉 HWM 아래 공간)...
1. 해당 table을 analyze 해서
analyze table t_name compute statistics;
2. 해당 table의 blocks를 구한다.
select blocks from dba_tables where table_name =''T_NAME'';
==> blocks +1(segment header block) 이 해당 table이 사용중인 db block 갯수
위 계산에서 물론 사용된 후 delete에 의해 현재 완전히 비어 있는 block도 사용
고 있는 block으로 인식
하므로 완전히 비어 있는 block을 제거하기 위해서는
oracle8 이상인 경우 rowid는 아래처럼 구성되어 있기때문에
object fil block row
------ --- ------ ---
AAABPW AAF AAAAv1 AAA
1. select count(*)
from (select substr(rowid,1,15) from test group by substr(rowid,1,15) );
하면..HWM아래 할당은 되었지만 완전히 비어 있는 block을 빼고 조금이라도 사
용된 block의 갯수만 구함
예제)
1* analyze table costs compute statistics
SQL> /
Table analyzed.
SQL> select blocks from user_tables where table_name=''COSTS'';
BLOCKS
----------
2924 <---HWM 아래 block갯수
1 select count(*)
2 from
3* (select substr(rowid,1,15) from costs group by substr(rowid,1,15))
SQL> /
COUNT(*)
----------
2506 <---HWM 아래 block중 사용중인 block갯수
** 정리하면
Table의 공간(크기)이란 아래 3가지 관점에서 값이 다를수 있습니다.
1. 해당 Table에 할당된 크기
-Table에 할당되었지만 사용중 또는 미사용공간 전부 포함
2. HWM 아래 크기
- 할당된 공간중에서 full table scan시 검색하는 부분까지만의 크기
- 즉 HWM이후 공간은 아직 한번도 사용이 안된 new Block임.
3. HWM 아래중 완전히 비어 있는 block을 제외한 크기
- delete에 의해 block전체가 비어 있는 block을 제외한 크기
//////////////////////////////////////////////////////////////////////////////////
위의 HUMAN21님말대로 USER_SEGMENTS 의 BYTES는 실데이타 공간이 아니라 할당영
역을 나타냅니다.. 빈 블럭도 포함이 되는거죠..
만일 UNUSED 블럭을 제외한 실제 데이타 공간을 구하려면..아래와 같
이 구하시면 될것 같네요
select table_name, GREATEST(4, ceil(num_rows /
((round(((8192 - (ini_trans * 23)) *
((100 - pct_used) /100)) / avg_row_len)))) *
8192)/1024/1024
TableSize_Mbytes
from user_tables
위에서 8192 는 SHOW PARAMETER 의 DB_BLOCK_SIZE 입니다.
위의 문을 정확히 하기위해서는 ANALYZE TABLE은 꼭 해주셔야지 정확한 값이 구해지겠죠..
펌질한곳 : http://otn.oracle.co.kr/forum/forum_open_view.jsp?forum_seqno=20040907205724&forum_cate=ORCL
작성자 : 지눅서
작성일자: 2005년 03월 10일 Thursday PM 02:17:07
USER_SEGMENTS 에서 확인할수 있습니다.
SELECT SEGMENT_NAME, BYTES FROM USER_SEGMENTS where SEGMENT_TYPE=''TABLE''
에서 점유용량을 확인할수 있습니다.
//////////////////////////////////////////////////////////////////////////////////
위 delri님의 방법은 해당 Table에 할당되어 있는 크기를 측정하는 방법이며
만일 Table에 공간 할당은 되었으나 아직 (전혀)사용되지 않은 공간을 제외한 실
제 사용되고 있는
공간을 확인하실려면(즉 HWM 아래 공간)...
1. 해당 table을 analyze 해서
analyze table t_name compute statistics;
2. 해당 table의 blocks를 구한다.
select blocks from dba_tables where table_name =''T_NAME'';
==> blocks +1(segment header block) 이 해당 table이 사용중인 db block 갯수
위 계산에서 물론 사용된 후 delete에 의해 현재 완전히 비어 있는 block도 사용
고 있는 block으로 인식
하므로 완전히 비어 있는 block을 제거하기 위해서는
oracle8 이상인 경우 rowid는 아래처럼 구성되어 있기때문에
object fil block row
------ --- ------ ---
AAABPW AAF AAAAv1 AAA
1. select count(*)
from (select substr(rowid,1,15) from test group by substr(rowid,1,15) );
하면..HWM아래 할당은 되었지만 완전히 비어 있는 block을 빼고 조금이라도 사
용된 block의 갯수만 구함
예제)
1* analyze table costs compute statistics
SQL> /
Table analyzed.
SQL> select blocks from user_tables where table_name=''COSTS'';
BLOCKS
----------
2924 <---HWM 아래 block갯수
1 select count(*)
2 from
3* (select substr(rowid,1,15) from costs group by substr(rowid,1,15))
SQL> /
COUNT(*)
----------
2506 <---HWM 아래 block중 사용중인 block갯수
** 정리하면
Table의 공간(크기)이란 아래 3가지 관점에서 값이 다를수 있습니다.
1. 해당 Table에 할당된 크기
-Table에 할당되었지만 사용중 또는 미사용공간 전부 포함
2. HWM 아래 크기
- 할당된 공간중에서 full table scan시 검색하는 부분까지만의 크기
- 즉 HWM이후 공간은 아직 한번도 사용이 안된 new Block임.
3. HWM 아래중 완전히 비어 있는 block을 제외한 크기
- delete에 의해 block전체가 비어 있는 block을 제외한 크기
//////////////////////////////////////////////////////////////////////////////////
위의 HUMAN21님말대로 USER_SEGMENTS 의 BYTES는 실데이타 공간이 아니라 할당영
역을 나타냅니다.. 빈 블럭도 포함이 되는거죠..
만일 UNUSED 블럭을 제외한 실제 데이타 공간을 구하려면..아래와 같
이 구하시면 될것 같네요
select table_name, GREATEST(4, ceil(num_rows /
((round(((8192 - (ini_trans * 23)) *
((100 - pct_used) /100)) / avg_row_len)))) *
8192)/1024/1024
TableSize_Mbytes
from user_tables
위에서 8192 는 SHOW PARAMETER 의 DB_BLOCK_SIZE 입니다.
위의 문을 정확히 하기위해서는 ANALYZE TABLE은 꼭 해주셔야지 정확한 값이 구해지겠죠..
펌질한곳 : http://otn.oracle.co.kr/forum/forum_open_view.jsp?forum_seqno=20040907205724&forum_cate=ORCL
작성자 : 지눅서
작성일자: 2005년 03월 10일 Thursday PM 02:17:07
'전산Tip > Oracle' 카테고리의 다른 글
오라클 옵티마이져의 최적화 수행원리 (0) | 2008.09.24 |
---|---|
오라클 데이터 타입 (0) | 2008.09.21 |
한방 쿼리 Tip (0) | 2008.09.21 |