기술 정보
home
채널 소개
home

중간 컬럼이 Null인 테이블 크기 산정 (Block Dump)

문서 유형
기술 정보
분야
튜닝
키워드
Null
Block Dump
1 more property

개요

테이블이 null 컬럼을 포함하고 있을 경우 null 컬럼의 위치에 따라 테이블 크기가 변경됩니다.
본 문서에서는 중간 컬럼이 Null인 테이블 크기 산정하는 방법에 대해 안내합니다. (공간 효율은 마지막 컬럼이 NULL인 경우 테이블 공간을 더 효율적으로 사용할 수 있습니다.)

방법

중간 컬럼이 Null인 테이블 크기 조회

1. 테스트 테이블 생성

중간 컬럼이 NULL인 테스트 테이블을 생성합니다.
CREATE TABLE TEST_MID_NULL (COL1 VARCHAR2(3) NOT NULL, COL2 VARCHAR2(4000) NULL, COL3 VARCHAR2(4000) NULL, COL4 VARCHAR2(4000) NULL, COL5 VARCHAR2(4000) NULL, COL6 VARCHAR2(4000) NULL, COL7 VARCHAR2(4000) NULL, COL8 VARCHAR2(4000) NULL, COL9 VARCHAR2(4000) NULL, COL10 VARCHAR2(4000) NOT NULL);
SQL
복사

2. 데이터 적재

INSERT INTO TEST_MID_NULL SELECT LPAD(LEVEL,3,'0'),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'A' FROM DUAL CONNECT BY LEVEL < 1000;
SQL
복사

3. Block Dump 대상 정보 조회

SELECT COUNT(*), DBMS_ROWID.ROWID_TO_RELATIVE_FNO(ROWID) FILE_NO, DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_NO FROM TEST_MID_NULL GROUP BY DBMS_ROWID.ROWID_TO_RELATIVE_FNO(ROWID), DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID);
SQL
복사

4. Block Dump 수행

ALTER SYSTEM DUMP DATAFILE 0 BLOCK 69119
SQL
복사
조회되는 ROWID 정보는 환경마다 다르므로, 실제 환경에 맞게 블록 번호를 지정해야 합니다.
생성된 블록 덤프 파일은 다음 경로에서 확인할 수 있습니다.
$TB_HOME/instance/$TB_SID/dump/tracedump
SQL
복사

5. Dump 확인

생성된 덤프 파일을 열어 테이블 크기 및 NULL 컬럼 처리 방식을 확인합니다.
**Dump start at 2017-04-02 10:17:16 DUMP of BLOCK file #0 block #69119 **Dump start at 2017-04-02 10:17:16 data block Dump[dba=00_00069119(69119),tsn=0000.00e4421d,type=13,seqno =1] -------------------------------------------------------------- sgmt_id=33066 cleanout_tsn=0000.00e4421d btxcnt=2 l1dba=00_00069111(69111), offset_in_l1=8 btx xid undo fl tsn/credit 00 0017.47.1454 01_00048404.00028.00001 E 0000.00e44192 01 0000.00.0000 00_00000000.00000.00000 I 0000.00000000 -------------------------------------------------------------- Data block dump: dlhdr_size=774 freespace=819 freepos=1677 symtab_offset=0 rowcnt=383 Row piece dump: rp 0 1677: [17] flag=--H-FL-- itlidx=0 colcnt=10 col 0: [4] 0000: 03 30 30 31 .001 col 1: [1] 0000: 00 . col 2: [1] 0000: 00 . col 3: [1] 0000: 00 . col 4: [1] 0000: 00 . col 5: [1] 0000: 00 . col 6: [1] 0000: 00 . col 7: [1] 0000: 00 . col 8: [1] 0000: 00 . col 9: [2] 0000: 01 41 .A rp 1 1694: [17] flag=--H-FL-- itlidx=0 colcnt=10 col 0: [4] 0000: 03 30 30 32 .002 col 1: [1] 0000: 00 . col 2: [1] 0000: 00 . . . . //중략 . . . //null 컬럼이 중간에 위치하고 있어 null 컬럼에 대한 정보가 생략되지 않고 포함됨
SQL
복사