익스텐트 및 테이블 스페이스 설정시 고려사항
보통은 pctincrease를 0으로 두는게 맞다고 생각합니다. 보통 pctincrease가 0이면 테이블스페이스의 빈공간에대한 coalesce가 일어나지 않으나
이러한것은 대규모의 이동작업 혹은 삭제 작업이 있었던 경우
alter tablespace xxxx coalesce;
명령으로 병합시켜주면 되구요.
제 경우 테이블 스페이스 설계규칙은 간단합니다. 무조건 DB_BLOCK_SIZE는 8k 잡습니다. OS의 I/O BLOCK SIZE는 보통 1024K 라고 칩시다.
많아봤자 4096, 1024, 512 뭐 이런식이기 때문에 그렇게 잡으면 됩니다.
그리고.. 1024/8 하면 126이 나옵니다. 따라서 MULTI BLOCK I/O COUNT는 128의 약수면 됩니다. 따라서 2, 4, 8 이런정도를 고려하세요.
그렇게하면 OS의 블럭읽기가 정확히 DB BLOCK 읽기의 배수로 떨어지죠.
내용 그다음에는 DB_BLOCK_SIZE * MULTI BLOCK I/O COUNT의 배수로 테이블스페이스 데이터파일 사이즈를 정합니다. 이전에 MULTIBLOCK I/O COUNT가 8이었다고한다면, 8*8 = 64K. 따라서 64MB로 잡았다고 합시다.
그다음에 익스텐트 사이즈는 필요에 따라서 64K의 배수로 잡아주면됩니다.
1MB = 1024KB 이고 1024는 64의 배수이므로 임의의 MB로 잡아주면 되죠.
단 이 익스텐트 사이즈가 정확히 데이터 파일 사이즈의 약수이도록 해주면 됩니다. 필요에따라서 8MB일수도있고 32MB일수도 있겠죠.
이해가 가시나요? 초점은 OS 블럭 리딩 사이즈가 DB BLOCK 리딩 사이즈의 배수이어야 하며, 테이블 스페이스의 데이터파일 사이즈가 익스텐트사이즈의 배수이어야 하며, 익스텐트 사이즈는 DB_BLOCK_SIZE * MULTIBLOCK_IO_COUNT (파라미터 명이 맞나 모르겠군요) 이어야 한단 것이죠.
이렇게하면 절대로 FRAGMENTATION따위는 일어나지 않습니다.
요즘은 그냥 LOCALLY MANAGED TABLESPCE를 사용하며 편히 삽니다..
from oracle forum 4baf user
원본출처 : http://211.209.69.159:8000/Orastudy/board.jsp?bbs=tiptech&pg=1&seq=357&act=view
|