◆ 第2章 테이블 용량 산정 예 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
레코드가 한블럭에 들어가는 길이의 경우의 산정 SCOTT스키마에 있는 EMP테이블을 예로 산정을 해본다. 예상건수는 10,000건으로 한다. EMP테이블의 정의는 다음과 같다.
(1)평균레코드길이 구하기 가변길이의 데이터형의 평균 데이터 길이는 , NUMBER형에 대해서는 정밀도 그대로의 데이터 길이 , VARCHAR2형에 대해서는 정의 데이터 길이의 7할이 가정합니다. 계산 근거는 표 1을 참조.
(2)1블럭에 들어가는 레코드 수 구하기 필요한 테이블 파라메터는 전부 디폴트로 설정하였다. 블럭 사이즈는 8KB(8,192바이트)로 설정
1블록중에서 실제로 데이터를 격납할 수 있는 영역이 7,291바이트가 구해졌으므로 , 이것을 (1) 에서 구한 평균 레코드 길이 50바이트로 나누 (나머진 버림) 면 1블록에 146건 들어가는 것을 알 수 있다 (3)테이블 용량 구하기 이미 접했지만 、(2)로부터의 테이블의 용량은
예상레코드수 ÷ (2)의 값 × 블럭 사이즈
가 되고 실제로 계산해보면
CEIL(10,000 / 146) * 8,192 = 565,248byte = 552kb
가 된다.
블록 사이즈 8KB에 대해서 VARACHAR2(3000) 의 3열의 레코드가 10,000건 삽입되는 테이블의 용량을 추측합니다. 데이터는 어느 열도 항상 3,000바이트 들어오는 것으로 합니다. 레코드길이는 (3,000 + 3(열 해더)) * 3(열) + 3(레코드 헤더) = 9,012바이트가 된다. (2)데이터 격납부의 사이즈 구하기 레코드가 블러거에 들어가는 케이스랑 똑같이 전제하면 7,291바이트가 된다. (3)테이블 용량 구하기 이와 같은 케이스의 테이블 용량의 계산방법은 이므로、
CEIL(평균 레코드 길이 ÷ 데이터 격납부의 길이 ) × 예상 레코드수 × 블록 사이즈 CEIL(9,012 / 7,291) * 10,000 * 8,192 = 163,840,000바이트 = 약 157메가바이트
LOB테이블의 용량 산정
블럭사이즈가 8KB인 경우 평균 1메가의 LOB를 1000건 격납하는 LOB테이블의 용량 산정예이다. RETENTION로 필요한 영역은 LOB격남영역의 20%、DISABLE STORAGE IN ROW지정으로 1000건 모두가 LOB테이블에 격남되어 있다라고 가정 CHUNK는 3KB로 한다.
(1)CHUNK의 값을 블록 사이즈의 배수에 절상 CHUNK가3KB이고 블럭사이즈가 8KB이므로 8KB가 된다.
(3)LOB격납영역의 사이즈 구하기 LOB격납영역의 사이즈는
LOB격납영역 = (2)의 값 × 예상 레코드수
이므로
1,048,576 * 1,000 = 1,048,576,000바이트 = 1,000메가바이트
가 된다. (4)RETENTION영역을 구한후 더해 테이블 용량이 된다. RETENTION영역은 LOB격납영역의 20%이므로 (3)의 값을 1.2배 한1,200 메가바이트가 산정결과가 된다. |
◆ 第3章 컬럼의 나열순서의 기본지침 | |
컬럼의 나열순서의 기본지침 컬럼의 나열순서는 기본적으로 관리하기 쉽도록.을 염두해 두고 설계합시다. 예를들어 아래의 항목을 유념합니다.
레코드 길이를 줄이는 테크닉 레코드 길이를 가능한 짧게하면 할수록, 블럭당 저장할수 있는 레코드의 수가 많아 진다.그렇게 하면 캐쉬히트율이 높아지고 용량의 절약도 가능해 진다. (1)가변길이 테이터형 이용 예를들어 우편번호같이 자릿수가 정해져 있는 데이터형을 제외하고는 VARCHAR2와 같은 가변길이를 사용하자. 정의된 길이에 비해 실데이터가 작으면 작을수록 용량을 절약할수 있다. (2)SJIS이용 일본어의 데이터 저장효율(용량절약)의 관점에서 케릭터셋에 SJIS을이용하는것이 제일좋다.단 국제화 대응이나 이용 플랫폼과의 친화성이란 관점도 있으므로 일본어 데이터의 저장효율의 관점에서만 케릭터셋을 결정해서는 안될것이다. (3)NULL이 저장되기 쉬운 컬럼을 뒤에 정의한다. NULL이될 경유가 많은 컬럼은 모아서 뒷쪽에 배치하면 열 헤더가 생략되기때문에 레코드 길이를 줄일수 있다.
|
◆ 第4章 CREATE TABLE의 파라메터 설정 | |||||||||||||||
본장은 로컬관리 테이블 스페이스영역을 이용하는 것을 전제로 합니다.
아래의 파라메터는 로컬관리와 딕셔너리관리에서의 그 의미가 다르다.
테이블 작성시의 지정을 고려해야할 파라메터들 로컬관리 테이블 스페이스에 있어서 항상 지정해야할 파라메터는 기본적으로 INITIAL뿐..이라고 생각해고 상관 없습니다. 물론 의식해서 지정하는 편이 좋은 파라메터는 여러가지 있습니다만. 상당히 처리량이 많은 경우가 아니라면 어느정도 다른 파라메터는 고려하지 않아도 상관없다. INITIAL는 가능한한 예상 레코드수를 수용할 만큼의 크기로 지정하자. 로컬관리 테이블 스페이스영역에서는 익스텐트의 수가 많은 것은 성능에 특별히 영향을 미치지 않지만 익스텐트의 확장은 익셔너리 관리 테이블 스페이스 정도는 아니기는 하지만 부하가 걸립니다. 초기의 디스크 용량의 제한등으로 예상 레코드의 확보를 할 수 없는 경우, 초기 레코드수가 예상 레코드수에 비해 큰폭으로 적은 경우는 작게 작성해, 필요에 따라서 확장하는 형태를 취합니다. 경우에 따라 설정을 고려 해야할 파라메터들 (1)NEXT/MINEXTENTS/PCTINCREASE 대규모 테이블의 경우, extent를 복수의 데이터 파일에 분산시켜 I/O성능의 향상을 도모하는 케이스가 있습니다.이와 같은 경우에 이용을 검토합니다.그 때 PCTINCREASE는 디폴트의 0인 편이 영역 계산이 하기 쉽다. (2)FREELIST GROUPS디폴트의 1인 채로 상관없다. RAC 환경에서는 노드수에 맞춘 값을 기본으로 한다. (3)FREELISTS 디폴트의 1인 채로 상관없다. 대량 삽입의 트랜잭션이 동시 발생하는 경우는 값을 늘리는 것을 검토한다. (4)PCTFREE 초기 레코드 사이즈로부터 최종 레코드 사이즈가 길어질 수 있는 비율을 설정하는 것이 제일 효율적인 영역 관리를 할 수 있습니다.예를 들면 INSERT시의 레코드의 평균 사이즈가 100바이트로, 갱신을 거듭해 최종적으로 평균 130바이트가 되는 것이면 30(%)을 지정하면 좋습니다.레코드 사이즈의 증가율을 읽을 수 없는 경우는, 디폴트의 10으로 운용해, 재편성시에 값을 조정합니다. 읽기 전용의 테이블이면 0에서도 상관없다. (5)PCTUSED 기본적으로 디폴트의 40으로 상관없다. PCTUSED의 값을 높게 하면 블록의 재이용이 쉬어지므로 영역을 효율적으로 이용할 수 있습니다만, 비어있는 리스트에 블록이 많이 등록되기 쉽기 때문에 갱신계의 퍼포먼스가 떨어집니다. 낮게 하면 퍼포먼스는 오릅니다만 영역의 이용 효율은 떨어집니다.퍼포먼스를 우선으로 하는 경우는 보다 낮게 ,영역의 이용 효율을 우선으로 하는 경우는 보다 조금 비싸게 설정합니다.또 전건 검색의 퍼포먼스를 우선시키고 싶은 경우는 데이터를 채워 저장하는 것이 좋기 때문에 높은 값으로 설정합니다.덧붙여 PCTFREE와 PCTUSED의 값의 합계는 사양상 100을 넘을 수 없기 때문에, 이 범위에서 조정하도록 한다. (6)INITRANS 디폴트의 1인 채로 상관없다. 복수의 트랜잭션이 동시에 같은 블록에의 갱신이 빈발하는 경우는, 값을 늘리는 것을 검토 (7)LOGGING/NOLOGGING 테이블에 대한 처리로 NOLOGGING의 지정이 효과가 있는 것은 이하의 리스트에 있는 처리입니다.이러한 처리의 속도를 올리고 싶은 경우는 NOLOGGING의 지정을 검토한다. 다만, REDO 로그에 처리 내용이 기록되지 않기 때문에, 이러한 처리를 실시한 다음은 백업을 할 것을 추천한다.
|
출처 : http://blog.naver.com/hirokorea?Redirect=Log&logNo=20023344842
'전산Tip > Oracle' 카테고리의 다른 글
오라클 - 인덱스물리설계 (0) | 2010.04.14 |
---|---|
오라클 펑션 - 문자형숫자인지 확인 (0) | 2010.04.14 |
오라클 펑션 - 영문/숫자/한글 제외 기타 문자 제거 (조합형 한글 제거) (0) | 2010.04.14 |