다음을 통해 공유


지연된 이름 확인 및 컴파일

저장 프로시저를 만들 때 프로시저의 문을 구문 분석하여 구문이 정확한지 확인합니다. 프로시저 정의에 구문 오류가 있으면 오류가 반환되고 저장 프로시저가 만들어지지 않습니다. 구문이 정확하지 않으면 저장 프로시저의 텍스트가 sys.sql_modules 카탈로그 뷰에 저장됩니다.

저장 프로시저가 처음 실행될 때 쿼리 처리기는 sys.sql_modules 카탈로그 뷰에서 저장 프로시저의 텍스트를 읽고 프로시저가 사용하는 개체 이름이 있는지 확인합니다. 저장 프로시저가 참조하는 테이블 개체는 저장 프로시저가 만들어질 때가 아니라 실행될 때만 존재하면 되므로 이 프로세스를 지연된 이름 확인이라고 합니다.

[!참고]

지연된 이름 확인은 존재하지 않는 테이블 개체를 참조할 때만 사용할 수 있습니다. 다른 모든 개체는 저장 프로시저를 만들 때 존재해야 합니다. 예를 들어 저장 프로시저에 있는 기존 테이블을 참조할 때는 해당 테이블에 대해 존재하지 않는 열을 나열할 수 없습니다.

확인 단계에서 MicrosoftSQL Server는 변수가 열 데이터 형식에 맞는지 검사하는 등의 다른 유효성 검사 작업도 수행합니다. 저장 프로시저를 실행할 때 저장 프로시저에서 참조한 개체가 없는 경우 저장 프로시저는 이 개체를 참조하는 문에 도달할 때 실행이 중지됩니다. 이런 경우 또는 이름 확인 단계에서 다른 오류가 발견되는 경우 오류를 반환합니다.

[!참고]

저장 프로시저가 참조하는 개체를 삭제하거나 해당 개체의 이름을 바꾸면 저장 프로시저가 실행될 때 오류가 반환됩니다. 그러나 저장 프로시저에서 참조하는 개체를 같은 이름의 개체로 바꾼 경우에는 저장 프로시저를 다시 만들지 않고 실행할 수 있습니다. 예를 들어 저장 프로시저 Proc1이 테이블 Test1을 참조하는데 Test1이 삭제되고 Test1이라고 하는 다른 테이블이 만들어지면 Proc1이 새 테이블을 참조합니다. 이 경우 저장 프로시저를 다시 만들지 않아도 됩니다.

프로시저 실행이 확인 단계를 성공적으로 마치면 MicrosoftSQL Server의 쿼리 최적화 프로그램이 저장 프로시저의 Transact-SQL 문을 분석하고 실행 계획을 만듭니다. 실행 계획에는 다음과 같은 정보를 기초로 저장 프로시저를 가장 빨리 실행할 수 있는 방법이 설명되어 있습니다.

  • 테이블에 있는 데이터의 양

  • 테이블에 있는 인덱스의 특성 및 존재 여부와 인덱싱된 열에서의 데이터 배포

  • WHERE 절 조건에서 사용하는 비교 연산자 및 비교 값

  • 조인과 UNION, GROUP BY 및 ORDER BY 키워드 존재 여부

쿼리 최적화 프로그램은 저장 프로시저에서 위에 나열된 정보를 분석한 후에 실행 계획을 메모리에 배치합니다. 저장 프로시저를 분석하고 실행 계획을 만드는 과정을 컴파일이라고 합니다. 최적화된 메모리 내 실행 계획을 사용하여 쿼리를 실행합니다. 실행 계획은 SQL Server가 다시 시작되거나 다른 개체를 저장하기 위한 공간이 필요할 때까지 메모리에 남아 있습니다.

저장 프로시저가 다음에 실행될 때 SQL Server는 메모리에 있는 기존의 실행 계획을 다시 사용합니다. 메모리에 실행 계획이 없으면 새 실행 계획을 만듭니다.