주소별 행 식별

ROWID 및 확장 ROWID를 활용한 Oracle 데이터베이스 튜닝

Oracle 데이터베이스에서 데이터 액세스 성능을 최적화하는 방법 중 하나는 ROWID와 확장 ROWID를 이해하고 활용하는 것입니다. ROWID는 테이블 내의 특정 행의 주소를 나타내는 고유한 식별자이며, 이를 통해 데이터베이스는 매우 빠르게 특정 행에 접근할 수 있습니다.

ROWID란 무엇인가?

ROWID는 Oracle 데이터베이스에서 각 행에 할당되는 물리적 주소입니다. 이는 특정 테이블 내에서 각 행을 고유하게 식별하는 데 사용됩니다. ROWID는 데이터 파일 번호, 블록 번호, 그리고 해당 블록 내의 행 번호를 포함합니다. 따라서, ROWID를 알고 있다면 데이터베이스는 해당 행을 테이블 전체를 스캔하지 않고도 직접 찾아낼 수 있습니다.

ROWID는 다음과 같은 형식으로 표현됩니다:

OOOOOOO.FFFF.RRR
  • OOOOOOO: 데이터 객체 번호
  • FFFF: 데이터 파일 번호
  • RRR: 데이터 블록 내의 행 번호

확장 ROWID

파티셔닝된 테이블이나 인덱스 구성 테이블과 같은 특정 유형의 테이블에서는 표준 ROWID 형식이 충분하지 않을 수 있습니다. 이러한 경우, Oracle은 확장 ROWID를 사용합니다. 확장 ROWID에는 객체 번호, 데이터 파일 번호, 블록 번호, 행 번호 뿐만 아니라 파티션 정보도 포함됩니다.

ROWID 활용 방법

  1. 직접 행 액세스: ROWID를 사용하여 특정 행에 직접 액세스할 수 있습니다. 이는 특히 애플리케이션에서 특정 행을 빠르게 검색해야 할 때 유용합니다.
  2. 성능 튜닝: 쿼리 성능을 분석할 때, ROWID를 통해 특정 행에 액세스하는 데 필요한 시간을 측정하고, 이를 바탕으로 액세스 경로를 최적화할 수 있습니다.
  3. 데이터 무결성 검사: ROWID를 사용하여 데이터의 물리적 위치를 확인하고, 데이터 손상 여부를 검사할 수 있습니다.

ROWID를 활용한 쿼리 예제

다음은 ROWID를 사용하여 특정 행을 선택하는 간단한 쿼리 예제입니다.

SELECT *
  FROM employees
 WHERE ROWID = 'AAARv9AAEAAAARRABq';

이 쿼리는 employees 테이블에서 ROWID가 'AAARv9AAEAAAARRABq'인 행을 선택합니다.

ROWID를 이용한 성능 튜닝 예제

ROWID를 사용하여 쿼리 성능을 튜닝하는 방법은 다음과 같습니다.

먼저, EXPLAIN PLAN 명령어를 사용하여 쿼리 실행 계획을 확인합니다.

EXPLAIN PLAN FOR
SELECT * FROM employees
WHERE employee_id = 100;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

실행 계획에서 테이블 전체 스캔(Full Table Scan)이 발생하는 경우, 인덱스를 생성하여 ROWID를 활용한 인덱스 검색(Index Range Scan)으로 변경할 수 있습니다.

CREATE INDEX idx_employee_id ON employees (employee_id);

인덱스 생성 후, 동일한 쿼리의 실행 계획을 다시 확인하면, 인덱스를 사용한 검색으로 변경되었음을 확인할 수 있습니다.

확장 ROWID를 이용한 파티션 테이블 액세스 예제

파티셔닝된 테이블의 특정 파티션에 있는 행에 액세스하는 방법을 보여주는 예제입니다.

SELECT *
  FROM sales
 WHERE ROWID = 'EAAR8p9AAaADFHAAB';

확장 ROWID는 파티션 정보와 함께 물리적 주소를 제공하므로, 데이터베이스는 해당 파티션만 스캔하여 매우 효율적인 액세스를 수행할 수 있습니다.

ROWID 사용 시 주의사항

  • ROWID는 영구적인 주소가 아닐 수 있습니다. 테이블 재구성(예: 테이블 이동, 파티션 재분할) 후에는 ROWID가 변경될 수 있습니다.
  • ROWID는 특정 데이터베이스 인스턴스 내에서만 유효합니다. 따라서, 다른 데이터베이스 인스턴스에서는 사용할 수 없습니다.
  • 확장 ROWID는 표준 ROWID보다 더 많은 저장 공간을 필요로 합니다.

결론

ROWID와 확장 ROWID는 Oracle 데이터베이스에서 데이터 액세스 성능을 향상시키는 강력한 도구입니다. ROWID의 개념을 제대로 이해하고 활용함으로써, 쿼리 성능을 최적화하고 데이터 무결성을 유지하는 데 기여할 수 있습니다. 하지만, ROWID는 영구적인 주소가 아니므로, 테이블 재구성 후에는 변경될 수 있다는 점을 반드시 고려해야 합니다.

위로 스크롤