행위

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

DB CAFE

(PCTFREE)
(PCTFREE)
20번째 줄: 20번째 줄:
 
==== PCTFREE ====
 
==== PCTFREE ====
 
{{틀:알림
 
{{틀:알림
|내용= 데이터 Block 사용시 이만큼 퍼센트는 남겨라!
+
|내용= * 블럭내에 행을 변경할때 발생 할 수 있는 행의 크기 증가에 대비하여 예약된 공간
 
}}
 
}}
# 데이터 변경시 늘어나는 늘어나는 데이터를 수용하기 위한 공간
 
 
# 디폴트는 10 퍼센트 - 블록의 10 퍼센트를 데이터 갱신을위한 빈 영역으로 남겨둠.
 
# 디폴트는 10 퍼센트 - 블록의 10 퍼센트를 데이터 갱신을위한 빈 영역으로 남겨둠.
 
* default, 기본 => 10
 
* default, 기본 => 10

2024년 6월 16일 (일) 22:55 판

thumb_up 추천메뉴 바로가기


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

The syntax to create a table is:

CREATE TABLE [table name]
       ( [column name] [datatype], ... );

For 예시:

CREATE TABLE employee
       (id int, name varchar(20));

1.1 BLOCK SIZE[편집]

  1. 8K
    • 기본 사이즈
  2. 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

1.3 PCTUSED[편집]

assignment DB Block 사용 중 이만큼 퍼센트 이하면 다시 입력하라
  1. 재사용 되기 위해 필요한 블럭의 퍼센트
  2. 디폴트 60 - 사용된 영역이 40% 보다 작아져야 새로운 행을 삽입 가능.
  • 입력/삭제가 자주 발생하지 않으면 => 90
  • 수정이 자주 발생되면 => 40

1.4 FREELIST[편집]

  1. 데이터 INSERT시 미리 사용 가능한 블럭을 리스트하고 있다가 할당하는곳.
  2. FREE 블럭을 리스트 형태로 관리 한다는것.
  3. 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이다.