2014년 10월 21일 화요일

PCTFREE, PCTUSED[오라클개발자교육/오라클/ORACLE강좌/오라클교육잘하는곳/오라클교육추천/ORACLE실무교육/ORACLE/ORACLE교육/ORACLE학원/오라클실무교육]

PCTFREE 및 PCTUSED는 DataBase 내부의 공간(Data Block)을 효과적으로 다루기 위해 사용되어 지는 저장 매개변수(Storage Parameter) 이다. 대부분 Data Block 내부의 free space를 다루기 위해서는 PCTFREE와  PCTUSED는 함께 설정 되어 지며 새로운 자료의 Insert나 Data Block 내부에 이미 존재하는 자료의 Update를 위한 두 가지 목적으로 주로 이용된다. PCTFREE의 기본값은 10, PCTUSED의 기본값은 40이다. 만약 CREATE TABLE, CREATE INDEX, CREATE CLUSTER등과 같은 DDL의 사용시 PCTFREE 및 PCTUSED를 적절히 구사 한다면 DataBase의 Performance를 높일수 있을 것이다. 

PCTFREE의 경우 Data Block에 이미 존재하고 있는 행(Row)에 Update등이 일어 날 경우를 대비하여 예약 시켜놓을 Data Block의 퍼센트를 지정하는 것이며 0~99사이의 정수가 사용 가능 하다. PCTUSED의 경우는 Data Block의  여유공간 퍼센트가 PCTFREE에 도달하는 경우 사용된 공간이 PCTUSED 아래로 떨어지기 전에는 새로운 데이터를 삽입(Insert) 할 수 없다는 것을 가리키는 매개 변수 이다. 예를 들면  PCTFREE와 PCTUSED 값의 합은 100 보다 적거나 같은 정수이어야 한다. 다음의 경우를 보자. 만약 임의의 테이블의 주소 컬럼이 가변길이 100 바이트로 구성 되었다고 가정 하자. 처음에 데이터가 Insert  되면서 100 바이트 중 10바이트를 사용하였지만 나중에 변동이 생겨 테이블의 데이터를 100바이트로 Update해야 한다고 생각을 해 보자. 이런 경우 처럼 나중에 테이블의 컬럼등이 Update될때 이전 보다 훨씬 사이즈가 늘어 날 경우를 대비하여 전체 Data Block에서 몇 퍼센트를 비워 놓을 건지를 지정하는 매개변수가 PCTFREE 인 것이다. 적은 PCTFREE의 경우 변경을 위한 작은 공간을 예약하는 것이며 Insert와 같은 명령 수행시 Data Block을 완전히 채울 수 있으며 큰 PCTFREE경우 나중에 변경을 위해 큰 공간을 예약하며 같은 양의 데이터가 Insert 된다면 적은 PCTFREE보다 많은 Data Block을 요구하게 될것이다.  Oracle 9i의 경우 데이터베이스 생성시 segment관리를 auto 옵션을 이용하여 자동으로 지정한다면 Data Block의 free space관리를 위해 bitmap을 이용 할 것이다. 즉 bitmap block에는 Data Block의 free space 가 얼마인지를 가르키고 있다. 

다음의 예를 보자. 만약 PCTFREE가 20이고 PCTUSED가 40이라고 할 때 신규 행(Row)은 free space가 20% 될때 까지 입력 된다. 기존의 행에 수정을 하면 예약 해둔 빈 공간을 사용하게 되며 새로운 행은 사용된 공간이 40% 아래로 되어야만 Insert가 가능하게 된다. 40% 아래로 떨어져 새로운 행을 입력 한다면 80%까지만 입력되고 20%는 Update를 위해 예약을 해 두는 것이다. 

만약 테이블을 설계할 때 빈번한 Update가 발생 될 가능성이 크며 컬럼의 사이즈가 늘어날 확률이 높다면 PCTFREE 매개변수를 크게 하고 PCTUSED 매개변수는 낮게 설정 해야 할 것이다. PCTFREE는 20, PCTUSED는 40 정도가 적당 할 것이다. 또한 어떤 테이블은 읽기 전용이며 테이블의 사이즈가 적당히 크다면 PCTFREE는 낮은 수를 PCTUSED는 큰 수를 지정 하면 될 것 이다. 

 아래 예문은 오라클 9i의 새로운 특징인 auto segment space 관리의 예문이다. 결국 오라클 9i의 경우 automatic segment space management 와 manual segment space management의 두가지 방법을 제공함을 알 수 있다. 

SQL> connect / as sysdba 
연결되었습니다. 
SQL> create tablespace auto 
  2  datafile 'C:\oracle\oradata\wink\auto01.dbf' 
  3  size 10m 
  4  segment space management auto; 

테이블 영역이 생성되었습니다. 

 TableSpace에 관한 정보를 제공해 주는 뷰를 통해 내용을 확인 하자. 

SQL> select TABLESPACE_NAME, 
  2        SEGMENT_SPACE_MANAGEMENT 
  3  from dba_tablespaces; 

TABLESPACE_NAME                SEGMEN 
------------------------------ ------ 
SYSTEM                        MANUAL 
TEST                          MANUAL 
AUTO                          AUTO 
…. 

 아래 예문은 create table 명령이다. 지금까지 보았던 것과는 약간 다른 모습 이다. pctfree, pctused를 사용 했으며 , 저장 매개변수를 지정 하였다. 저장 매개 변수는 6.2절에 자세히 나와 있으니 참고 하기 바란다. 

SQL> connect scott/tiger 
SQL> create table myAddrBook ( 
  2    id number(5) not null primary key, 
  3    name varchar2(20) not null, 
  4    address varchar2(100) 
  5  ) 
  6  pctfree 10 
  7  pctused 50 
  8  tablespace users 
  9  storage ( 
 10    initial 50k 
 11    next 50k 
 12    maxextents 10 
 13    pctincrease 25); 

테이블이 생성되었습니다. 

 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272236
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111609
53 [평일주간100%환급]Spring,JAVA,JSP,안드로이드,C#닷넷,SQL,튜닝… 오라클자바…03-151394
52 [주말]C#,ASP.NET마스터 오라클자바…01-311514
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-311721
50 [기업100%환급]개발자를위한스프링,마이바티스,하이버네이트(스… 오라클자바…01-311205
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191504
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111335
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031862
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272236
45 [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… 오라클자바…12-191611
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141584
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111609
42 [주말주간]자바&웹,jQUERY,스프링프레임워크 오라클자바…12-091284
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011506
40 [기업100%환급]자바기초&안드로이드개발자과정(Android전액환급… 오라클자바…12-011675
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011154

댓글 없음:

댓글 쓰기