저장 프로시저
저장 프로시저 또는 스토어드 프로시저(stored procedure)는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합.
저장 프로시저의 이점
- 캡슐화의 이점
저장 프로시저 내의 로직이 변경된다 하더라도 매개변수의 형태에 변화가 없다면 사용자와 어플리케이션은 연향을 받지 않을뿐더러 변경된 로직도 적용 받을 수 있게 된다. - 성능의 이점
저장된 실행계획을 재사용 함으로써 CPU 리소스를 절약해 주고, 코드의 구문 분석, 이름 확인 및 최적화에 걸리는 시간을 단축할 수 있다. - 네트워크 트래픽 최소화
서버 쪽으로 전송하는 코드문자열을 줄여서 트래픽을 최소화할 수 있다. 왜냐하면 단지 저장 프로시저의 이름과 매개변수만 제공되기 때문 - 보안 계층으로 사용개체에 대한 권한을 직접 부여하는 것이 아니라 저장 프로시저에 대한 실행 권한만을 부여하여 개체에 대한 불필요한 접근을 제한할 수 있다.
일반적인 SQL 문
쿼리문에 대한 문법을 검사한 후 불필요한 구문을 제거해서 쿼리문을 표준화 한다.
그리고 사용자가 해당 쿼리문을 실행할 권한이 있는지 확인을 한 후 최적의 실행 계획을 만들어 컴파일 과정을 통해 캐시에 저장한 후 구문을 실행.
이후에 해당 쿼리문이 다시 실행될 때 캐시에 실행 계획이 존재하면 쿼리문은 즉시 수행되지만, 그렇지 않은 경우 처음 실행할 때와 같은 과정을 통해 실행 계획을 만든 후 쿼리문이 실행된다.
일반 SQL문을 구문이 조금만 달라도 다른 쿼리문으로 인식이 되어 실행계획이 재사용될 가능성이 높지 않다.
저장 프로시저
구문의 문법을 검사한 후 사용자가 저장 프로시저를 만들 권한이 있는지 확인한다. 완성된 프로시저의 정보는 시스템 테이블에 저장.
저장 프로시저가 만들어 진 후 처음으로 실행 될 때는 먼저 저장 프로시저가 참조하는 개체가 있는지 확인을 함. 저장 프로시저를 만들 때 해당 개체의 이름이 존재하는지 확인하지 않는다. 이어서 사용자가 저장 프로시저를 호출할 권한이 있는지 확인하고, 최적의 실행 계획을 만들어 컴파일 과정을 통해 캐시에 등록된 후 컴파일 된 구문이 실행된다. 저장 프로시저가 처음 실행되더라도 구문 분석 단계를 거치지 않기 때문에 기본적으로 일반 SQL문을 실행할 때보다 빠르다.
이후에 저장 프로시저가 다시 호출될 때 캐시에 실행 계획이 있으면 즉시 실행되고, 그렇지 않은 경우 처음 실행할 때와 동일한 과정으로 실행 계획이 만들어진 후 실행된다. 저장 프로시저는 구문이 변경되지 않으므로 동일한 쿼리문 실행으로 인해 저장된 실행 계획을 재사용 할 가능성이 높아 CPU와 메모리 사용량을 줄 일 수 있는 이점을 가지고 있다.
CommandType = CommandType.StoredProcedure( 프로시저로 할 경우 타입 지정)
CommandText = 프로시저명