SQL 저장 프로시저 실행 계획 최적화: 매개변수 스니핑 및 그 영향
SQL 저장 프로시저의 성능은 알려진 현상에 의해 크게 영향을 받을 수 있습니다. 매개변수 스니핑으로. 이는 데이터베이스 엔진이 컴파일 시 제공된 입력 매개 변수 값을 기반으로 저장 프로시저의 실행 계획을 컴파일할 때 발생합니다.
다음 저장 프로시저를 고려하세요.
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDate
여기서 시나리오에서 초기 컴파일 중에 @MyDate가 NULL로 전달되면 데이터베이스는 이 값에 대한 실행 계획을 최적화합니다. 그러나 다른 입력 값을 사용하여 프로시저를 후속 호출하면 해당 값도 NULL인 경우에도 성능이 저하될 수 있습니다.
매개변수 스니핑의 영향
매개변수 스니핑은 여러 가지 부정적인 결과가 발생함:
사례 연구: 매개변수 스니핑이 잘못되었습니다
언급된 경우에는 사용된 값이 NULL인 경우에도 @MyDate에 대해 생성된 실행 계획이 좋지 않았습니다. 이 동작은 일반적이지 않으며 매개변수 스니핑 문제를 암시합니다.
해결책: 매개변수 스니핑 비활성화
한 가지 해결 방법은 다음과 같이 매개변수 변수를 사용하여 매개변수 스니핑을 비활성화하는 것입니다.
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS DECLARE @MyDate_Copy DATETIME SET @MyDate_Copy = @MyDate IF @MyDate_Copy IS NULL SET @MyDate_Copy = CURRENT_TIMESTAMP -- Do Something using @MyDate_Copy
문제
SQL Server 2005의 근본적인 문제는 특정 패치 수준의 매개 변수 스니핑과 관련된 알려진 문제입니다. SQL Server 2008에서는 OPTIMIZE FOR UNKNOWN 절을 사용하여 이러한 문제를 해결할 수 있습니다.
추가 고려 사항
입력 매개 변수가 있는 저장 프로시저를 사용할 때 성능을 더욱 향상하려면, 다음을 수행하는 것이 좋습니다.
위 내용은 매개변수 스니핑은 SQL 저장 프로시저 성능에 어떤 영향을 미칠 수 있으며 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!