본문 바로가기
Oracle(DB관련)

HWM (High Water Mark) 재설정

by xfree302 2012. 1. 31.
반응형

HWM - 간단히 말해 마지막에 data가 저장되었던 위치다. 
data가 늘어나면 당연히 HWM도 증가한다. 하지만 data가 지워진다 해도 HWM는 줄어들지 않는다.
남은 공간은 data가 늘어나면 재활용된다.

하지만 select 시 table을 full scan 한다면 HWM가 있는 위치까지 scan하기 때문에 실제 data양과 HWM의 차이가 클때는 성능에 영향을 준다.

그래서 delete/insert 가 많은 테이블은 HWM를 재설정 해주는것도 좋다.


1. truncate 테이블명 (delete from 테이블명 는 HWM에 영향을 주지 않는다.)


2. alter table 테이블명 move tablespace 테이블스페이스명
- 같은 tablespace 명으로 해도 된다.(row id 변경된다)
- row id 변경되므로 모든 index rebulid 해야한다.

select 'alter table '||table_name||' move tablespace '||tablespace_name||';' from user_tables;

select 'alter index '||index_name||' rebuild tablespace '||tablespace_name||';' from user_indexes;

index rebuild 시 트랜잭션이 많은 테이블은 lock이 걸릴수 있다..
10g 부터 online 옵션 사용가능 하나, db hang 이 걸리는 경우가 있다고 한다.(db 재기동)
그냥 트랜잭션이 없을 때하는 것이 좋다.


3. alter table 테이블명 shrink space;

- 테이블 영역이 로컬 관리 테이블 영역, 자동 세그먼트(segment) 영역 관리인 것
- LONG 열을 포함하지 않는 것
- 클러스터화 테이블이 아닌 것
- 압축테이블이 아닌 것
- 펑션 색인, 비트 맵 결합 색인을 사용하고 있는 장소
- ON COMMIT 마테리아라이즈드·뷰의 마스터 테이블의 경우
- ROWID 가 변경되기 위해 ROWID 마테리아라이즈드·뷰는 재구축 하지 않으면 정합성이 맞지 않게 된다.
http://xfree302.tistory.com/150

 

반응형