Microsoftの接続オプション。Data.SqlClient

Microsoft。Data.SqlClient接続オプションは、ドライバが接続の確立、識別、ルーティング、再試行、プール化の方法を制御します。 接続文字列で、または対応する SqlConnectionStringBuilder プロパティを使用して設定します。

Microsoft Entra ID認証については、Microsoft Entra ID認証を参照してください。 TLSの設定については、「 暗号化および証明書検証」を参照してください。

SqlConnectionStringBuilderでオプションを設定する

接続文字列の断片を連結する代わりに、ビルダーを使用します:

var builder = new SqlConnectionStringBuilder
{
    DataSource = "tcp:sql.example.com,1433",
    InitialCatalog = "Orders",
    IntegratedSecurity = true,
    Encrypt = SqlConnectionEncryptOption.Mandatory,
    ApplicationName = "Orders.Worker",
    ConnectTimeout = 30,
    ConnectRetryCount = 3,
    ConnectRetryInterval = 10,
    MultiSubnetFailover = true,
};

このコードはビルダーの物件名を使用しています。 これらの表では、接続文字列の一般的な表記を使用しています。 ドライバーはまた、記録された偽名も受け入れています。

タイムアウトの選択肢

キーワード Default Behavior バージョン
Connect Timeout 15 秒 つながりを築くまでの時間を制限します。 プールが Max Pool Sizeにある場合、利用可能なプール接続の待ち時間も制限されます。 Connection TimeoutTimeout はエイリアスです。 Microsoft.Data.SqlClient のすべてのバージョン
Command Timeout 30 秒 接続に関連するコマンドのデフォルトのタイムアウトを設定します。 ある操作が異なる制限を必要とする場合、コマンドで CommandTimeout を設定しましょう。 0の値は期限がなく、仕事を無期限に待たせることもあります。 Microsoft。Data.SqlClient 2.1以降のバージョン

接続タイムアウトとコマンドタイムアウトは異なる作業を測定します。 Connect Timeout クエリの実行を制限しません。 Command Timeout 認証やプーリング接続の待ち時間を制限しません。

CancellationTokenは両方の設定とは別です。 呼び出し元がタイムアウトが切れる前に待つ必要がないように、 OpenAsync、コマンド実行、リーダー各メソッドに渡します。

ワークロードの識別とルーティングオプション

キーワード Default Behavior バージョン
Application Name プロバイダー定義名 SQL Serverセッション、監査、診断におけるワークロードを特定します。 デプロイされた各ワークロードには、安定したカーディナリティの低い名前を 1 つ使用します。 Microsoft.Data.SqlClient のすべてのバージョン
Application Intent ReadWrite ReadOnly は、ターゲットと可用性グループがそのために構成されている場合に、読み取りインテント ルーティングを要求します。 SQL文を読み取り専用にはしません。 Microsoft.Data.SqlClient のすべてのバージョン

Application Intent=ReadOnly 通常は、可用性グループのリスナーや読み取りルーティングをサポートするサービスエンドポイントとペアリングされます。 「 高可用性」および「災害復旧」を参照してください。

ネットワークおよびパケットオプション

キーワード Default Behavior バージョン
Packet Size 8,000バイト 表状データストリーム(TDS)ネットワークパケットのサイズを設定します。 対応する値は512バイトから32,768バイトまでです。 ワークロードの測定やサーバー構成の変更が正当化されない限り、デフォルトは維持してください。 Microsoft.Data.SqlClient のすべてのバージョン
MultiSubnetFailover false マルチアドレスエンドポイントに対して返されるIPアドレスへの並列TCP接続試みを使用します。 Azure SQLエンドポイント、可用性グループのリスナー、TCP経由でアクセス可能なフェイルオーバークラスタインスタンスに対してtrueに設定してください。 Microsoft.Data.SqlClient のすべてのバージョン

MultiSubnetFailover=true 名前付きインスタンス、非TCPプロトコル、データベースミラーリング、または64以上のIPアドレスを持つエンドポイントではサポートされていません。 単一IPのTCPエンドポイントには安全です。

Microsoft。Data.SqlClient 7.0には、すべての接続がMultiSubnetFailover=trueのように振る舞うプロセス全体のAppContextスイッチも搭載されています。 そのスイッチが有効でないと接続文字列のデフォルトはfalseのままです。 SqlClientのAppContextスイッチを参照してください。

プーリングオプション

キーワード Default Behavior バージョン
Pooling true 物理接続を再利用して接続構成を合わせます。 無効にするのは、診断時、または安全にプール運用できないことが確認されているワークロードの場合に限ってください。 Microsoft.Data.SqlClient のすべてのバージョン
Min Pool Size 0 プールが作成された後も、少なくともこの数の物理接続をプール内に保持できます。 正の価値はプールやプロセスが終了するまでデータベースセッションを開いたままにすることができます。 Microsoft.Data.SqlClient のすべてのバージョン
Max Pool Size 100 物理的な接続を一つのプールに制限します。 リクエストはプールが満杯になると最大 Connect Timeout まで待ちます。 Microsoft.Data.SqlClient のすべてのバージョン
Load Balance Timeout 0 接続がプールに戻った際に、その年数がこの値を超える場合は破棄します。 Connection Lifetime はエイリアスです。 0 年齢に基づく削除を無効にします。 Microsoft.Data.SqlClient のすべてのバージョン
Pool Blocking Period Auto プールがキャッシュされたログイン失敗の例外を一時的に再スローするかどうかを制御します。 Auto認識されたAzure SQLエンドポイントのブロッキング期間を無効にし、他のエンドポイントで有効化します。 Microsoft.Data.SqlClient のすべてのバージョン
Enlist true アンビエント System.Transactions トランザクションに自動的に開いている接続を登録します。 Microsoft.Data.SqlClient のすべてのバージョン

プール設定はプロセス全体やデータベースサーバー全体ではなく、それぞれ異なるプールに適用されます。 Max Pool Sizeを提出する前に、接続とリーダーが迅速に処分されていること、そしてデータベースがすべてのアプリケーションインスタンスで結果の合計を受け入れられるかを確認してください。

プールキー、トークン挙動、ブロッキング期間、クリア、診断については、SQL Server接続プーリングを参照してください。

接続復旧オプション

キーワード Default Behavior バージョン
Connect Retry Count 1 初期接続時の一時的な故障の適格化および停止したアイドル接続の復旧のための再試行回数を設定します。 認識されたAzure SQLエンドポイントには2、認識されたAzure Synapseおよびオンデマンドエンドポイントには5のデフォルトが実質的に適用されます。 0 これらの再試行を無効にします。 Microsoft.Data.SqlClient のすべてのバージョン
Connect Retry Interval 10 秒 その後の初回接続またはアイドル状態からの復旧の試行前の遅延を設定します。 有効な時間は1秒から60秒までです。 Microsoft.Data.SqlClient のすべてのバージョン

接続復旧時の最初のリトライは即座に行われます。 Connect Retry Interval 後の試みの前に適用されます。 1回の操作で内蔵の初期オープンリトライを回避するには、 OpenWithoutRetryのオープンオーバーロードを使用します。

これらのキーワードは、実行中に失敗したコマンドをリトライしません。 カスタムのオープンポリシーやコマンドポリシーには 設定可能なリトライロジ ックを使いましょう。 リトライコマンドは効果を安全に繰り返した場合のみ行います。

サーバー識別と証明書のオプション

これらのオプションは、特定の証明書やKerberosの命名要件を満たします。 通常の認証や証明書検証の代わりにはなりません。

キーワード Default Behavior バージョン
Host Name In Certificate サーバーホスト名 接続が証明書と異なるDNSエイリアスを使用する場合、期待される共通名(CN)または主体代替名(SAN)を提供します。 Microsoft。Data.SqlClient 5.0以降のバージョン
Server Certificate PEM、DER、またはCERファイルを提供し、 Encrypt=Mandatory または Encrypt=Strict時にサーバー証明書と正確に一致しなければなりません。 Microsoft。Data.SqlClient 5.1以降のバージョン
Server SPN サーバー名に由来します プライマリサーバーへの統合認証に使用されるサービスプリンシパル名(SPN)を上書きします。 デプロイされたKerberosの命名に明示的なSPNが必要な場合にのみ設定してください。 Microsoft。Data.SqlClient 5.0以降のバージョン
Failover Partner SPN フェイルオーバーパートナーから派生 データベースミラーリングフェイルオーバーパートナーのSPNを上書きします。 データベースミラーリングは廃止されています。 新規展開には可用性グループを活用しましょう。 Microsoft。Data.SqlClient 5.0以降のバージョン

Host Name In Certificate 証明書マッチングに使用される名前を変更すること。 信用できない発行者を信用しません。 Server Certificate 証明書ファイルを正確にピン留めし、その証明書がローテーションされる際にアプリケーションの更新を要求します。

誤ったSPNオーバーライドはKerberos認証を妨げたり、意図された本人確認を弱めたりする可能性があります。 可能であれば、オーバーライドを設定する代わりにDNSとSPNの登録を修正しましょう。

接続紐は小さく保ちましょう。 どの動作を変えるか、そしてワークロードがその動作をどのように検証するかを指定できる場合にのみオプションを追加してください。

オプションの変更点をレビュー

本番環境でオプションを変更する前に:

  1. 現在の接続文字列、ドライバーのバージョン、エンドポイントタイプ、そして観察された問題を記録します。
  2. 一度に一つの行動を変えましょう。
  3. 接続確立、認証、証明書検証、プーリング、フェイルオーバー、キャンセル、クエリ実行のテストを行います。
  4. ハード接続数、プール待ち時間、接続レイテンシ、エラー数を測定してください。
  5. すべてのデプロイ済みインスタンスで設定を確認してください。

接続文字列はプールキーの一部です。 段階的な展開では、旧プールと新旧プールの両方を一時的に作成できるため、物理的なデータベース接続数が増加します。