문제상황
- 데이터가 얼마 없는 테이블의 데이터를 조회하는데, 시간이 너무 오래 걸렸다.
- 그런데 분명 레코드 수가 적은데 테이블 용량이 GB이다. 무언가 이상했다.
- 컬럼들을 확인해보니 한 컬럼이 LOB 이기 때문이었다.
- 컬럼의 DATA TYPE이 varchar(MAX) 로 정의돼있었다.
- LOB를 조회하기 위해 ACCESS를 해야하기 때문에 시간이 오래 걸렸던 것이다.
LOB (Large Object)
- LOB는 DB에 저장되는 다양한 타입의 데이터들 중 구조화되지 않은 용량이 큰 데이터 (TEXT, 그래픽, 이미지, 비디오, 사운드 등) 를 처리하기 위한 타입이다.
- DB 내부에선 LOB 형식의 컬럼을 생성하고, 이곳에 데이터의 실제 위치를 가리키는 LOCATOR를 저장한다.
- DB 외부에선 BFILE을 사용한다.
LOB 종류
- CLOB : CHAR 대형 객체
- BLOB : BINARY 대형 객체로 이미지, 동영상, MP3 등을 저장
- NCLOB : NATIONAL CHAR 대형객체로 오라클에서 정의되는 NATIONAL CHARACTER SET을 따르는 문자
- BFILE : OS에 저장되는 이진 파일의 이름과 위치를 저장. 읽기모드로만 액세스 가능.
LOB LOCATOR
- LOB는 실제 테이블이 저장되는 세그먼트가 아닌, LOB 세그먼트가 따로 존재한다.
- 실제 테이블에선 앞의 설명과 같이 LOB의 위치정보만 가지고 있다.
- 즉, LOB을 조회하기 위해선 LOB의 Locator를 이용해야한다.
사용시 고려사항
- DB 구조는 LOB 데이터를 저장하기 위해 별도의 영역을 만든다.
- 성능 측면에서, LOB 데이터는 별도의 테이블에 저장하거나 매우 큰 파일의 경우 파일 저장 솔루션을 사용하는 것이 좋다고 한다.
- 앞의 사례와 같은 문제가 발생할 수 있기 때문이다.
- 실제 내가 참여한 프로젝트에서도 테이블을 분리하기엔 쉽지 않은 상황이라, 해당 컬럼만 필요시 따로 조회할 수 있도록 개발했다.
참고
대형 오브젝트(LOB)
용어 대형 오브젝트(LOB) 및 일반 약어 LOB는 BLOB, CLOB 또는 DBCLOB 데이터 유형을 가리킵니다. 유니코드 데이터베이스에서 NCLOB는 DBCLOB의 동의어로 사용될 수 있습니다. LOB값에는 가변 길이 문자열에
www.ibm.com
What is LOB data in an SQL server?
Answer: LOB is an abbreviation for Large OBject. This could be text like VARCHAR(MAX) or NVARCHAR(MAX) that is up to 2GB in size. It could also be VARBINARY(MAX), which might be anything. You might import images, documents, or anything else as a binary LOB
www.quora.com
'회사 > DB' 카테고리의 다른 글
[DB] Index와 Column, 비교연산자 (0) | 2024.12.16 |
---|---|
[DB / MSSQL] / SELECT - INTO (0) | 2024.11.06 |
[DB / MSSQL] 날짜조회 BETWEEN (1) | 2024.10.28 |
[DB / MSSQL] SELECT-INSERT (0) | 2024.10.28 |
[DB] 파티션 프루닝 (PARTITION PRUNING) (0) | 2024.10.28 |