"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 매개 변수 스니핑이 SQL 저장 프로 시저에 영향을 미치는 방법 성능 및 최적화 방법

매개 변수 스니핑이 SQL 저장 프로 시저에 영향을 미치는 방법 성능 및 최적화 방법

2025-04-19에 게시되었습니다
검색:435

How Can Parameter Sniffing Impact SQL Stored Procedure Performance, and How Can It Be Optimized?

다음과 같은 저장된 절차를 고려하십시오. @mydate datetime = null 처럼 @mydate가 null set @mydate = current_timestamp입니다 -이 시나리오에서 @mydate 를 사용하여 무언가를 수행하십시오. @mydate가 초기 컴파일 중에 null로 전달되면 데이터베이스는이 값의 실행 계획을 최적화합니다. 그러나 다른 입력 값이있는 절차에 대한 후속 호출은 해당 값이 무효화 되더라도 성능이 저하 될 수 있습니다.

CREATE PROCEDURE MyProc
    @MyDate DATETIME = NULL
AS
    IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP
    -- Do Something using @MyDate

매개 변수 스니핑은 몇 가지 부정적인 결과를 가질 수 있습니다 :

절차는 전달 된 입력 값에 따라 크게 다를 수 있으며, 예측할 수없는 실행 시간을 초래할 수 있습니다.
  • 열악한 실행 계획 :
  • 엔진은 실제 데이터에 대한 최적의 데이터에 대한 최적의 비효율적 실행 계획을 생성 할 수 있습니다. 잘못된
  • 언급 된 경우, @mydate에 대해 생성 된 실행 계획은 사용 된 값이 무일하게 불가능했습니다. 이 동작은 비정상적이며 매개 변수 스니핑 문제를 제안합니다.

솔루션 : 매개 변수 스니핑

매개 변수를 비활성화하는 것은 다음과 같이 매개 변수를 사용하여 매개 변수 스니핑을 비활성화하는 것입니다. @mydate datetime = null 처럼 @mydate_copy datetime을 선언합니다 @mydate_copy = @mydate를 설정합니다 @mydate_copy가 null set @mydate_copy = current_timestamp입니다 - @mydate_copy

문제에 대한 통찰력

SQL Server 2005의 기본 문제는 특정 패치 수준에서 매개 변수 스니핑에서 알려진 문제입니다. SQL Server 2008에서는 알 수없는 조항에 대한 최적화는 그러한 문제를 해결하는 데 사용될 수 있습니다.
CREATE PROCEDURE MyProc
    @MyDate DATETIME = NULL
AS
    IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP
    -- Do Something using @MyDate

추가 고려 사항

입력 매개 변수와 함께 저장된 프로 시저를 추가로 향상시킬 때 :

    를 사용하여 queries를 최적화 할 수 있도록 권장됩니다. 효율적으로.
  • 의도하지 않은 최적화 문제를 트리거 할 수 있으므로 널 값을 입력 매개 변수로 사용하지 마십시오.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3