Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

[Database] 저장 프로시저

2016. 4. 1. 17:47programming/database

728x90

저장 프로시저

저장 프로시저 또는 스토어드 프로시저(stored procedure)는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합.

저장 프로시저의 이점
  1. 캡슐화의 이점
    저장 프로시저 내의 로직이 변경된다 하더라도 매개변수의 형태에 변화가 없다면 사용자와 어플리케이션은 연향을 받지 않을뿐더러 변경된 로직도 적용 받을 수 있게 된다.
  2. 성능의 이점
    저장된 실행계획을 재사용 함으로써 CPU 리소스를 절약해 주고, 코드의 구문 분석, 이름 확인 및 최적화에 걸리는 시간을 단축할 수 있다.
  3. 네트워크 트래픽 최소화
    서버 쪽으로 전송하는 코드문자열을 줄여서 트래픽을 최소화할 수 있다. 왜냐하면 단지 저장 프로시저의 이름과 매개변수만 제공되기 때문
  4. 보안 계층으로 사용개체에 대한 권한을 직접 부여하는 것이 아니라 저장 프로시저에 대한 실행 권한만을 부여하여 개체에 대한 불필요한 접근을 제한할 수 있다.

일반적인 SQL 문
쿼리문에 대한 문법을 검사한 후 불필요한 구문을 제거해서 쿼리문을 표준화 한다.
그리고 사용자가 해당 쿼리문을 실행할 권한이 있는지 확인을 한 후 최적의 실행 계획을 만들어 컴파일 과정을 통해 캐시에 저장한 후 구문을 실행.

이후에 해당 쿼리문이 다시 실행될 때 캐시에 실행 계획이 존재하면 쿼리문은 즉시 수행되지만, 그렇지 않은 경우 처음 실행할 때와 같은 과정을 통해 실행 계획을 만든 후 쿼리문이 실행된다.
일반 SQL문을 구문이 조금만 달라도 다른 쿼리문으로 인식이 되어 실행계획이 재사용될 가능성이 높지 않다.

저장 프로시저
구문의 문법을 검사한 후 사용자가 저장 프로시저를 만들 권한이 있는지 확인한다. 완성된 프로시저의 정보는 시스템 테이블에 저장.

저장 프로시저가 만들어 진 후 처음으로 실행 될 때는 먼저 저장 프로시저가 참조하는 개체가 있는지 확인을 함. 저장 프로시저를 만들 때 해당 개체의 이름이 존재하는지 확인하지 않는다. 이어서 사용자가 저장 프로시저를 호출할 권한이 있는지 확인하고, 최적의 실행 계획을 만들어 컴파일 과정을 통해 캐시에 등록된 후 컴파일 된 구문이 실행된다. 저장 프로시저가 처음 실행되더라도 구문 분석 단계를 거치지 않기 때문에 기본적으로 일반 SQL문을 실행할 때보다 빠르다. 

이후에 저장 프로시저가 다시 호출될 때 캐시에 실행 계획이 있으면 즉시 실행되고, 그렇지 않은 경우 처음 실행할 때와 동일한 과정으로 실행 계획이 만들어진 후 실행된다. 저장 프로시저는 구문이 변경되지 않으므로 동일한 쿼리문 실행으로 인해 저장된 실행 계획을 재사용 할 가능성이 높아 CPU와 메모리 사용량을 줄 일 수 있는 이점을 가지고 있다.

CommandType = CommandType.StoredProcedure( 프로시저로 할 경우 타입 지정)
CommandText = 프로시저명


728x90