새 계획 지침 만들기Create a New Plan Guide

계획 지침은 쿼리 힌트나 정해진 쿼리 계획을 쿼리에 연결하여 쿼리 최적화에 영향을 미칩니다.Plan guides influence query optimization by attaching query hints or a fixed query plan to them. 계획 지침에서 최적화하려는 문을 지정하고 사용할 쿼리 힌트가 들어 있는 OPTION 절이나In the plan guide, you specify the statement that you want optimized, and either an OPTION clause that contains query hints you want to use. 쿼리를 최적화하는 데 사용할 특정 쿼리 계획을 지정합니다.or a specific query plan you want to use to optimize the query. 쿼리가 실행하면 쿼리 최적화 프로그램이 Transact-SQLTransact-SQL 문을 계획 지침과 비교하여 런타임에 쿼리에 OPTION 절을 추가하거나 지정된 쿼리 계획을 사용합니다.When the query executes, the query optimizer matches the Transact-SQLTransact-SQL statement to the plan guide and either attaches the OPTION clause to the query at run time or uses the specified query plan.

계획 지침에서는 해결된 쿼리 계획 및/또는 쿼리 힌트를 쿼리에 적용합니다.A Plan Guide applies either a fixed query plan, and/or query hints, to a query.

제한 사항 Limitations and restrictions

  • sp_create_plan_guide 인수는 표시된 순서대로 제공해야 합니다.The arguments to sp_create_plan_guide must be provided in the order that is shown. sp_create_plan_guide매개 변수 값을 제공하는 경우 모든 매개 변수 이름을 명시적으로 지정하거나 모두 지정하지 않아야 합니다.When you supply values for the parameters of sp_create_plan_guide, all parameter names must be specified explicitly, or none at all. 예를 들어 @name =을 지정한 경우 @stmt = , @type = 등도 지정해야 합니다.For example, if @name = is specified, then @stmt = , @type =, and so on, must also be specified. 마찬가지로 @name =을 생략하고 매개 변수 값만 제공한 경우 나머지 매개 변수 이름도 생략하고 해당 값만 제공해야 합니다.Likewise, if @name = is omitted and only the parameter value is provided, the remaining parameter names must also be omitted, and only their values provided. 인수 이름은 구문 이해를 위한 설명 용도로만 사용됩니다.Argument names are for descriptive purposes only, to help understand the syntax. SQL ServerSQL Server 는 지정된 매개 변수 이름과 해당 이름이 사용된 위치의 매개 변수 이름이 일치하는지 확인하지 않습니다. does not verify that the specified parameter name matches the name for the parameter in the position where the name is used.

  • 같은 쿼리 및 일괄 처리나 모듈에 대해 두 개 이상의 OBJECT 또는 SQL 계획 지침을 만들 수 있습니다.You can create more than one OBJECT or SQL plan guide for the same query and batch or module. 그러나 지정된 시간에 한 개의 계획 지침만 사용할 수 있습니다.However, only one plan guide can be enabled at any given time.

  • 저장 프로시저, 함수 또는 WITH ENCRYPTION 절을 지정하거나 임시인 DML 트리거를 참조하는 @module_or_batch 값에 대해서는 OBJECT 유형의 계획 지침을 만들 수 없습니다.Plan guides of type OBJECT cannot be created for an @module_or_batch value that references a stored procedure, function, or DML trigger that specifies the WITH ENCRYPTION clause or that is temporary.

  • 활성화 여부에 관계없이 계획 지침에서 참조하는 함수, 저장 프로시저 또는 DML 트리거를 삭제하거나 수정하려고 하면 오류가 발생합니다.Trying to drop or modify a function, stored procedure, or DML trigger that is referenced by a plan guide, either enabled or disabled, causes an error. 계획 지침에서 참조하는 트리거가 정의되어 있는 테이블을 삭제하려는 경우에도 오류가 발생합니다.Trying to drop a table that has a trigger defined on it that is referenced by a plan guide also causes an error.

Permissions Permissions

OBJECT 유형의 계획 지침을 만들려면 참조된 개체에 ALTER 권한이 있어야 합니다.To create a plan guide of type OBJECT, you need ALTER permission on the referenced object. SQL 또는 TEMPLATE 유형의 계획 지침을 만들려면 현재 데이터베이스에 대한 ALTER 권한이 있어야 합니다.To create a plan guide of type SQL or TEMPLATE, you need ALTER permission on the current database.

SSMS를 사용하여 계획 지침 만들기 Create a plan guide using SSMS

  1. 더하기 기호를 클릭하여 계획 지침을 만들 데이터베이스를 확장한 다음 더하기 기호를 클릭하여 프로그래밍 기능 폴더를 확장합니다.Click the plus sign to expand the database in which you want to create a plan guide, and then click the plus sign to expand the Programmability folder.

  2. 계획 지침 폴더를 마우스 오른쪽 단추로 클릭하고 새 계획 지침...을 선택합니다.Right-click the Plan Guides folder and select New Plan Guide…. select_plan_guideselect_plan_guide

  3. 새 계획 지침 대화 상자의 이름 입력란에 계획 지침 이름을 입력합니다.In the New Plan Guide dialog box, in the Name box, enter the name of the plan guide.

  4. 입력란에 계획 지침이 적용되는 Transact-SQLTransact-SQL 문을 입력합니다.In the Statement box, enter the Transact-SQLTransact-SQL statement against which the plan guide is to be applied.

  5. 범위 유형 목록에서 Transact-SQLTransact-SQL 문이 나타나는 엔터티 유형을 선택합니다.In the Scope type list, select the type of entity in which the Transact-SQLTransact-SQL statement appears. 이것은 Transact-SQLTransact-SQL 문을 계획 지침과 일치시키기 위한 컨텍스트를 제공합니다.This specifies the context for matching the Transact-SQLTransact-SQL statement to the plan guide. 가능한 값은 OBJECT, SQLTEMPLATE입니다.Possible values are OBJECT, SQL, and TEMPLATE.

  6. 범위 일괄 처리 입력란에 Transact-SQLTransact-SQL 문이 나타나는 일괄 처리 텍스트를 입력합니다.In the Scope batch box, enter the batch text in which the Transact-SQLTransact-SQL statement appears. 일괄 처리 텍스트는 USE*database* 문을 포함할 수 없습니다.</span><span class="sxs-lookup"><span data-stu-id="e043f-133">The batch text cannot include a USEdatabase statement. 범위 일괄 처리 입력란은 SQL 이 범위 유형으로 선택되어 있는 경우에만 사용할 수 있습니다.The Scope batch box is only available when SQL is selected as a scope type. 범위 유형이 SQL인 경우 범위 일괄 처리 입력란에 아무 것도 입력하지 않으면 일괄 처리 텍스트 값은 입력란의 값과 동일한 값으로 설정됩니다.If nothing is entered in the scope batch box when SQL is the scope type, then the value of the batch text is set to the same value as is in the Statement box.

  7. 범위 스키마 이름 목록에 개체가 포함되는 스키마의 이름을 입력합니다.In the Scope schema name list, enter the name of the schema in which the object is contained. 범위 스키마 이름 입력란은 개체 가 범위 유형으로 선택되어 있는 경우에만 사용할 수 있습니다.The Scope schema name box is only available when Object is selected as a scope type.

  8. 범위 개체 이름 입력란에 Transact-SQLTransact-SQL 문이 나타나는 Transact-SQLTransact-SQL 저장 프로시저의 이름, 사용자 정의 스칼라 함수, 다중 문 테이블 반환 함수 또는 DML 트리거를 입력합니다.In the Scope object name box, enter the name of the Transact-SQLTransact-SQL stored procedure, user-defined scalar function, multistatement table-valued function, or DML trigger in which the Transact-SQLTransact-SQL statement appears. 범위 개체 이름 입력란은 개체 가 범위 유형으로 선택되어 있는 경우에만 사용할 수 있습니다.The Scope object name box is only available when Object is selected as a scope type.

  9. 매개 변수 입력란에 Transact-SQLTransact-SQL 에 포함된 모든 매개 변수의 데이터 형식과 매개 변수 이름을 입력합니다.In the Parameters box, enter the parameter name and data type of all parameters that are embedded in the Transact-SQLTransact-SQL statement.

    매개 변수는 다음 중 하나에 해당하는 경우에만 적용됩니다.Parameters apply only when either of the following is true:

    • 범위 유형이 SQL 또는 TEMPLATE인 경우.The scope type is SQL or TEMPLATE. TEMPLATE일 경우 매개 변수는 NULL일 수 없습니다.If TEMPLATE, parameters must not be NULL.

    • sp_executesql을 사용하여 Transact-SQLTransact-SQL 문이 전송되고 매개 변수에 대한 값이 지정된 경우 또는 SQL ServerSQL Server 에서 문을 매개 변수화한 후에 내부에서 전송하는 경우.The Transact-SQLTransact-SQL statement is submitted by using sp_executesql and a value for the parameter is specified, or SQL ServerSQL Server internally submits a statement after parameterizing it.

  10. 힌트 입력란에 Transact-SQLTransact-SQL 문에 적용되는 쿼리 힌트 또는 쿼리 계획을 입력합니다.In the Hints box, enter the query hints or query plan to be applied to the Transact-SQLTransact-SQL statement. 하나 이상의 쿼리 힌트를 지정하려면 유효한 OPTION 절을 입력합니다.To specify one or more query hints, enter a valid OPTION clause.

  11. 확인을 클릭합니다.Click OK.

plan_guide

T-SQL을 사용하여 계획 지침 만들기 Creat a plan guide using T-SQL

  1. 개체 탐색기에서 데이터베이스 엔진Database Engine인스턴스에 연결합니다.In Object Explorer, connect to an instance of 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.On the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute.

    -- creates a plan guide named Guide1 based on a SQL statement  
    EXEC sp_create_plan_guide   
        @name = N'Guide1',   
        @stmt = N'SELECT TOP 1 *   
                  FROM Sales.SalesOrderHeader   
                  ORDER BY OrderDate DESC',   
        @type = N'SQL',  
        @module_or_batch = NULL,   
        @params = NULL,   
        @hints = N'OPTION (MAXDOP 1)';  
    

    자세한 내용은 sp_create_plan_guide(Transact-SQL)를 참조하세요.For more information, see sp_create_plan_guide (Transact-SQL).