다시 컴파일을 저장 프로시저
- 10/28/2019
- 4 분 읽
-
- M
- m
- d
- m
-
+2
에 적용됩: SQL 서버(지원되는 모든 버전) Azure SQL 데이터베이스Azure SQL 관리 인스턴스Azure 냅 분석병렬 데이터 웨어하우스가
이 항목에서 설명하는 방법을 다시 컴파일에 저장 프로시저를 사용하여 SQL Server Transact-SQL. 세 가지 방법이 있습니다 이렇게 하:으로 다시 컴파일 옵션에서 절차를 정의할 때 또는 절차를 호출을 다시 컴파일 쿼리에 대한 힌트 개별 명세서,또는 사용하여 sp_recompile 시스템에 저장되는 절차입니다. 이 항목에서는 프로시저 정의를 작성하고 기존 프로시저를 실행할 때 재 컴파일 사용 옵션을 사용하는 것에 대해 설명합니다. 그것은 또한 사용하는 방법에 대해 설명합 sp_recompile 시스템 저장 프로시저를 다시 컴파일하는 기존 절차입니다.
이 항목
-
전에 시작:
추천서
보안
-
를 다시 컴파일 사용하여 저장 프로시저:
Transact-SQL
을 시작하기 전에
권장 사항
-
경우 절차를 컴파일을 위한 첫 번째 시간에 또 다시 컴파일하는 절차의 쿼리 계획을 위해 최적화된 데이터베이스의 현재 상태 및 그 개체입니다. 는 경우에 데이터베이스를 겪는 상당한 변경 또는 데이터 구조,다시 컴파일하는 절차를 업데이트 및 최적화 절차에 대한 쿼리 계획입니다. 이는 프로 시저의 처리 성능을 향상시킬 수 있습니다.
-
프로 시저 재 컴파일을 강제해야하는 시간과 자동으로 발생하는 다른 시간이 있습니다. Sql Server 를 다시 시작할 때마다 자동 재 컴파일이 발생합니다. 프로 시저에서 참조하는 기본 테이블이 물리적 설계 변경을 거친 경우에도 발생합니다.
-
하는 또 다른 이유는 힘이 절차를 다시 컴파일을 방해하”매개 변수는 스니핑”의 동작 절차를 컴파일할 수도 있습니다. SQL 서버를 실행하는 절차는 모든 매개 변수 값이 사용하는 절차를 컴파일할 때의 일부로 포함된 생성하는 쿼리 계획입니다. 는 경우 이러한 값을 나타내는 일반적인 사람으로는 절차가 이후라는,다음의 절차에서 혜택을 쿼리 계획 모든 시간을 컴파일과 실행됩니다. 면에서 매개 변수 값을 절차에 자주 비정형을 강제로 다시 컴파일의 절차 및 새로운 계획에 따라 다른 매개 변수 값을 성능을 향상시킬 수 있습니다.
-
SQL Server 는 프로 시저의 명령문 수준 재 컴파일을 특징으로합니다. SQL Server 가 저장 프로 시저를 다시 컴파일하면 완전한 프로 시저 대신 재 컴파일을 유발 한 명령문 만 컴파일됩니다.
-
경우 쿼리에는 절차를 사용하여 정기적으로 전형적인 또는 임시 값,절차의 성능을 개선할 수 있습니다 사용하여 다시 컴파일 쿼리 힌트를 내부에는 그 쿼리를 처리합니다. 쿼리 힌트를 사용하는 쿼리 만 전체 프로 시저 대신 다시 컴파일되므로 SQL Server 의 명령문 수준 재 컴파일 동작이 모방됩니다. 하지만 이외에 사용하는 절차의 현재 매개 변수 값을 다시 컴파일 쿼리 힌트도의 값을 사용하는 모든 지역 변수가 내부에 저장된 절차를 컴파일할 때 문입니다. 자세한 내용은 쿼리 힌트(Transact-SQL)를 참조하십시오.
보안
사용 권한을
으로 다시 컴파일 옵션을
경우 이 옵션을 사용할 때 절차를 정의 만든 필요한 절차를 만들 권한 데이터베이스에서 변경 권한 스키마에에는 절차를 만들고 있습니다.
이 옵션이 EXECUTE 문에 사용되는 경우 프로 시저에 대한 실행 권한이 필요합니다. EXECUTE 문 자체에는 권한이 필요하지 않지만 EXECUTE 문에서 참조되는 프로 시저에는 execute 권한이 필요합니다. 자세한 내용은 실행(Transact-SQL)을 참조하십시오.
재 컴파일 쿼리 힌트
이 기능은 프로 시저가 생성되고 힌트가 프로 시저의 Transact-SQL 문에 포함될 때 사용됩니다. 따라서 데이터베이스에서 프로 시저 만들기 권한과 프로 시저가 생성되는 스키마에 대한 권한을 변경해야합니다.
sp_recompile 시스템 저장 프로 시저
지정된 프로 시저에 대한 변경 권한이 필요합니다.
Transact-SQL 사용
-
데이터베이스 엔진에 연결하십시오.
-
표준 막대에서 새 쿼리를 클릭합니다.
-
다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 클릭합니다. 이 예에서는 프로시저 정의를 만듭니다.
USE AdventureWorks2012; GO IF OBJECT_ID ( 'dbo.uspProductByVendor', 'P' ) IS NOT NULL DROP PROCEDURE dbo.uspProductByVendor; GO CREATE PROCEDURE dbo.uspProductByVendor @Name varchar(30) = '%' WITH RECOMPILE AS SET NOCOUNT ON; SELECT v.Name AS 'Vendor name', p.Name AS 'Product name' FROM Purchasing.Vendor AS v JOIN Purchasing.ProductVendor AS pv ON v.BusinessEntityID = pv.BusinessEntityID JOIN Production.Product AS p ON pv.ProductID = p.ProductID WHERE v.Name LIKE @Name;
를 다시 컴파일 사용하여 저장 프로시저를 다시 컴파일 옵션
새 쿼리를 선택합,다음 사본을 다음 코드를 붙여보취급방침과 실행을 클릭합니다. 그러면 프로 시저가 실행되고 프로 시저의 쿼리 계획이 다시 컴파일됩니다.
USE AdventureWorks2012; GO EXECUTE HumanResources.uspProductByVendor WITH RECOMPILE; GO
를 다시 컴파일 저장 프로시저를 사용하여 sp_recompile
를 선택하는 새로운 쿼리,복사 및 붙여는 다음 예제를 쿼리 창의와 실행을 클릭합니다. 이 실행되지 않는 절차가 표시 절차를 다시 컴파일해야 하는 쿼리 계획입 업데이트하여 다음에 절차를 실행됩니다.
USE AdventureWorks2012; GO EXEC sp_recompile N'dbo.uspProductByVendor'; GO
see
저장 프로시저 만들기
수정을 저장 프로시저
이름 바꾸기에 저장 프로시저
View 의 정의 저장 프로시저
종속성을 보장 프로시저
드롭 절차(Transact-SQL)
Leave a Reply