다음을 통해 공유


sp_recompile(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

저장 프로시저, 트리거 및 사용자 정의 함수가 다음에 실행될 때 다시 컴파일되도록 합니다. 이렇게 하려면 프로시저 캐시에서 기존 계획을 삭제하고 다음에 프로시저 또는 트리거를 실행할 때 새 계획을 만들어야 합니다. SQL Server Profiler 컬렉션에서 이벤트는 이벤트 SP:CacheInsert SP:Recompile대신 기록됩니다.

Transact-SQL 구문 표기 규칙

구문

sp_recompile [ @objname = ] N'object'
[ ; ]

인수

[ @objname = ] N'object'

현재 데이터베이스에 있는 저장 프로시저, 트리거, 테이블, 뷰 또는 사용자 정의 함수의 정규화된 이름 또는 정규화되지 않은 이름입니다. @objname nvarchar(776)이며 기본값은 없습니다.

  • @objname 저장 프로시저, 트리거 또는 사용자 정의 함수의 이름인 경우 저장 프로시저, 트리거 또는 함수는 다음에 실행될 때 다시 컴파일됩니다.

  • @objname 테이블 또는 뷰의 이름인 경우 테이블 또는 뷰를 참조하는 모든 저장 프로시저, 트리거 또는 사용자 정의 함수는 다음에 실행될 때 다시 컴파일됩니다.

반환 코드 값

0(성공) 또는 0이 아닌 숫자(실패).

설명

sp_recompile 는 현재 데이터베이스에서만 개체를 찾습니다.

저장 프로시저 또는 트리거 및 사용자 정의 함수에서 사용하는 쿼리는 컴파일될 때만 최적화됩니다. 인덱스 또는 통계에 영향을 주는 기타 변경 내용이 데이터베이스에 적용되면 컴파일된 저장 프로시저, 트리거 및 사용자 정의 함수의 효율성이 떨어질 수 있습니다. 테이블에서 작동하는 저장 프로시저 및 트리거를 다시 컴파일하면 쿼리를 다시 구성할 수 있습니다.

이 저장 프로시저의 사전 실행은 일반적으로 필요하지 않습니다. SQL Server는 유리할 때 저장 프로시저, 트리거 및 사용자 정의 함수를 자동으로 다시 컴파일합니다. 데이터베이스 엔진에서 개체를 다시 컴파일하도록 선택할 수 있는 여러 가지 이유가 있습니다. 가장 일반적으로 자동 다시 컴파일은 자동 또는 수동 통계 업데이트로 인해 기본 카디널리티 예상치의 변경 내용을 따릅니다.

모든 실행으로 저장 프로시저를 다시 컴파일하는 것은 매개 변수화로 인한 쿼리 계획 문제를 해결하는 덜 효율적인 방법 중 하나입니다. SQL Server 2022(16.x)에 도입된 기능 매개 변수 중요한 계획 최적화 는 이 문제를 자동으로 완화하려고 시도합니다. 이전 버전에서는 각 실행을 호출 sp_recompile 하는 대신 다음을 고려합니다.

  • 코드 변경이 필요한 WITH RECOMPILE 옵션을 쿼리에 추가합니다.
  • 계획 가이드를 WITH RECOMPILE 사용하여 옵션을 적용합니다.
  • WITH RECOMPILE 코드를 변경하지 않고 쿼리 저장소 힌트사용하여 옵션을 적용합니다.
  • 자세한 내용은 매개 변수에 중요한 계획 문제가 있는 쿼리 해결을 참조 하세요.

사용 권한

지정된 개체에 대한 ALTER 권한이 필요합니다.

예제

다음 예제에서는 테이블에 대해 작동하는 Sales.Customer 저장 프로시저, 트리거 및 사용자 정의 함수가 다음에 실행될 때 다시 컴파일되도록 합니다.

USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO