SqlClient를 사용하여 구성 가능한 다시 시도 논리 구성 파일
적용 대상: .NET Framework .NET .NET Standard
안전 스위치를 사용할 때 기본 다시 시도 방법은 SqlConnection 및 SqlCommand 모두에 대해 SqlConfigurableRetryFactory.CreateNoneRetryProvider입니다. 구성 파일을 사용하여 다른 다시 시도 방법을 지정할 수 있습니다.
구성 섹션
구성 파일의 configSections
섹션 내에 다음 섹션을 추가하여 애플리케이션에 대한 기본 다시 시도 논리 옵션을 변경할 수 있습니다.
SqlConfigurableRetryLogicConnection
: SqlConnection에 대한 기본 다시 시도 논리를 지정합니다.
<section name="SqlConfigurableRetryLogicConnection"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
SqlConfigurableRetryLogicCommand
: SqlCommand에 대한 기본 다시 시도 논리를 지정합니다.
<section name="SqlConfigurableRetryLogicCommand"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
AppContextSwitchOverrides
: .NET Framework는 명시적으로 정의하지 않아도 되는 AppContextSwitchOverrides 섹션을 통해 AppContext 스위치를 지원합니다. .NET Core에서 스위치를 활성화하려면 이 섹션을 지정해야 합니다.
<section name="AppContextSwitchOverrides"
type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>
참고 항목
configuration
섹션 내에 다음 구성을 지정해야 합니다. 애플리케이션 구성 파일을 통해 기본 다시 시도 논리를 구성하려면 이러한 새 섹션을 선언하세요.
안전 스위치 사용
참고 항목
Microsoft.Data.SqlClient v4.0부터 구성 가능한 다시 시도 논리 기능을 사용하기 위해 앱 컨텍스트 전환 "Switch.Microsoft.Data.SqlClient.EnableRetryLogic"이 더 이상 필요하지 않습니다. 이 기능은 이제 프로덕션에서 지원됩니다. 이 기능의 기본 동작은 계속해서 비시도 정책으로 유지되며 재시도를 사용하도록 설정하려면 클라이언트 애플리케이션에서 이 정책을 재정의해야 합니다.
구성 파일을 통해 안전 스위치를 사용하도록 설정할 수 있습니다. 애플리케이션 코드를 통해 사용하도록 설정하는 방법을 알아보려면 구성 가능한 다시 시도 논리 사용을 참조하세요.
- .NET Framework: 자세한 내용은 AppContextSwitchOverrides 요소를 참조하세요.
<runtime>
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
- .NET Core: .NET Framework와 같이 세미콜론(;)으로 구분된 여러 개의 스위치를 지원합니다.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
연결 섹션
다음 특성을 사용하여 애플리케이션의 모든 SqlConnection 인스턴스에 대한 기본 다시 시도 논리를 지정할 수 있습니다.
numberOfTries: 시도 횟수를 설정합니다.
deltaTime: 격차 시간 간격을 TimeSpan 개체로 설정합니다.
minTime: 허용되는 최소 격차 시간 간격을 TimeSpan 개체로 설정합니다.
maxTime: 허용되는 최대 격차 시간 간격을 TimeSpan 개체로 설정합니다.
transientErrors: 다시 시도할 일시적인 오류 번호 목록을 설정합니다.
retryMethod: SqlRetryLogicOption 매개 변수를 통해 다시 시도 구성을 수신하고 SqlRetryLogicBaseProvider 개체를 반환하는 다시 시도 메서드 작성자를 지정합니다.
retryLogicType:
retryMethod
를 제공하는 다시 시도 메서드 작성자를 포함하는 사용자 지정 다시 시도 논리 공급자를 설정합니다. 이 메서드는retryMethod
의 조건을 충족해야 합니다. 공급자의 정규화된 형식 이름을 사용해야 합니다. 자세한 내용은 정규화된 형식 이름 지정을 참조하세요.
참고 항목
기본 제공 다시 시도 공급자를 사용하는 경우 retryLogicType
을 지정할 필요는 없습니다. 기본 제공 다시 시도 공급자를 찾으려면 SqlClient의 내부 다시 시도 논리 공급자를 참조하세요.
명령 섹션
애플리케이션의 모든 SqlCommand 인스턴스에 대해 다음 특성을 설정할 수도 있습니다.
- authorizedSqlCondition: 특정 SQL 문을 필터링하기 위해 SqlCommand.CommandText에 대한 사전 다시 시도 정규식을 설정합니다.
참고 항목
정규식은 대/소문자를 구분합니다.
예제
SqlConfigurableRetryFactory.CreateFixedRetryProvider 메서드 및 기본 일시적인 오류 목록을 사용하여 시도 사이에 약 1초의 지연 시간으로 최대 3회 연결을 설정하려고 시도합니다.
<SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" numberOfTries ="3" deltaTime ="00:00:01"/>
SqlConfigurableRetryFactory.CreateExponentialRetryProvider 메서드 및 기본 일시적인 오류 목록을 사용하여 시도 사이에 최대 45초의 지연 시간으로 최대 5회 연결을 설정하려고 시도합니다.
<SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider" numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
SqlConfigurableRetryFactory.CreateIncrementalRetryProvider 메서드 및 기본 일시적인 오류 목록을 사용하여 2~30초의 지연 시간으로 최대 4회 연결을 설정하려고 시도합니다.
<SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
1초에서 1분까지의 지연 시간으로 최대 8회 명령을 실행하려고 시도합니다.
CommandText
에 단어SELECT
를 포함하고 예외 번호 102 또는 997이 있는 명령으로 제한됩니다. 기본 제공 SqlConfigurableRetryFactory.CreateIncrementalRetryProvider 메서드를 사용합니다.<SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00" transientErrors="102, 997" authorizedSqlCondition="\b(SELECT)\b"/>
참고 항목
다음 두 샘플의 경우 SqlClient의 구성 가능한 다시 시도 논리 핵심 API에서 사용자 지정 다시 시도 논리 소스 코드를 찾을 수 있습니다. CreateCustomProvider
메서드가 애플리케이션의 실행 디렉터리에 있는CustomCRL_Doc.CustomRetry
클래스(CustomCRL_Doc.dll
어셈블리 내)에 정의되어 있다고 가정합니다.
3~45초의 지연 시간으로 목록에 오류 번호 4060, 997, 233이 있고 지정된 사용자 지정 다시 시도 공급자를 사용하여 최대 5회 연결을 설정하려고 시도합니다.
<SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" retryMethod ="CreateCustomProvider" numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45" transientErrors ="4060, 997, 233"/>
이 샘플은 이전 샘플과 같이 동작합니다.
<SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc" retryMethod ="CreateCustomProvider" numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45" transientErrors ="4060, 997, 233"/>
참고 항목
다시 시도 논리 공급자는 애플리케이션 수명 동안 나중에 사용할 수 있도록 연결 또는 명령에서 처음 사용할 때 캐시됩니다.
참고 항목
다시 시도 논리 설정에 대한 애플리케이션 구성 파일을 읽을 때 발생하는 오류는 애플리케이션에서 오류를 일으키지 않습니다. SqlConfigurableRetryFactory.CreateNoneRetryProvider 기본값이 대신 사용됩니다.
이벤트 원본 추적을 사용하여 다시 시도 논리 구성과 관련된 문제를 확인하거나 해결할 수 있습니다. 자세한 내용은 SqlClient에서 이벤트 추적 사용을 참조하세요.