본문 바로가기
Dev/Oracle

[Oracle] HWM (High Water Mark)

by 흰바다제비 2022. 6. 9.
728x90

HWM

HWM는 저장공간을 갖는 세그먼트 영역에서 사용한 적이 있는 Block과 사용한 적이 없는 Block 의 경계점이다. 사용된 적이 있는 Block까지의 표시점이라고 할 수 있다.

그림에서 전체 블록은 SEGMENT에 할당된 영역, 각각의 블록은 DATA BLOCK, 5개의 BLOCK 묶음은 EXTENT, 빨간색으로 표시된 부분이 HWM 이다.

 

테이블에 데이터가 추가(Insert)될 때 세그먼트에는 할당된 블록의 집합인 익스텐트에 데이터를 적재하도록 오라클 데이터 블록 포맷을 수행한다. HWM은 이 포맷된 위치를 표시하는 역할을 한다.

 

HWM의 특징은 다음과 같다.

  • EXTENT 확장의 기준이며, 모든 세그먼트에 하나씩 존재
  • 전체 테이블을 스캔(FULL SCAN)할 때 테이블의 첫 블록에서부터 HWM까지 스캔
    • HWM 아래로 FREE BLOCK이 많을 경우 효율은 저하
  • HWM 이전에 위치한 블록까지만 저장 가능
  • HWM은 테이블 익스텐트의 뒤로만 이동 가능(HWM Bump up)
    • HWM는 관리자가 별도로 초기화하거나 축소시키지 않으면 늘어나기만 하고 줄어들지 않음
  • Truncate, Drop을 수행할 경우 인위적으로 HWM을 앞으로 이동 가능

 

HWM 위치까지 데이터가 추가되면 HWM은 5의 배수로 뒤로 이동하는데, 이를 HWM Bump up이라고 한다.

이 때 데이터를 먼저 저장하고 저장공간이 꽉 차게 되면 무작정 추가 공간을 할당하는게 아니라, 우선 HWM을 뒤로 이동시키고 생긴 공간에 데이터를 저장하게 된다.

HWM Bump up은 많은 리소스를 사용하기 때문에 오라클은 데이터가 삭제돼도 이미 할당됐던 익스텐트를 반환하지 않고 재사용 가능한 공간으로 비워둔다. (HWM의 위치는 유지된다.)

http://www.gurubee.net/lecture/2816

https://m.blog.naver.com/itperson/220878447705

 

 

HWM RESET

HWM을 재설정하는 방법

1. truncate table TABLE_NAME

delete from TABLE_NAME 대신 truncate 문을 사용하여 data를 제거한다.

truncate table 문에는 조건을 걸 수 없기 때문에, 모든 data를 지울 때만 사용할 수 있다.

truncate table 를 통해 모든 records를 제거하면 HWM은 초기치로 reset 된다.

 

2. alter table TABLE_NAME move tablespace TABLESPACE_NAME

해당 table을 지정한 tablespace로 이동시킨다.

  • row id가 변경되기 때문에 같은 테이블스페이스명으로 해도 된다.
  • row id가 변경되기 때문에 모든 index rebuilding 작업이 필요하다

** 해당 table data의 physical location (rowid) 이 변경되기 때문에, 해당 table에 걸려 있던 index가 unusable 상태가 된다

alter table .. move tablespace 를 수행한 후에 반드시 모든 indexes를 rebulid 해야한다.

 

3. alter table TABLE_NAME shrink space cascade;

HWM으로 예약되어 있는 빈 공간을 반납한다.

테이블 영역이 로컬 관리 테이블 영역, 자동 세그먼트 영역 관리인 것에 적용 가능

 

shrink command를 실행하기 전 alter table TABLE_NAME enable row movement를 실행해 주어야 한다.

--> ORA-10636: ROW MOVEMENT is not enabled 라는 오류가 발생한다.

 

다음과 같은 table에 대해서는 shrink를 수행할 수 없다.

  1. data type이 "long"인 column을 포함하는 경우
  2. clustered table 의 경우
  3. function-based index 혹은 bitmap join index가 생성되어 있는 경우
  4. index-organized table의 mapping table
  5. compress된 table
  6. context indexes(domain indexes)를 가지는 table

 

https://m.blog.naver.com/jinh2004/80110801303

https://xfree302.tistory.com/161

728x90

'Dev > Oracle' 카테고리의 다른 글

[Oracle] WINDOW FUNCTION 윈도우 함수  (0) 2022.06.12
[Oracle] Oracle Lock Test  (0) 2022.06.10
[Oracle] PCTFREE, PCTUSED  (0) 2022.06.09
[Oracle] 사용자, 권한, 롤  (0) 2022.06.08
[Oracle] 아카이브 모드, 리두로그  (0) 2022.06.07

댓글