2009. 11. 13. 09:22

성능:: 강제 매개변수화 Forced Parameterization

One of the main benefits of using a stored procedure to execute Transact-SQL code is that once a stored procedure is compiled and executed the first time, the query plan is cached by SQL Server. So the next time the same stored procedure is run (assuming the same connection parameters are used), SQL Server does not have to recompile the stored procedure again, instead reusing the query plan created during the first compilation of the stored procedure.

 

 If the same stored procedure is called over and over again, with the query plan being reused each time, this can help reduce the burden on SQL Server's resources, boosting its overall performance.

 

그러나 application에서 SQL Server로 보내는 쿼리는 동적 쿼리도 존재한다. 이런 쿼리들은 매개 변수화 되지 않아서 재 사용이 이루어 지지 않는다.

 ALTER DATABASE 문에서 PARAMETERIZATION 옵션을 FORCED로 설정하여 강제 매개 변스화를 설정하면 쿼리 컴파일 및 재 컴파일을 빈도를 줄여 특정 데이터베이스의 성능을 향상 시킬 수 있다.

 

이것을 설정하면 SELECT, INSERT, UPDATE, DELETE 문에 표시되는 리터럴 값이 쿼리 컴파일 중 매개변수로 변환된다.

 

다음 구문에 나타나는 리터럴은 예외이다.

 

  • INSERT...EXECUTE 문
  • 저장 프로시저, 트리거 또는 사용자 정의 함수의 본문 안에 있는 문. SQL Server에서는 이미 이러한 루틴에 대해 쿼리 계획을 다시 사용하고 있습니다.
  • 클라이언트측 응용 프로그램에서 이미 매개 변수화된 준비된 문
  • XQuery 메서드 호출이 포함된 문. 이러한 문에서는 WHERE 절과 같이 해당 인수가 일반적으로 매개 변수화되는 컨텍스트에서 메서드가 나타납니다. 해당 인수가 매개 변수화되지 않는 컨텍스트에서 메서드가 나타날 경우에는 문의 나머지 부분이 매개 변수화됩니다.
  • Transact-SQL 커서 내의 문. API 커서 내의 SELECT 문은 매개 변수화됩니다.
  • 사용되지 않는 쿼리 구문
  • ANSI_PADDING 또는 ANSI_NULLS가 OFF로 설정된 컨텍스트에서 실행되는 문
  • SELECT 문의 <select_list>. 하위 쿼리의 SELECT 목록 및 INSERT 문 내의 SELECT 목록이 포함됩니다.
  • IF 문 내에 나타나는 하위 쿼리 SELECT 문
  • 쿼리의 TOP, TABLESAMPLE, HAVING, GROUP BY, ORDER BY, OUTPUT...INTO 또는 FOR XML 절
  • OPENROWSET, OPENQUERY, OPENDATASOURCE, OPENXML 또는 모든 FULLTEXT 연산자에 대한 직접 인수 또는 하위 식으로서의 인수
  • LIKE 절의 pattern 및 escape_character 인수
  • CONVERT 절의 style 인수
  • IDENTITY 절 내의 정수 상수
  • ODBC 확장 구문을 사용하여 지정한 상수
  • +, -, *, / 및 % 연산자의 인수인 상수 폴딩 가능 식. SQL Server에서는 식이 강제 매개 변수화에 적합한지 결정할 때 다음 조건 중 하나가 True이면 상수 폴딩 가능 식으로 간주합니다.
  • 매개 변수화하기에 적합한 리터럴이 2,097개 이상 포함된 문
  • WHERE T.col2 >= @bb와 같은 변수를 참조하는 문
  • RECOMPILE 또는 OPTIMIZE FOR 쿼리 힌트가 포함된 문
  • COMPUTE 절을 포함하는 문
  • WHERE CURRENT OF 절을 포함하는 문


  • [code sql]
    
    ALTER DATABASE FORCED
    
    [/code]
    참고:) http://msdn.microsoft.com/ko-kr/library/ms175037.aspx

    'Peformance Tuning' 카테고리의 다른 글

    read-ahead는 무었인가?  (0) 2009.12.03
    DeadLock 예제,재 실행하기  (0) 2009.11.24
    SQL서버 성능counter  (0) 2009.11.12
    Lock::Trace Flag 1204  (0) 2009.11.10