> 데이터 베이스 > MySQL 튜토리얼 > EF 6 매개변수 스니핑 성능 문제를 방지하려면 어떻게 해야 합니까?

EF 6 매개변수 스니핑 성능 문제를 방지하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-29 05:31:13
원래의
838명이 탐색했습니다.

How Can I Prevent EF 6 Parameter Sniffing Performance Issues?

EF 6 매개변수 스니핑

EF 6에서 대규모 동적 쿼리로 작업할 때 매개변수 스니핑으로 인해 성능 문제가 발생할 수 있습니다. 이는 매개 변수가 변경된 경우에도 데이터베이스 엔진이 특정 매개 변수 집합이 포함된 쿼리의 실행 계획을 유지하고 이를 후속 실행에 적용할 때 발생합니다.

이 문제를 해결하기 위해 EF 6은 차단 기능을 제공합니다. 이를 통해 SQL 명령을 실행하기 전에 조작할 수 있습니다. 이를 통해 "OPTION RECOMPILE"과 같은 옵션을 명령에 포함할 수 있습니다.

이 기능을 활용하려면 [IDbCommandInterceptor](https://docs.microsoft.com/en-us/dotnet/api)를 구현하십시오. /entityframework/system.data.entity.infrastructure.idbcommandinterceptor?view=ef6) 인터페이스를 재정의하고 [ReaderExecuting](https://docs.microsoft.com/en-us/dotnet/api/entityframework/system.data.entity.infrastructure.idbcommandinterceptor.readerexecuting?view=ef6) 메서드. 이 방법을 사용하면 원하는 쿼리 힌트를 명령에 추가할 수 있습니다.

다음은 쿼리를 선택하기 위해 "OPTION RECOMPILE" 힌트를 추가하는 인터셉터의 구현 예입니다.

public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor
{
    public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        addQueryHint(command);
    }

    private static void addQueryHint(IDbCommand command)
    {
        if (command.CommandType != CommandType.Text || !(command is SqlCommand))
            return;

        if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) &amp;&amp; !command.CommandText.Contains("option(recompile)"))
        {
            command.CommandText = command.CommandText + " option(recompile)";
        }
    }
}
로그인 후 복사

인터셉터를 사용하려면 애플리케이션 시작 부분에 다음 줄을 추가하세요.

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
로그인 후 복사

이렇게 하면 "OPTION RECOMPILE" 힌트가 EF 6을 통해 실행되는 모든 선택 쿼리에 추가되어 매개 변수 스니핑의 영향을 완화합니다.

위 내용은 EF 6 매개변수 스니핑 성능 문제를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿