
오라클에서 Delete from plan_table 쿼리 정의 - 실행계획
Oracle에서 DELETE FROM plan_table 쿼리는 주로 EXPLAIN PLAN으로 생성된 실행 계획을 삭제하기 위해 사용됩니다. PLAN_TABLE은 SQL 쿼리의 실행 계획을 저장하는 테이블로, EXPLAIN PLAN 명령어를 통해 쿼리 실행 계획을 이 테이블에 저장할 수 있습니다. 이 쿼리가 실행되는 대표적인 경우는 다음과 같습니다:
1. 실행 계획 삭제
DELETE FROM plan_table은 실행 계획을 제거하는 데 사용됩니다. 예를 들어, 불필요한 실행 계획을 삭제하여 테이블을 정리하거나 새로운 쿼리 실행 계획을 삽입하기 전에 이전 기록을 지울 때 사용됩니다.
2. 테이블 정리
: PLAN_TABLE에 저장된 데이터가 쌓여서 테이블이 커지거나 관리가 필요할 때, 삭제를 통해 테이블 크기를 줄이는 작업이 필요할 수 있습니다.
3. 새로운 실행 계획 삽입 전 정리:
EXPLAIN PLAN을 여러 번 실행한 후 이전의 실행 계획 데이터를 삭제하여 새로운 실행 계획을 삽입할 때 기존 데이터를 지우는 경우에도 사용됩니다.
4. 자동화된 스크립트
: Oracle DB 관리자는 일정 기간마다 실행 계획을 정리하는 스크립트를 자동으로 실행시킬 수 있습니다. 이 경우 DELETE FROM plan_table이 주기적으로 실행될 수 있습니다.
결론
이 쿼리가 실행되면 PLAN_TABLE에서 실행 계획 데이터가 삭제되지만, 이 작업은 실행 계획을 '삭제'하는 것일 뿐, 실제로 쿼리 성능에 직접적인 영향을 주지는 않습니다.
PLAN_TABLE 이란?
PLAN_TABLE의 역할
PLAN_TABLE은 SQL 쿼리 실행 계획을 내부적으로 저장하고, DB 관리자가 쿼리의 성능을 분석하거나 최적화할 수 있도록 돕습니다. 이를 통해 사용자는 쿼리가 어떻게 실행될 것인지, 어떤 인덱스나 조인이 사용될 것인지 등을 미리 확인할 수 있습니다. EXPLAIN PLAN을 사용하면 실행 계획을 조회할 수 있는데, 이 정보는 후속 성능 튜닝 작업을 위한 중요한 데이터입니다.
PLAN_TABLE의 정의
PLAN_TABLE은 기본적으로 Oracle에서 제공하는 테이블로, 사용자가 명시적으로 생성할 필요 없이 EXPLAIN PLAN 명령을 실행하면 자동으로 사용됩니다. PLAN_TABLE은 SQL 쿼리 실행 계획을 기록하기 위해 여러 컬럼을 포함합니다.
주요 컬럼:
STATEMENT_ID: 실행 계획이 속한 SQL 문을 식별하는 고유 ID입니다.
PLAN_ID: 각 실행 계획에 대한 고유 식별자입니다.
PARENT_ID: 부모 노드를 나타내는 컬럼으로, 트리 구조에서 부모-자식 관계를 나타냅니다.
OPERATION: 실행 계획에서 각 단계에서 수행되는 작업의 종류를 나타냅니다. 예를 들어, TABLE ACCESS, INDEX SCAN, JOIN 등이 있습니다.
OPTIONS: 해당 작업의 옵션을 나타내며, FULL, RANGE SCAN 등 실행 계획의 세부 옵션이 기록됩니다.
OBJECT_NAME: 작업이 수행될 대상 객체의 이름(예: 테이블, 인덱스 등).
COST: 이 작업의 예상 비용을 나타내는 값입니다.
CARDINALITY: 예상되는 결과 행 수를 나타냅니다.
BYTES: 예상되는 결과 데이터의 크기를 바이트 단위로 나타냅니다.
TIMESTAMP: 실행 계획이 생성된 시간.
PLAN_TABLE의 동작 원리
PLAN_TABLE의 동작 원리는 다음과 같습니다:
1. EXPLAIN PLAN 실행
사용자가 EXPLAIN PLAN FOR <SQL문>을 실행하면, Oracle은 해당 SQL 쿼리의 실행 계획을 생성합니다.
생성된 실행 계획은 PLAN_TABLE에 삽입됩니다. 이 계획은 SQL문을 최적화하는 데 필요한 정보를 포함하고 있습니다.
쿼리의 실행 계획은 주로 SQL 쿼리가 어떻게 테이블이나 인덱스를 액세스할 것인지, 어떤 조인 방법을 사용할 것인지 등을 포함합니다.
2. 실행 계획의 저장
EXPLAIN PLAN 명령어는 PLAN_TABLE에 실행 계획을 저장하며, 이 데이터는 실제로 쿼리를 실행하는 동안 Oracle의 옵티마이저가 사용한 계획을 기반으로 합니다.
실행 계획은 트리 구조로 저장되며, 각 노드는 SQL 문장의 일부 작업(예: 테이블 액세스, 인덱스 스캔 등)을 나타냅니다.
3. 실행 계획 조회
사용자는 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);와 같은 쿼리를 실행하여 PLAN_TABLE에 저장된 실행 계획을 조회할 수 있습니다.
DBMS_XPLAN.DISPLAY는 PLAN_TABLE에서 데이터를 읽고, 더 읽기 쉬운 형식으로 표시하는 Oracle의 내장 함수입니다.
실행 계획 분석 및 성능 튜닝
PLAN_TABLE에 저장된 실행 계획을 분석하여 쿼리 성능을 최적화할 수 있습니다. 예를 들어, 실행 계획에서 사용된 인덱스나 조인 방법을 확인하고, 이를 개선하는 방법을 고려할 수 있습니다.
실행 계획의 COST 값을 통해 예상되는 비용을 파악하고, 비용이 높은 작업을 최적화하는 방법을 모색할 수 있습니다.
PLAN_TABLE의 활용 예시
성능 분석: 쿼리 실행 전에 EXPLAIN PLAN을 실행하여 예상 실행 계획을 확인하고, 비효율적인 부분을 개선합니다.
인덱스 최적화: 실행 계획에서 인덱스를 제대로 사용하지 않거나, 잘못된 인덱스가 사용되는 경우 이를 수정하여 성능을 개선할 수 있습니다.
조인 최적화: 실행 계획에서 조인 순서나 방식이 비효율적일 경우, JOIN 방식을 변경하거나 쿼리 구조를 변경하여 성능을 향상시킬 수 있습니다.
쿼리 튜닝: PLAN_TABLE에 저장된 실행 계획을 바탕으로 쿼리 튜닝을 수행하고, 성능을 개선할 수 있습니다.
PLAN_TABLE의 한계
PLAN_TABLE에 저장된 실행 계획은 예상 계획이므로, 실제 실행과 다를 수 있습니다. 실제 실행에서의 성능은 다양한 요인에 의해 달라질 수 있습니다.
PLAN_TABLE은 실행 계획의 정적 기록을 저장하기 때문에, 동적 실행 정보를 실시간으로 추적할 수는 없습니다.
테이블에 너무 많은 실행 계획이 쌓일 경우, 테이블 크기가 커져서 관리가 어려워질 수 있습니다.
'프로그래밍' 카테고리의 다른 글
세션 타임아웃 설정(Session timeout) - WAS, web.xml, Node.js (0) | 2025.02.26 |
---|---|
MS-SQL 서버 접속 에러 조치 - a network-related or instance-specific error occurred (0) | 2025.02.25 |
AI 시대! 돈 되는 IT 기술 5가지 & 추천 강의 (0) | 2025.02.16 |
IT, 웹 개발자로 취업 준비 및 커리어 관리 가이드, TIP (1) | 2025.02.15 |
2025년 기준 Java 언어 분석: 발전, 타 언어와 비교, 장단점, 트렌드 (0) | 2025.02.14 |