반응형

/********************************************************************************************
-- Title : [2k] 프로시저 특징 및 수행 과정
-- Reference : http://cafe.naver.com/mssql2000/24
-- Key word : procedure parse parsing tree standardization optimizer 옵티마이저 실행 과정
********************************************************************************************/

 

저장 프로시져의 특징

 

1. 프로그래밍 언어의 함수와 같이 입력값과 출력값을 가질 수 있다.

 

프로시저를 호출하는 일반적인 형식은 다음과 같습니다.

 

쿼리분석기를 통해서 호출하는 경우에는

[ exec ]  프로시저명  입력값1,입력값2,...

 

형식으로 사용되구요 내부적으로는 입력값들을 받아서 받은 입력값들은 프로시저 내부의 내용에 따라 where 조건으로 사용되거나 가공을 통해서, 원하는 결과값을  돌려줍니다.

어떤조건에 사용되고 어떻게 프로세싱이 되는지는 여러분이 SQL문을 구현하듯 프로시저내용이 어떻게 구현되어있느냐에 따라 달라질 것이구요..

 

2. 프로시져는 서버측(Server side)에 탑재되고 DB서버상에서 처리된다.

 

프로시저는 클라이언트 프로그램이나 asp,jsp와 같은 웹서버페이지에서 DB서버로 호출이 이루어집니다.

DB서버는 호출된 프로시저를 실행에 옮기고 그 결과값을 다시 호출한 곳으로 돌려주게 되지요.. 실제로 프로시저를 이용해서 클라이언트 프로그램이 처리해주어야 할 부분의 일부를 프로시저(DB서버)상에서 처리해주는 일도 가능하게 됩니다.

 

 

저장 프로시져의 수행과정

 

일반 SQL구문을 수행할 경우

 

- 처음 수행시

1. 구문 분석(Parsing) - SQL구문의 키워드를 분리하고 문법을 검사합니다.

2. 표준화(Standardization) - DB의 개체들(테이블 등)의 권한에 대해서 검사합니다.

3. 보안 점검 - 해당하는 DB개체들에 대한 사용자의 사용 권한을 검사합니다.

4. 최적화(Optimize) - 최적의 성능을 내기위한 사항(index, join, lock)을 적용합니다.

5. 컴파일

 

- 반복 수행시

1. 처음 수행한 일반 SQL구문의 실행 계획이 캐싱되어 있는지 확인후 이를 수행합니다

(단 이럴 경우 특정 조건들에 대한 체크를 하고 조건들이 모두 일치해야 합니다.)

2. 캐싱되어 있지 않을 경우 처음수행시의 5단계를 다시 수행합니다.

 

 

저장 프로시져를 수행할 경우

 

- 생성시

1. 구문 분석 (Parsing) -  프로시저의 키워드를 분리하고 문법을 검사합니다.

2. 표준화(Standardization) - DB의 개체들(테이블 등)에 대해서 검사합니다.

3. 보안 점검 - 프로시져에 대해서 생성이 가능한지 검사합니다.

4. 해당 프로시져의 구문과 생성 정보를syscomments 와 sysobject에 저장합니다.

 

- 첫 실행시

1. 보안 점검 - 해당하는 DB개체들에 대한 사용자의 사용 권한을 검사합니다.

2. 최적화 - 최적의 성능을 내기위한 사항(index, join, lock)을 적용합니다.

3. 컴파일후 수행 계획(execution plan)을 생성후 캐시에 저장후 실행합니다.

 

- 반복 수행시

1. 실행 계획이 캐싱이 된지 확인후 실행 합니다.(실행계획이 있을 경우 더 이상의 컴파일 작업이 필요없습니다.)

2. 캐시에 실행 계획이 없을 경우 - 처음 실행 과정을 반복 합니다.

 

 

저장 프로시져의 장점

 

1. SQL문을 통한 방법에 비해 좋은 성능

 

위 수행과정을 보면 일반 SQL문장이 더 단순할 수 있습니다. 그러나 이것은 한번만 수행이 이루어질 경우이며 반복적으로 수행이 이루어질 경우 해당 프로시저에 대한 실행계획이 캐시(메모리)에 있다면 이것을 확인후 즉각 실행계획을 이용해 수행을 함으로(컴파일과정을 생략함.) SQL문보다 월등히 빠를 속도를 낼 수 있습니다.

 

2. 보안성을 높일 수 있음.

 

쿼리 실행문장이 프로그램소스상에 모두 노출되어 있는 SQL문에 비해 프로시저명과 인자만을 호출하는 프로시저가 보안성이 높은것은 당연하겠죠..

 

3. 다양한 처리가 가능

 

프로시저 내부에서  변수선언,조건문,분기분 등을 사용할 수 있어 마치 프로그래밍언어의 함수와도 같은 컨트롤이 가능합니다.

 

4. 네크워크의 부하를 줄일 수 있음.

 

네트워크를 통해서 오고 가는 긴 SQL문의 네트워크 트레픽을 줄일수 있다는 의미로..

반응형

+ Recent posts