행위

"오라클 테이블 생성"의 두 판 사이의 차이

DB CAFE

(오라클 테이블 생성 , CREATE TABLE)
(오라클 테이블 생성 , CREATE TABLE)
 
(같은 사용자의 중간 판 6개는 보이지 않습니다)
15번째 줄: 15번째 줄:
 
</source>
 
</source>
  
'''For 예시:'''
+
'''예시:'''
 
<source lang=sql>
 
<source lang=sql>
CREATE TABLE TB_EMP (
+
 
        EMP_NO VARCHAR2(8)  
+
  CREATE TABLE "SYS"."TB_BIG"
      , [column name] [datatype]
+
  ( "COLA" VARCHAR2(20 BYTE),
      , ...
+
"COLB" NUMBER,
      )
+
"COLC" NUMBER,
  TABLESPACE TS_EMP
+
"COLD" VARCHAR2(30 BYTE),
  PCTUSED 40
+
"COLE" VARCHAR2(30 BYTE),
PCTFREE 10
+
"COLF" VARCHAR2(30 BYTE),
  INITRANS 1
+
"COLG" NUMBER,  
  MAXTRANS 255
+
"COLH" VARCHAR2(30 BYTE),  
  STORAGE (
+
"COLI" VARCHAR2(30 BYTE)
          INITIAL 65536
+
  )  
          NEXT 1048576
+
  PCTFREE 10
          MINEXTENTS 1
+
  PCTUSED 40  
          MAXEXTENETS UNLIMTED
+
  INITRANS 1  
          BUFFER_POLL DEFAULT
+
  MAXTRANS 255  
)
+
NOCOMPRESS LOGGING
  LOGGING
+
  STORAGE( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
MONITORING
+
          PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
 +
          BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT
 +
        )
 +
  TABLESPACE USERS
 
;
 
;
 
</source>
 
</source>
56번째 줄: 59번째 줄:
 
#:* Update/Delete 가 빈번하게 발생되는 테이블 => 20
 
#:* Update/Delete 가 빈번하게 발생되는 테이블 => 20
 
#:* 채번 테이블 => 90
 
#:* 채번 테이블 => 90
 +
 +
https://bass4th.wordpress.com/wp-content/uploads/2024/06/ec8aa4ed81aceba6b0ec83b7-2024-06-17-ec98a4eca084-12.02.02.png
 +
::::* PCTFREE 10% , PCTUSED 40%
  
 
==== PCTUSED ====
 
==== PCTUSED ====
62번째 줄: 68번째 줄:
 
}}
 
}}
 
# 재사용 되기 위해 필요한 블럭의 퍼센트
 
# 재사용 되기 위해 필요한 블럭의 퍼센트
# 디폴트 60 - 사용된 영역이 40% 보다 작아져야 새로운 행을 삽입 가능.
+
# 디폴트 40 - 사용된 영역이 40% 보다 작아져야 새로운 행을 삽입 가능.
 
* 입력/삭제가 자주 발생하지 않으면 => 90
 
* 입력/삭제가 자주 발생하지 않으면 => 90
 
* 수정이 자주 발생되면 => 40
 
* 수정이 자주 발생되면 => 40

2024년 6월 16일 (일) 23:55 기준 최신판

thumb_up 추천메뉴 바로가기


1 오라클 테이블 생성 , CREATE TABLE[편집]

The syntax to create a table is:

CREATE TABLE [table name]
       ( [column name] [datatype], ... )
 TABLESPACE TS_XXX
 PCTUSED 40
 PCTFREE 10
 INITRANS 1
 MAXTRANS 255
 STORAGE (...)
 LOGGING
 MONITORING
;

예시:

CREATE TABLE "SYS"."TB_BIG" 
   (	"COLA" VARCHAR2(20 BYTE), 
	"COLB" NUMBER, 
	"COLC" NUMBER, 
	"COLD" VARCHAR2(30 BYTE), 
	"COLE" VARCHAR2(30 BYTE), 
	"COLF" VARCHAR2(30 BYTE), 
	"COLG" NUMBER, 
	"COLH" VARCHAR2(30 BYTE), 
	"COLI" VARCHAR2(30 BYTE)
   ) 
 PCTFREE 10 
 PCTUSED 40 
 INITRANS 1 
 MAXTRANS 255 
 NOCOMPRESS LOGGING
 STORAGE( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
          PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
          BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT
        )
 TABLESPACE USERS
;

1.1 BLOCK SIZE[편집]

assignment Default : 8K , 기본 사이즈
  • 32K
    • 평균 row size가 커서 8K사용중인 테이블에서 row migration , row chaining이 자주발생할경우
    • 한번에 대량 i/o가 발생 하는 테이블인 경우

1.2 PCTFREE[편집]

assignment 블럭내에 행을 변경할때 발생 할 수 있는 행의 크기 증가에 대비하여 예약된 공간
  1. 디폴트는 10 퍼센트 - 블록의 10 퍼센트를 데이터 갱신을위한 빈 영역으로 남겨둠.
    • default, 기본 => 10
    • DML이 발생되지 않는 테이블, 백업용 압축테이블 => 0
    • Update/Delete 가 빈번하게 발생되는 테이블 => 20
    • 채번 테이블 => 90

ec8aa4ed81aceba6b0ec83b7-2024-06-17-ec98a4eca084-12.02.02.png

  • PCTFREE 10% , PCTUSED 40%

1.3 PCTUSED[편집]

assignment 기존의 데이터가 수정이나 삭제등으로 PCTUSED보다 값이 작아지면 이 블록에 한하여 입력이 가능
  1. 재사용 되기 위해 필요한 블럭의 퍼센트
  2. 디폴트 40 - 사용된 영역이 40% 보다 작아져야 새로운 행을 삽입 가능.
  • 입력/삭제가 자주 발생하지 않으면 => 90
  • 수정이 자주 발생되면 => 40

1.4 FREELIST[편집]

assignment 테이블로 데이터를 INSERT 하기 위하여 미리 할당하는 프리 블록의 리스트 수를 지정.
  1. FREE 블럭을 리스트 형태로 관리.
  2. INSERT 작업이 많이 발생하는 테이블,인덱스에 이값을 증가 시켜 빈 블럭을 할당받기 위해서 대기 하는일이 없도록 해야함.

1.5 INITRANS 와 MAXTRANS[편집]

  1. INITRANS
    1. 데이터 블록에 동시에 접근 가능한 트랜잭션의 처리 갯수를 의미(미리 확보할 ITL entry수)
    2. 트랜잭션이 많이 발생하는 경우 MAXTRANS 까지 늘어나며, PCTFREE 로 확보된 영역에 추가 확장 됨
  2. MAXTRANS
    1. 데이터 블록에 접근 가능한 최대 트랜잭션 수를 의미
    2. 접근하는 트랜잭션 수가 MAXTRNAS 값을 초과하는 경우, 앞의 트랜잭션이 COMMIT 혹은 ROLLBACK 을 해야 다음 트랜잭션이 접근 가능
    3. 최대 255개
assignment INITRANS 를 크게 설정 하면?
  • INITRANS 을 위한 슬롯도 블록에 공간을 차지하며, 트랜잭션이 많지 않은 경우 낭비를 하게 되므로 굳이 크게 설정할 필요 없음
2       -- 기본
10 ~ 20 -- 트랜잭션이 빈번하게 발생할것으로 예상되는 테이블
15      -- 로그성 테이블
30      -- 채번테이블


1.6 INITRANS 와 MAXTRANS[편집]

  1. Update시 SQL처리과정은 Parse와 Execute 단계로 실행 (parse는 select와 동일)
  2. execute는 데이터블럭과 언두블럭 read -> row level lock -> redo entry -> undo발생 -> 데이터 수정의 과정을 거치게 된다.
  3. 이때 일어나는 트랜잭션처리 과정
    1. 언두 세그먼트 바인딩
    2. 언두 세그먼트 할당
    3. 트랜잭션 테이블 슬롯 할당 (트랜잭션 테이블 슬롯 중 가장 오래 전에 커밋된 트랜잭션 테이블이 재사용)
    4. 할당된 트랜잭션 ID로 exclusive TX lock 획득.
    5. 언두 블록 할당.
    6. 데이터 블록 변경 발생
      - 변경된 블럭은 Dirty 상태가 된다. 또한 변경된 데이터 블럭에 대한 CR블럭이 버퍼캐시에 생성된다.
    7. 커밋. 트랜잭션에 SCN을 할당.
  4. 여기서 블럭을 변경하기전 블럭 헤더의 ITL(Interested Transaction List)에 엔트리를 등록해야 한다.
    1. ITL이란? 데이터 블록 내에 있는 슬롯으로 블럭을 변경하고자 하는 트랜잭션들의 List이다.


  • 초기값은 INITRANS의 값으로 정의되며 미리 확보할 ITL entry수를 의미한다.(테이블 생성시 initttans 기본값은 2 임)
  • 최대값은 MAXTRANS 값으로 ITL Entry의 최대 수를 의미한다. (기본 255)
  • 만약 모든 가용한 ITL이 사용중이고 새로운 ITL 슬롯을 동적으로 할당하기위한 PCTFREE 영역의 공간이 충분하지 않을때는 엔트리를 할당받지 못하여 TX Lock 경합이 발생하게 된다.
    • 이때는 ITL entry를 차지한 다른 트랜잭션이 커밋이나 롤백을 수행하여 ITL 슬롯을 재사용할 수 있을때까지 대기한다.
  • 오라클은 row단위의 lock을 걸지만 일단 데이터의 Access시 블럭 단위로 엑세스 하므로 결국 block 단위의 lock이 필요하다.

1.7 NOCACHE[편집]

assignment NOCACHE 옵션은 'DB의 캐시를 사용하지 않겠다'는 파라미터
  • CACHE로 지정하면 한번에 20개 값 캐시.
  • 기본값은 NOCACHE이다.