SQL Server の場合、同時接続数の上限は、user connections の設定で指定を行うことができます。
SQL Server では、最大 32,767 の接続をサポートしており、デフォルトが最大数となっています。
SQL Database の場合は、SKU に応じて同時接続数の上限が異なります。
本投稿では、SQL Database の同時接続数の上限についてまとめておきたいと思います。
SQL Database の同時接続数の上限
SQL Database の同時接続数の上限ですが、SKU に応じた「最大同時セッション数」を同時接続数の上限として考えておくとよいのではないでしょうか。
SKU に応じた最大同時セッション数は次の情報から確認することができます。
MARS (Multiple Active Result Set) を使用した場合は、1 接続で複数セッションが利用されるため、最大同時セッション数まで接続できない可能性がありますが、基本的な考え方としては、最大同時セッション数まで接続を確立できると考えてよいかと思います。
最大同時セッション数まで接続が行われている場合、新規接続を行おうとした場合には次のようなメッセージが表示されエラーとなります。
The session limit for the database is 900 and has been reached. For more information, see https://go.microsoft.com/fwlink/?linkid=2323004.
Open" with "0" argument(s): "A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 – 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。)
Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was – [Pre-Login] initialization=15014; handshake=0;
上述のドキュメントには「最大同時ログイン数」も記載されていますが、これは接続数の上限ではなく、同時に実行することができる接続要求数となります。
これについては 同時ログインの最大数 に記載されています。
複数のクライアントで同じ接続文字列を使用している場合、サービスによってそれぞれのログインが認証されます。 10 人のユーザーが同じユーザー名とパスワードを使ってデータベースに同時に接続した場合、10 件の同時ログインが発生します。 この制限は、ログインと認証の期間のみに適用されます。 同じ 10 人のユーザーがデータベースに順番に接続する場合、同時ログインの数が 1 を超えることはありません。
同時に要求することができる接続数が「最大同時ログイン数」となり、実際に接続として確立しておくことができるのが「最大同時セッション数」として考えるとよいのではないでしょうか。
SQL Server ベースのデータベースエンジンの場合、クエリを実行する際にはワーカースレッドを消費し、SQL Database の場合は「大同時 worker 数」が、使用可能なワーカースレッド数の上限となります。
- 最大同時 Worker 数: 同時に実行することができるクエリ数
- 並列クエリが実行可能な場合、並列クエリでは 1 クエリで複数のワーカースレッドが使用されるため、同時に実行することができるクエリ数は最大同時 Worker 数を下回る可能性がある。
- 最大同時ログイン数: 同時に実行することができるログイン要求数
- 最大同時セッション数: 接続数の上限
- MARS が使用される場合は、複数のセッションが使用されるため、最大接続数は最大同時セッション数を下回る可能性がある。
基本的な考え方としてはこのような内容となるのではないでしょうか。