본문 바로가기
DBMS

[oracle] LOB SEGMENT 사이즈 줄이기(MOVE LOB)

by 드바 2025. 6. 27.
반응형

 

DB를 운영하다보면 LOB 세그먼트 사이즈가 이상하게 큰 경우가 있습니다.

일반 데이터와 동일하게 LOB도 block 재사용을 한다고 하는데 작동하는 조건이 뭔가 다른가봅니다.

LOB 세그먼트가 너무 커졌을경우 사이즈를 줄이는 방법 정리 했습니다

작업 전 LOB 사이즈 확인

-- LOB 세그먼트가 40G 이상 사용 중
SQL> select * from (
select * from dba_segments
where tablespace_name = 'PS_DAT'
order by bytes desc
)
where rownum <= 3;

OWNER                                 SEGMENT_NAME                                SEGMENT_TYPE             SEGMENT_SUBTYPE                TABLESPACE_NAME                 BYTES      
------------------------------------- ------------------------------------------- ------------------------ ------------------------------ ------------------------------  ---------- 
PS                                    SYS_LOB0000229384C00007$$                   LOBSEGMENT               SECUREFILE                     PS_DAT                          44078137344    


-- 데이터 사이즈 확인 시 크지 않고, 데이터 건수도 적음
SQL> select
dbms_lob.getlength(REQ_DATA) length  -- clob은 문자 수, blob은 byte 반환
, lengthb(dbms_lob.substr(REQ_DATA,dbms_lob.getlength(REQ_DATA),1)) lengthb  -- bytes
from PS.IF_LOG
where 1=1;
LENGTH       LENGTHB        
------------ -------------- 
         883            883 
         571            571 
         571            571 
         947            947 
         507            507 
         572            572 
         563            563 
         574            574 
         509            509

 

move를 통한 lob 세그먼트 재구성

lob move 명령어로 동일 테이블스페이스로 이동

인덱스 unusable 발생 주의

12c 이후 online 옵션도 가능하지만 사용하지 않는 시간에 작업하는 것 권장

ALTER TABLE PS.IF_LOG MOVE LOB(REQ_DATA) STORE AS (TABLESPACE PS_DAT) ;

 

작업 후 LOB 사이즈 확인

44G -> 131K로 줄어들었음

-- lob 사이즈 줄어듬
SQL> select * from (
select * from dba_segments
where tablespace_name = 'PS_DAT'
and segment_name = 'SYS_LOB0000229384C00007$$'
order by bytes desc
)
where rownum <= 3;
OWNER                                   SEGMENT_NAME                      PARTITION_NAME       SEGMENT_TYPE             SEGMENT_SUBTYPE                TABLESPACE_NAME                BYTES      
--------------------------------------- --------------------------------- -------------------- ------------------------ ------------------------------ ------------------------------ ---------- 
PS                                      SYS_LOB0000229384C00007$$                              LOBSEGMENT               SECUREFILE                     PS_DAT                         131072     
1 rows selected.

 

 

table move online 시 작동 방식

시나리오- tab1 테이블 ts01 -> ts02로 move online- move 작업 중 다른세션에서 1초마다 10건씩 insert 테스트TEMPORARY 타입 테이블은 기존(tab1) 테이블이 이동하는 세그먼트SYS_RMTAB$$ 테이블은 move 되는동안 변

pskbigstar.tistory.com

 

 

반응형