[ORACLE] PL/SQL - SQL과 실행 계획

privatekim·2024년 7월 13일
0

ORACLE

목록 보기
30/38

SQL과 실행계획

SQL문을 실행할 때 마다 새로운 실행계획이 생성되고, 생성된 실행 계획에 대한 SQL문장은 shared_pool이라는 공간에 저장된다.

이와 같이 사원 번호에 관한 SQL문장에 대해 v$sql뷰를 통해 조호회하여 확인할 수 있다.

각각의 문장에 따라 서로다른 실행계획이 실행되며 sql_id의 값을 통해 실제 실행계획을 자세하게 조회할 수 있다.

위 두 실행계획을 비교해보면 실행계획 sql_id와 검색하는 id값만 다를 뿐, 내부적인 실행계획은 완전히 같은 것을 알 수 있다.

sql 실행계획의 한계

수많은 sql문이 실행되고 각각의 실행이 생성되면 share_pool의 메모리 공간은 점점 줄어들게 된다. 많약 shared_pool메모리가 가득차게 되면 서버가 먹통이되고 아래 명령어를 통해 shared_pool 메모리를 초기화 할 수 있다.

ALTER SYSTEM FLUSH SHARED_POOL;

다만 위 코드를 실행하면 모든 실행계획이 삭제되어 다시 새로이 실행계획을 생성해야 하는데, 이 경우 많은 IO가 발생하여 느려질 수 있다.

한계 극복

위와 같은 문제가 발생하는 이유는 각각의 SQL문 마다 같은 실행계획을 가지고 있더라도 이를 공유하지 못하기 때문이다.

즉 사용된 실행계획을 공유할 수 있으면 이를 극복할 수 있다.

우리는 이것을 PL/SQL의 변수를 이용해 극복하고자 한다.

PL/SQL

기존의 SQL과 달리 PL/SQL은 기존 SQL에 PL(PROCEDURE LANGUAGE)개념을 추가한 언어이다.

SQL을 확장한 절차적 언어

라고 정리할 수 있다.

우리는 PL/SQL을 이용해 SQL의 실행 계획에서의 한계를 극복할 수 있다.

PL/SQL은 프로시저 생성자를 제공한다.

  • 프로시저 : 변수, 상수, 데이터유형(레코드 배열)
  • 조건문, 반복문
  • 재사용 가능한 프로그램 단위

PL/SQL 이점

  • 모듈식 프로그램 개발 (block) - ERP,SCM
  • 오라클 도구와 통합 (ERP, HR, SCM, CRM, ... ) 비즈니스 모듈들이 구현되어 있다.
  • 이식성이 좋다. (버전에 제약을 받지 않음.)
  • 예외처리를 할 수 있다.

0개의 댓글