Oracle 10g 7

인덱스 컬럼의 분포도 및 순서

인덱스를 이용해야만 성능은 향상되는가 우리가 SQL을 작성하면서 성능을 보장하기 위해 가장 먼저 무엇을 고려하는가? 가장 먼저 고려하는 사항은 인덱스일 것이다. 많은 경우에 작성한 SQL에 대해 인덱스를 생성한다면 성능을 보장 받을 수 있다고 생각하게 된다. 과연, 인덱스만 생성한다면 해당 SQL의 성능을 보장할 수 있겠는가? 어떤 SQL은 인덱스 때문에 성능이 엄청 저하될 수 있는 것이 현실이다. 이러한 경우는 경험해본 사람이라면 쉽게 이해할 수 있을 것이다. 그렇다면 어떤 경우의 SQL에는 인덱스가 필요하고 어떤 경우의 SQL에는 인덱스가 필요하지 않은 것일까? 인덱스를 이용하여 성능을 최적화하기 위해서 어떤 컬럼으로 인덱스를 구성할 것인가에 대한 것보다도 해당 SQL이 인덱스를 이용해야 할지 아니면..

Admin/Tuning 2008.05.07

파티셔닝된 Index-Organized 테이블의 신속한 파티션 분리 - 10gR2

다음과 같은 경우를 생각해 봅시다. 파티셔닝된 테이블이 하나 있습니다. 월말이 되어 다음달을 위한 파티션을 정의해야 하는데, 그만 잊어버리고 말았습니다. 이런 경우 어떻게 해야 할까요? maxvalue 파티션을 두 개로 분리하여, 새로운 달을 위한 파티션과 새로운 maxvalue 파티션을 생성하는 것이 유일한 방법입니다. 하지만 파티셔닝된, index-organized 테이블(IOT)에서 이러한 방법을 사용하는 것은 조금 위험합니다. 이 경우, 물리적인 파티션이 먼저 생성되고 여기에 maxvalue 파티션의 로우(row)를 이동해야 하므로 추가적인 I/O와 CPU 사이클을 소모하기 때문입니다. Oracle Database 10g Release 2에서는 이 과정이 대폭적으로 단순화되었습니다. 아래 그림에서..

Admin/admin 2007.09.04

백업을 이용한 Transportable Tablespace의 생성 - 10gR2

Oracle8i에서 처음 소개된 Transportable Tablespace는 서로 다른 데이터베이스 간의 고속 데이터 전송을 가능하게 하였습니다. 이 기능을 이용하여 먼저 테이블스페이스의 메타데이터만을 export한 다음, 데이터 파일과 export 덤프 파일을 타겟 데이터베이스에 전송하고, 메타데이터를 import하여 타겟 데이터베이스에 테이블스페이스에 “플러그인” 처리하는 것이 가능합니다. 이와 같이 하면 테이블스페이스의 데이터를 타겟 데이터베이스에서 바로 활용할 수 있습니다. Transportable Tablespace는 당시까지 데이터 웨어하우징 분야에서 가장 까다로운 난제의 하나로 인식되던 데이터의 이동 속도 문제를 해결하였다는 점에서 큰 의미를 갖습니다. 하지만 OLTP 데이터베이스 환경에서..

Admin/B&R 2007.09.04

단일 파티션의 온라인 재구성 - 10gR2

트랜잭션 히스토리를 저장한 TRANS 테이블이 있다고 가정해 봅시다. 이 테이블은 TRANS_DATE를 기준으로 파티셔닝 되며, 각 분기별로 새로운 파티션이 생성됩니다. 가장 최근에 생성된 파티션은 매우 빈번하게 업데이트되지만, 분기가 마감되고 나면 해당 파티션에 대해 트랜잭션이 거의 발생하지 않으므로 파티션을 다른 위치로 옮겨도 무방합니다. 하지만 파티션을 이동하는 과정에서 테이블에 락(lock)이 걸리고 액세스가 차단될 수 있다는 것이 문제입니다. 그렇다면 가용성을 저해하지 않으면서 파티션을 이동할 수 있는 방법이 있을까요? Oracle Database 10g Release 2는 단일 파티션에 대한 온라인 재구성 기능을 제공합니다. 이 작업은 전체 테이블을 대상으로 하는 온라인 재구성 작업과 동일한 ..

Admin/admin 2007.09.04

온라인 재정의를 통한 LONG -> LOB 변환

운영중인 데이터 웨어하우스에 많은 양의 텍스트 데이터가 입력되어 있는 환경에서는, LONG 데이터타입을 갖는 컬럼이 여럿 존재할 가능성이 높습니다. LONG 데이터타입은 SUBSTR과 같은 데이터 처리 함수에서 활용될 수 없다는 단점이 있으며, 따라서 LOB 컬럼으로 변환하는 것이 바람직합니다. DBMS_REDEFINITION 패키지를 이용하면 온라인 상태에서 LONG 데이터타입을 LOB 데이터타입으로 변환할 수 있습니다. 하지만 Oracle Database 10g Release 2 이전 버전에는 중요한 제약사항이 존재했습니다. LONG 컬럼을 LOB 컬럼으로 변환하는 작업은 최대한 신속하게 완료되어야 합니다. 테이블이 파티셔닝되어 있는 경우, 프로세스는 각 파티션 별로 병렬적으로 수행됩니다. 하지만 테..

Admin/admin 2007.09.04

v$sql_bind_capture - 바인드 변수값 확인

바인드 변수값 확인 10g 이전에서는 trace로 확인할 수 밖에 없었다. select sesion.sid, sesion.username, sesion.sql_id, sesion.sql_child_number, sql_bind_capture.name, sql_bind_capture.value_string from v$sql_bind_capture sql_bind_capture, v$session sesion where sesion.sql_hash_value = sql_bind_capture.hash_value and sesion.sql_address = sql_bind_capture.address and sesion.username is not null ; Bind data : One of the bin..

Admin/admin 2007.08.21