Azure SQL Database および Azure SQL Managed Instance の接続に関する問題とその他のエラーのトラブルシューティング

適用対象:Azure SQL データベースAzure SQL Managed Instance

Azure SQL Database または Azure SQL Managed Instance への接続に失敗すると、エラー メッセージが表示されます。 これらの接続の問題は、再構成、ファイアウォールの設定、接続のタイムアウト、正しくないログイン情報、またはアプリケーション設計プロセスの間にベスト プラクティスと設計ガイドラインが適用されなかったことが原因で発生する可能性があります。 また、一部の Azure SQL Database または SQL Managed Instance リソースの上限に達した場合、これ以上接続できなくなります。

注意

Azure SQL 接続チェック ツールを使うと、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics 環境でのさまざまな接続エラーを検出して修正できます。

一時的な障害のエラー メッセージ (40197、40613、その他)

Azure インフラストラクチャには、SQL Database サービス内で負荷の大きいワークロードが生じた場合に、サーバーを動的に再構成する機能があります。 この動的な動作によって、クライアント プログラムがデータベースやインスタンスへの接続を失うことがあります。 この種のエラーは、 「一時的な障害」 と呼ばれます。 データベースの再構成イベントは、計画されたイベント (ソフトウェアのアップグレードなど) または計画されていないイベント (プロセスのクラッシュ、負荷分散など) が原因で発生します。 通常、ほとんどの再構成イベントは一時的であり、長くて 1 分もかかりませんが、 これらのイベントは、大規模なトランザクションによる実行時間の長い復旧など、場合によっては、完了に時間がかかることがあります。 次の表に、Azure SQL Database に接続するときにアプリケーションが受け取る可能性のあるさまざまな一時的エラーの一覧を示します。

一時的な障害のエラー コードの一覧

エラー コード 重大度 説明
926 14 データベース 'replicatedmaster' を開くことができません。 このデータベースは、復旧により問題ありと設定されています。 詳細については、SQL Server のエラー ログを参照してください。

このエラーは、以前のプライマリによってログがシャットダウンされている間に、再構成の最終段階の短期間に SQL Managed Instance のエラー ログに記録されることがあります。
このエラー メッセージを含むその他の一時的ではないシナリオについては、MSSQL エラーのドキュメントを参照してください。
4060 16 このログインで要求されたデータベース "%.*ls" を開けません。 ログインに失敗しました。 詳細については、エラー 4000 から 4999 を参照してください。
40197 17 要求の処理中にサービスでエラーが発生しました。 再試行してください。 エラー コード %d。

ソフトウェアやハードウェアのアップグレード、ハードウェアの障害、その他フェールオーバーに関する問題によってサービスがダウンしたときに、このエラーが発生します。 障害の種類や発生したフェールオーバーに関する詳細な情報は、エラー 40197 のメッセージに埋め込まれたエラー コード (%d) から得られます。 エラー 40197 のメッセージ内に埋め込まれているエラー コードは、40020、40143、40166、40540 などです。

再接続すると、自動的にデータベースの正常なコピーに接続されます。 アプリケーションでエラー 40197 をキャッチし、メッセージに埋め込まれているエラー コード (%d) をログに記録してトラブルシューティングに備えたうえで、リソースが復旧して接続が再度確立されるまで SQL Database への再接続を試みる必要があります。 詳細については、「一時エラー」を参照してください。
40501 20 サービスは現在ビジー状態です。 10 秒後に要求を再試行してください。 インシデント ID: %ls。 コード: %d。 詳細については、次を参照してください。
論理 SQL サーバー リソースの制限
単一データベースに関する DTU ベースの制限
エラスティック プールに関する DTU ベースの制限
単一データベースに関する仮想コアベースの制限
エラスティック プールに関する仮想コアベースの制限
Azure SQL Managed Instance のリソースの制限
40613 17 サーバー '%.*ls' 上のデータベース '%.*ls' は、現在使用できません。 後で接続を再試行してください。 問題が解決しない場合は、カスタマー サポートに問い合わせて、セッション トレース ID '%.*ls' を伝えます。

このエラーは、データベースに対して専用管理者接続 (DAC) が既に確立されている場合に発生する可能性があります。 詳細については、「一時エラー」を参照してください。
49918 16 要求を処理できません。 要求を処理するリソースが十分ではありません。

サービスは現在ビジー状態です。 後で要求を再試行してください。 詳細については、次を参照してください。
論理 SQL サーバー リソースの制限
単一データベースに関する DTU ベースの制限
エラスティック プールに関する DTU ベースの制限
単一データベースに関する仮想コアベースの制限
エラスティック プールに関する仮想コアベースの制限
Azure SQL Managed Instance のリソースの制限
49919 16 要求を処理、作成、更新できません。 サブスクリプション "%ld" に対して進行中の作成または更新操作が多すぎます。

サービスが、サブスクリプションまたはサーバーに対する複数の作成または更新要求の処理でビジ―状態です。 現在、要求はリソースの最適化のためにブロックされています。 クエリ sys.dm_operation_status を実行して保留中の操作を確認します。 保留中の作成要求または更新要求が完了するまで待つか、いずれかの保留中の要求を削除して後で要求を再試行します。 操作が停止し、反応しなくなったように見える場合、他の進行中の操作が完了するまで待つか、可能な場合は取り消します。 たとえば、作成中のデータベースまたはレプリカを削除することでデータベース コピーまたは geo レプリカをキャンセルできることがあります。 明らかに動かなくなった操作をキャンセルできない場合、Microsoft のサポート チケットを使用してください
49920 16 要求を処理できません。 サブスクリプション "%ld" に対して進行中の操作が多すぎます。

サービスが、このサブスクリプションに対する複数の要求の処理でビジー状態です。 現在、要求はリソースの最適化のためにブロックされています。 クエリ sys.dm_operation_status を実行して操作の状態を確認します。 保留中の要求が完了するまで待つか、いずれかの保留中の要求を削除して後で要求を再試行します。 操作が停止し、反応しなくなったように見える場合、他の進行中の操作が完了するまで待つか、可能な場合は取り消します。 たとえば、作成中のデータベースまたはレプリカを削除することでデータベース コピーまたは geo レプリカをキャンセルできることがあります。 明らかに動かなくなった操作をキャンセルできない場合、Microsoft のサポート チケットを使用してください
4221 16 'HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING' を長時間待機しているため、read-secondary へのログインに失敗しました。 レプリカのリサイクル時に実行中だったトランザクションに行のバージョンがないため、レプリカはログインに使用できません。 この問題を解決するには、プライマリ レプリカのアクティブ トランザクションをロール バックするか、コミットします。 プライマリ上の長い書き込みトランザクションを避けることでこの状態が発生することを最小限に抑えられます。
615 21 データベース ID %d、名前 '%.*ls' が見つかりませんでした。 エラー コード: 615。
つまり、メモリ内キャッシュは SQL サーバー インスタンスと同期せず、古いデータベース ID が取得されます。

SQL ログインでは、メモリ内キャッシュを使用して、ID マッピングへのデータベース名を取得します。 キャッシュはバックエンド データベースと同期し、SQL サーバー インスタンスに対してデータベースのアタッチとデタッチが行われるたびに更新する必要があります。
このエラーは、デタッチ ワークフローが時間内にメモリ内キャッシュのクリーンアップに失敗し、データベースへの後続の参照が古いデータベース ID を指す場合に発生します。

リソースが使用可能になり接続が再確立されるまで、SQL データベースへの再接続を試してください。 詳細については、「一時エラー」を参照してください。

一時的な接続の問題を解決する手順

  1. アプリケーションによって報告されたエラーで発生している既知の障害については、 Microsoft Azure サービス ダッシュボード を参照してください。
  2. Azure SQL Database など、クラウド サービスに接続するアプリケーションは、定期的な再構成イベントを想定し、アプリケーション エラーをユーザーに示すのではなく、再試行ロジックを実装してこれらのエラーを処理します。
  3. データベースがリソースの制限に近づくと、一時的な接続の問題に見える場合があります。 リソース制限に関するページを参照してください。
  4. 接続の問題が解消されない場合、アプリケーションでのエラーの継続時間が 60 秒を超えた場合、または 1 日にエラーが複数回発生した場合は、 Azure サポート サイトの [サポートの要求] を選択して、サポート要求を送信してください。

再試行ロジックの実装

クライアント プログラムに再試行ロジックを含めて、一時障害に自動的に修復する時間を与えた後、接続の再確立を試行できるようにすることをお勧めします。 最初に再試行する前に、5 秒間待つことをお勧めします。 5 秒未満で再試行すると、クラウド サービスに過度の負荷がかかるおそれがあります。 再試行するたびに、待ち時間を比例して、最大 60 秒まで長くする必要があります。

再試行ロジックのコード例については、以下のページを参照してください。

アプリケーションでの一時的エラーの処理の詳細については、「SQL Database への一時的な接続エラーのトラブルシューティング」をご覧ください

ADO.NET を使用するクライアントのブロック期間については、「接続プール (ADO.NET)」をご覧ください。

この問題は、アプリケーションでサーバーに接続できない場合に発生します。

この問題を解決するには、「一般的な接続に関する問題を修正するための手順」セクションの手順を (示されている順に) 試してください。

サーバー/インスタンスが見つからなかったか、アクセスできませんでした (エラー 26、40、10053)

エラー 26:指定されたサーバーの位置を特定しているときにエラーが発生しました

System.Data.SqlClient.SqlException: 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: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)

エラー 40:サーバーへの接続を開けませんでした

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: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

エラー 10053:サーバーから結果を受信しているときに、トランスポート レベルのエラーが発生しました

10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)

これらの問題は、アプリケーションでサーバーに接続できない場合に発生します。

これらの問題を解決するには、「一般的な接続に関する問題を修正するための手順」セクションの手順を (示されている順に) 試してください。

ファイアウォールの問題のため、サーバーに接続できません

エラー 40615: < servername > に接続できません

この問題を解決するには、Azure portal 経由で SQL Database のファイアウォール設定を構成します

エラー 5: < servername > に接続できません

この問題を解決するには、クライアントとインターネット間のすべてのファイアウォールで、送信接続用にポート 1433 が開いていることを確認します。

サーバーにログインできません (エラー 18456、40531)

ユーザー '< User name >' はログインできませんでした

Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)

この問題を解決するには、サービス管理者に連絡し、有効なユーザー名とパスワードを提供するよう依頼してください。

通常、サービス管理者は、次の手順を使用してログイン資格情報を追加します。

  1. SQL Server Management Studio (SSMS) を使用して、サーバーにログインします。

  2. master データベースで次の SQL クエリを実行して、ログイン名が無効になっているかどうかを確認します。

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. 対応する名前が無効になっている場合は、次のステートメントを使用して有効にします。

    ALTER LOGIN <User name> ENABLE;
    
  4. SQL ログイン ユーザー名が存在しない場合は、次の SQL クエリを編集して実行し、新しい SQL ログインを作成します。

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. SSMS オブジェクト エクスプローラーで、 [データベース] を展開します。

  6. ユーザーにアクセス許可を付与するデータベースを選択します。

  7. [セキュリティ] を右クリックし、 [New](新規)[ユーザー] を選択します。

  8. 生成されたプレースホルダーを含むスクリプト (以下はサンプル) で、こちらに記載された手順に従ってテンプレート パラメーターを置き換え、実行します。

    CREATE USER [<user_name, sysname, user_name>]
    FOR LOGIN [<login_name, sysname, login_name>]
    WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>];
    GO
    
    -- Add user to the database owner role
    EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>';
    GO
    

    sp_addrolemember を使用して、特定のユーザーを特定のデータベース ロールにマップすることもできます。

    Note

    Azure SQL Database では、データベース ロールのメンバーシップを管理するために、より新しい ALTER ROLE 構文を検討してください。

詳細については、Azure SQL Database でのデータベースとログインの管理に関するページを参照してください。

接続のタイムアウト エラー

System.Data.SqlClient.SqlException (0x80131904):接続がタイムアウトしました

System.Data.SqlClient.SqlException (0x80131904): 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=3; handshake=29995;

System.Data.SqlClient.SqlException (0x80131904):タイムアウトに達しました

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.Entity.Core.EntityException:基になるプロバイダーがオープンで失敗しました

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out

< server name > に接続できません

Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out

これらの例外は、接続またはクエリの問題が原因で発生する可能性があります。 このエラーが接続の問題によって発生したことを確認する場合は、「エラーの原因が接続の問題かどうかを確認する」を参照してください。

接続のタイムアウトは、アプリケーションでサーバーに接続できないために発生します。 この問題を解決するには、「一般的な接続に関する問題を修正するための手順」セクションの手順を (示されている順に) 試してください。

ネットワーク接続終了エラー

SQL クライアント ライブラリは、TCP ネットワーク プロトコルを使用して、Azure SQL Database と Azure SQL Managed Instance に接続されます。 クライアント ライブラリでは、TCP プロバイダーと呼ばれる下位レベルのコンポーネントを使用して、TCP 接続を管理します。 リモート ホストで既存の TCP 接続が予期せず終了したことが TCP プロバイダーで検出されると、クライアント ライブラリでエラーが発生します。 そのエラーはクライアントのエラーであり、SQL サーバーのエラーではないため、SQL エラー番号は含まれません。 代わりに、エラー番号は 0 で、TCP プロバイダーからのエラー メッセージが使用されます。

例として、次のようなネットワーク接続終了エラーが挙げられます。

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) An existing connection was forcibly closed by the remote host

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

データベースまたはエラスティック プールが一時的に使用できないことが原因で、接続終了エラーが発生することがあります。 また、ファイアウォール、ネットワーク アプライアンスなど、データベース サーバーとクライアント アプリケーションの間のネットワーク インフラストラクチャのさまざまな問題が原因で発生することもあります。これらの問題は、一時的である場合もあれば、永続的である場合もあります。 一般的なガイダンスとして、アプリケーションでは、それらを永続的なエラーと見なす前に、そのようなエラーに対して固定された数の再試行回数を使用することをお勧めします。

リソース ガバナンス エラー

Azure SQL Database では、Resource Governor に基づくリソース ガバナンスの実装を使用して、リソース制限を適用します。 Azure SQL Database でのリソース管理について詳細を確認してください。

最初に、最も一般的なリソース ガバナンスのエラーを、詳細と共に列挙します。それに続いて、リソース ガバナンスのエラー メッセージの表を示します。

エラー 10928 と 10936: リソース ID : 1。 [データベースまたはエラスティック プール] の要求制限 %d に達しました

データベース レベルの制限に達すると、この場合の詳細なエラー メッセージは次のようになります。Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.

エラスティック プールの制限に達すると、この場合の詳細なエラー メッセージは次のようになります。Resource ID : 1. The request limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance. エラスティック プールの制限はデータベースの制限より高くなっています。詳しくは、「リソース制限」を参照してください。 これらは、プール内の複数のデータベースでリソース (ワーカーなど) が同時に使用される場合に到達する可能性があります。

このエラー メッセージは、データベースまたはエラスティック プールのワーカーの制限に達したことを示しています。 プレースホルダー %d の代わりに、データベースまたはエラスティック プールのサービス目標の最大同時実行ワーカー数の値が示されます。

注意

初期の Azure SQL Database では、シングル スレッド クエリのみがサポートされていました。 そのときは、要求の数は常にワーカーの数と同じでした。 Azure SQL Database のエラー メッセージ 10928 と 10936 には、下位互換性のために "要求制限 [...] が N に達しました" という表現が含まれています。 制限に達したのは、実際にはワーカーの数です。 並列処理の最大限度 (MAXDOP) の設定が 0 または 1 より大きい場合、ワーカーの数は要求の数よりもはるかに多くなり、MAXDOP が 1 の場合よりもはるかに早く制限に達する可能性があります。

セッション、ワーカー、要求の詳細を確認してください。

必要な場合は専用管理者接続 (DAC) で接続する

ワーカーの制限に近づいているか、到達したライブ インシデントが進行中の場合は、SQL Server Management Studio (SSMS) または Azure Data Studio を使用して接続するときにエラー 10928 が表示される可能性があります。 ワーカーの最大しきい値に達した場合でも、データベース管理者用の診断接続 (DAC) を使用して 1 つのセッションで接続できます。

SSMS から DAC との接続を確立するには:

  • メニューから [ファイル] > [新規] > [データベース エンジン クエリ] の順に選択します
  • 接続のダイアログ ボックスの [サーバー名] フィールドに、「admin:<fully_qualified_server_name>」と入力します (これは admin:servername.database.windows.net のようになります)。
  • [オプション >>] を選択します
  • [接続プロパティ] タブを選択します
  • [データベースへの接続:] ボックスに、データベースの名前を入力します
  • [接続] を選択します。

エラー 40613、Database '%.&#x2a;ls' on server '%.&#x2a;ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.&#x2a;ls'、が表示される場合、これは、既に別のセッションが DAC に接続されていることを示している可能性があります。 1 つのデータベースまたはエラスティック プールのための DAC に一度に接続できるセッションは 1 つだけです。

[接続] の選択後に "サーバーに接続できませんでした" というエラーが発生したとしても、バージョンが 18.9 より前の SSMS を使用している場合は、DAC セッションが正常に確立されている可能性があります。 初期バージョンの SSMS では、DAC への接続に Intellisense を提供しようとしていました。 DAC でサポートしているのは 1 つのワーカーのみで、Intellisense には別のワーカーが必要なため、これは失敗しました。

オブジェクト エクスプローラーで DAC 接続を使用することはできません。

max_worker_percent の使用状況を確認する

データベースのリソース消費量統計を 14 日間分見つけるには、sys.resource_stats システム カタログ ビューに対してクエリを実行します。 max_worker_percent 列には、データベースのワーカーの制限に関連して、使用されているワーカーの割合が示されます。 論理サーバー上の master データベースに接続し、sys.resource_stats に対してクエリを実行します。

SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent 
FROM sys.resource_stats;

sys.dm_db_resource_stats 動的管理ビューから、過去 1 時間のリソース消費量統計のクエリを実行することもできます。 データベースに直接アクセスして sys.dm_db_resource_stats のクエリを実行します。

SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;

可能な場合はワーカーの使用量を削減する

ブロッキング チェーンにより、データベース内のワーカーの数が急激に増加する場合があります。 同時並列クエリが大量にあると、多数のワーカーを発生させる可能性があります。 並列処理の最大限度 (MAXDOP) を増やしたり、MAXDOP を 0 に設定したりすると、アクティブなワーカーの数が増加する可能性があります。

以下の手順に従って、ワーカー数が不十分であることによるインシデントをトリアージします。

  1. ブロッキングが発生しているか、大量の同時実行ワーカーを識別できるかを調査します。 次のクエリを実行して現在の要求を調べ、データベースがエラー 10928 を返しているときにブロッキングがないか調べます。 クエリを実行するには、専用管理者接続 (DAC) に接続する必要がある場合があります。

    SELECT
        r.session_id, r.request_id, r.blocking_session_id, r.start_time, 
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        (SELECT COUNT(*) 
            FROM sys.dm_os_tasks AS t 
            WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1;
    GO
    
    1. ブロックされているセッションを識別するため、blocking_session_id が含まれる行を探します。 一覧でそれぞれの blocking_session_id を探し、そのセッションもブロックされているかどうかを判断します。 こうして最終的に、ヘッド ブロッカーに至ります。 ヘッド ブロッカー クエリを調整します。

      Note

      実行時間の長いまたはブロックしているクエリのトラブルシューティングの詳細については、「Azure SQL Database のブロックの問題の概要と解決策」を参照してください。

    2. 大量の同時実行ワーカーを識別するには、要求全体の数と、各要求の worker_count 列を確認します。 Worker_count はサンプリングされた時点でのワーカーの数であり、要求が実行されるにつれて時間の経過とともに変化する可能性があります。 ワーカー増加の原因が、最適な程度の並列処理で実行されている同時実行クエリである場合は、リソースの使用率を下げるためにクエリを調整します。 詳しくは、「クエリの調整とヒント」をご覧ください。

  2. データベースの並列処理の最大限度 (MAXDOP) 設定を評価します。

ワーカーの最大数を増やす

ブロッキングへの対処、クエリの最適化、MAXDOP 設定の検証を行っているにもかかわらず、データベースまたはエラスティック プールのワーカー数が絶えず制限に達する場合は、データベースまたはエラスティック プールをスケールアップし、ワーカーの最大数を増やすことを検討してください。

サービス レベルとコンピューティング サイズごとに、Azure SQL Database のリソース制限を確認してください。

Azure SQL Database でのワーカーのリソース ガバナンスに関する詳細を確認してください。

エラー 10929:リソース ID:1

10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.

エラー 40501:サービスは現在ビジー状態です

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

これは、リソースの制限を超えていることを示すエンジン調整エラーです。

リソース制限の詳細については、論理 SQL サーバーのリソース制限に関するページをご覧ください。

エラー 40544:データベースのサイズ クォータに達しました

40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.

このエラーは、データベースのサイズ クォータに達したときに発生します。

以下の手順は、問題を回避したり、より多くのオプションを提供したりするのに役立つ場合があります。

  1. Azure portal のダッシュボードを使用して、データベースの現在のサイズを確認します。

    Note

    最も多くの領域を消費しているため、クリーンアップの候補となるテーブルを特定するには、次の SQL クエリを実行します。

    SELECT o.name,
     SUM(p.row_count) AS 'Row Count',
     SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
    FROM sys.objects o
    JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id
    GROUP BY o.name
    ORDER BY [Table Size (MB)] DESC;
    GO
    
  2. 現在のサイズが、使用しているエディションでサポートされている最大サイズを超えていない場合は、ALTER DATABASE を使用して MAXSIZE の設定を増やすことができます。

  3. データベースが、使用しているエディションでサポートされている最大サイズを既に超えている場合は、次の 1 つまたは複数の手順を試してください。

    • 通常のデータベース クリーンアップ アクティビティを実行します。 たとえば、truncate/delete を使用して不要なデータをクリーンアップしたり、SQL Server Integration Services (SSIS) または一括コピー プログラム (bcp) ユーティリティを使用してデータを移動したりします。
    • データをパーティション分割するか、データを削除するか、インデックスを削除してください。その他の解決方法についてはドキュメントを参照してください。
    • データベースのスケーリングについては、単一データベースのリソースのスケーリングに関する記事と、エラスティック プールのリソースのスケーリングに関する記事を参照してください。

エラー 40549:トランザクションが長時間実行されているため、セッションを終了しました

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

このエラー メッセージが繰り返し表示される場合は、これらの手順に従って問題を解決してみてください。

  1. 次のクエリを実行して、開いているセッションのうち、duration_ms 列の値が高いものをすべて表示します。

    SELECT
        r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, 
        r.session_id, r.request_id, r.blocking_session_id,  
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1
    ORDER BY start_time ASC;
    GO
    

    input_buffer 列に sys.fn_MSxe_read_event_stream から読み取るクエリが表示される行は、無視することもできます。これらの要求は、拡張イベント セッションに関連しています。

  2. blocking_session_id 列を調べて、ブロッキングが実行時間の長いトランザクションの原因となっているかどうかを確認します。

    Note

    Azure SQL Database におけるブロッキングのトラブルシューティングの詳細については、「Azure SQL Database のブロックの問題の概要と解決策」を参照してください。

  3. クエリをバッチ処理することを検討してください。 バッチ処理については、「バッチ処理を使用して SQL Database アプリケーションのパフォーマンスを強化する方法」を参照してください。

エラー 40551: tempdb の使用量が多すぎるため、セッションを終了しました

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

この問題を回避するには、次の手順に従ってください。

  1. クエリを変更して、一時テーブル領域の使用量を減らします。
  2. 不要になった一時オブジェクトを削除します。
  3. テーブルを切り捨てるか、使用されていないテーブルを削除します。

エラー 40552:トランザクション ログの使用領域が多すぎるため、セッションを終了しました

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

この問題を解決するには、次の方法を試してください。

  • この問題は、挿入、更新、または削除の各操作が原因で発生する可能性があります。 バッチ処理を実装したり、複数の小さなトランザクションに分割したりして、すぐに操作される行の数を減らしてみてください。
  • この問題は、インデックスの再構築操作によって発生する可能性があります。 この問題を回避するには、テーブルで影響を受ける行の数 * (更新されるフィールドの平均サイズ (バイト単位) + 80) < 2 ギガバイト (GB) であることを確認します。
  • インデックスの再構築の場合は、更新されるフィールドの平均サイズを、平均インデックス サイズに置き換える必要があります。
  • 詳細については、「 Azure SQL Database でのフル トランザクション ログのトラブルシューティング」と「Azure SQL Managed Instance でのフル トランザクション ログのトラブルシューティング」を参照してください。

エラー 40553:メモリの使用量が多すぎるため、セッションを終了しました

40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

この問題を回避するには、クエリを最適化してみてください。

詳細なトラブルシューティング手順については、「クラウドでクエリが正常に実行されているか」を参照してください。

他のメモリ不足エラーおよびサンプル クエリについて詳しくは、「Azure SQL Database によるメモリ不足エラーのトラブルシューティング」を参照してください。

リソース ガバナンスのエラー メッセージの表

エラー コード 重大度 説明
10928 20 リソース ID: %d。 データベースの %s 制限の %d に達しました。 詳細については、"http://go.microsoft.com/fwlink/?LinkId=267637" を参照してください。

リソース ID は、制限に達したリソースを示します。 リソース ID = 1 の場合、これはワーカーの制限に達したことを示しています。 「エラー 10928: リソース ID: 1。データベースの要求制限 %d に達しました」で詳細を確認してください。リソース ID = 2 の場合、これはセッションの制限に達したことを示しています。

リソース制限のその他については、次を参照してください。
論理 SQL サーバー リソースの制限
単一データベースに関する DTU ベースの制限
単一データベースに関する仮想コアベースの制限
Azure SQL Managed Instance のリソースの制限
10936 20 リソース ID: %d。 エラスティック プールの %s 制限の %d に達しました。 詳細については、"http://go.microsoft.com/fwlink/?LinkId=267637" を参照してください。

リソース ID は、制限に達したリソースを示します。 リソース ID = 1 の場合、これはワーカーの制限に達したことを示しています。 「エラー 10936: リソース ID: 1。エラスティック プールの要求制限 %d に達しました」で詳細を確認してください。 リソース ID = 2 の場合、これはセッションの制限に達したことを示しています。

リソース制限のその他については、次を参照してください。
論理 SQL サーバー リソースの制限
エラスティック プールに関する DTU ベースの制限
エラスティック プールに関する仮想コアベースの制限
Azure SQL Managed Instance のリソースの制限
10929 20 リソース ID: %d。 %s の最低限保証は %d、最大値は %d 、データベースの現在の使用状況は %d です。 ただし、サーバーは現在ビジー状態であり、このデータベースの %d を超える要求をサポートできません。 リソース ID は、制限に達したリソースを示します。 ワーカー スレッドの場合、リソース ID = 1 となります。 セッションの場合、リソース ID = 2 です。 詳細については、次を参照してください。
論理 SQL サーバー リソースの制限
単一データベースに関する DTU ベースの制限
エラスティック プールに関する DTU ベースの制限
単一データベースに関する仮想コアベースの制限
エラスティック プールに関する仮想コアベースの制限
Azure SQL Managed Instance のリソースの制限
その他の場合は、後でもう一度やり直してください。
40544 20 データベースのサイズ クォータに達しました。 データをパーティション分割するか、データを削除するか、インデックスを削除してください。その他の解決方法についてはドキュメントを参照してください。 データベースのスケーリングについては、単一データベースのリソースのスケーリングに関する記事と、エラスティック プールのリソースのスケーリングに関する記事を参照してください。
40549 16 トランザクションが長時間実行されているため、セッションを終了しました。 トランザクションを短くしてください。 バッチ処理については、「バッチ処理を使用して SQL Database アプリケーションのパフォーマンスを強化する方法」を参照してください。
40550 16 取得したロックの数が多すぎるため、セッションを終了しました。 1 つのトランザクションで読み取る行または変更する行の数を減らしてください。 バッチ処理については、「バッチ処理を使用して SQL Database アプリケーションのパフォーマンスを強化する方法」を参照してください。
40551 16 tempdb の使用領域が多すぎるため、セッションを終了しました。 クエリを変更して一時テーブルの使用領域を減らしてください。

一時オブジェクトを使用している場合は、セッションで不要となった一時オブジェクトを削除して tempdb データベースの領域を節約してください。 SQL Database での tempdb の制限について詳しくは、「SQL Database の Tempdb データベース」を参照してください。
40552 16 トランザクション ログの使用領域が多すぎるため、セッションを終了しました。 1 回のトランザクションで変更する行を減らしてください。 バッチ処理については、「バッチ処理を使用して SQL Database アプリケーションのパフォーマンスを強化する方法」を参照してください。

bcp.exe ユーティリティまたは System.Data.SqlClient.SqlBulkCopy クラスを使用して一括挿入を実行する場合は、1 回のトランザクションでサーバーにコピーされる行数を -b batchsize オプションまたは BatchSize オプションで制限してください。 ALTER INDEX ステートメントでインデックスを再構築する場合は、REBUILD WITH ONLINE = ON オプションの使用を検討してください。 仮想コア購入モデルのトランザクションログサイズの情報については、次を参照してください。
単一データベースに関する仮想コアベースの制限
エラスティック プールに関する仮想コアベースの制限
Azure SQL Managed Instance のリソースの制限
40553 16 メモリの使用量が多すぎるため、セッションを終了しました。 クエリを変更して、処理する行を減らしてください。

Transact-SQL コード内の ORDER BY 操作と GROUP BY 操作の数を減らすことで、クエリのメモリ要件を抑えられます。 データベースのスケーリングについては、単一データベースのリソースのスケーリングに関する記事と、エラスティック プールのリソースのスケーリングに関する記事を参照してください。 メモリ不足エラーおよびサンプル クエリについて詳しくは、「Azure SQL Database によるメモリ不足エラーのトラブルシューティング」を参照してください。

エラスティック プールのエラー

次のエラーは、エラスティック プールの作成と使用に関連しています。

エラー コード 重大度 説明 是正措置
1132 17 エラスティック プールが、その記憶域の上限に達しました。 エラスティック プールの記憶域の使用率が (%d) MB を超えることはできません。 エラスティック プールの記憶域が上限に達したときに、データベースにデータを書き込もうとしています。 リソース制限の情報については、次を参照してください。
エラスティック プールに関する DTU ベースの制限
エラスティック プールに関する仮想コアベースの制限
可能であれば、エラスティック プールの DTU を増やすかストレージを追加して、その記憶域の上限を上げることを検討するか、エラスティック プール内の個々のデータベースで使用される記憶域を減らすか、あるいはエラスティック プールからデータベースを削除してください。 エラスティック プールのスケーリングについては、エラスティック プールのリソースのスケーリングに関する記事を参照してください。 データベースから未使用領域を削除する方法の詳細については、「Azure SQL Database でデータベースのファイル領域を管理する」を参照してください。
10929 16 %s の最低限保証は %d、最大値は %d 、データベースの現在の使用状況は %d です。 ただし、サーバーは現在ビジー状態であり、このデータベースの %d を超える要求をサポートできません。 リソース制限の情報については、次を参照してください。
エラスティック プールに関する DTU ベースの制限
エラスティック プールに関する仮想コアベースの制限
その他の場合は、後でもう一度やり直してください。 データベースあたりの DTU/仮想コア最小値、データベースあたりの DTU/仮想コア最大値。 エラスティック プール内のすべてのデータベースにわたる同時実行ワーカーの合計数が、プールの制限を超えようとしました。
可能であれば、エラスティック プールの DTU または仮想コアを増やしてワーカーの上限を上げることを検討するか、エラスティック プールからデータベースを削除してください。
40844 16 サーバー '%ls' のデータベース '%ls' は、エラスティック プールの '%ls' エディションのデータベースであり、連続コピー リレーションシップを持つことはできません。 該当なし
40857 16 サーバー '%ls ' のエラスティック プールが見つかりませんでした。エラスティック プール名は ' %ls ' です。 指定されたエラスティック プールが、指定されたサーバー内にありません。 有効なエラスティック プール名を指定してください。
40858 16 エラスティック プール '%ls' は サーバー '%ls' に既に存在します。 指定されたエラスティック プールは、指定されたサーバー内に既に存在します。 新しいエラスティック プール名を指定してください。
40859 16 エラスティック プールでは、サービス階層 '%ls' はサポートされていません。 指定されたサービス階層は、エラスティック プールのプロビジョニングにはサポートされていません。 正しいエディションを指定するか、既定のサービス階層を使用する場合はサービス階層を空のままにしてください。
40860 16 エラスティック プール '%ls' とサービス目標 '%ls' の組み合わせが正しくありません。 エラスティック プールとサービス レベルは、リソース タイプが 'ElasticPool' に指定されている場合にのみ同時に指定できます。 エラスティック プールとサービス レベルの適切な組み合わせを指定してください。
40861 16 データベース エディション '%.*ls' は、エラスティック プールのサービス層 '%.ls' と同じにする必要があります。 データベースのエディションがサービス階層と異なります。 エラスティック プールのサービス階層と異なるデータベース エディションを指定しないでください。 データベースのエディションを指定する必要がないことにご注意ください。
40862 16 エラスティック プールのサービス目標が指定されている場合は、エラスティック プール名を指定する必要があります。 エラスティック プールのサービス目標は、エラスティック プールを一意に識別することはできません。 エラスティック プールのサービス目標を使用する場合は、エラスティック プール名を指定してください。
40864 16 エラスティック プールの DTU は、サービス階層 '%.*ls' に対して (%d) DTU 以上である必要があります。 最小値を下回るエラスティック プールの DTU を設定しようとしています。 エラスティック プールの DTU を最小値以上に設定し直してください。
40865 16 エラスティック プールの DTU は、サービス階層 '%.*ls' に対して (%d) DTU を超えることはできません。 エラスティック プールの DTU を最大値を超える値に設定しようとしています。 エラスティック プールの DTU を最大値を超えないように設定し直してください。
40867 16 データベースあたりの DTU の最大値は、サービス階層 '%.*ls' (%d) 以上である必要があります。 サポートされている制限を下回るデータベースあたりの DTU 最大値を設定しようとしています。 目的の設定をサポートするエラスティック プールのサービス階層を使用することをご検討ください。
40868 16 データベースあたりの DTU の最大値は、サービス階層 '%.*ls' に対して (%d) を超えることはできません。 サポートされている制限を超えるデータベースあたりの DTU 最大値を設定しようとしています。 目的の設定をサポートするエラスティック プールのサービス階層を使用することをご検討ください。
40870 16 データベースあたりの DTU 最小値は、サービス階層 '%.*ls' に対して (%d) を超えることはできません。 サポートされている制限を超えるデータベースあたりの DTU 最小値を設定しようとしています。 目的の設定をサポートするエラスティック プールのサービス階層を使用することをご検討ください。
40873 16 データベース数 (%d) と データベースあたりの DTU の最小値 (%d) は、エラスティック プールの DTU (%d) を超えることはできません。 エラスティック プールの DTU を超えるエラスティック プール内のデータベースあたりの DTU 最小値を指定しようとしています。 エラスティック プールの DTU を増やすか、データベースあたりの DTU 最小値を減らす、またはエラスティック プール内のデータベース数を減らすことをご検討ください。
40877 16 データベースが含まれていない場合を除いて、エラスティック プールを削除できません。 エラスティック プールに、1 つ以上のデータベースが含まれているため、削除できません。 エラスティック プールからデータベースを削除して、エラスティック プールを削除してください。
40881 16 エラスティック プール '%.*ls' のデータベース数が上限に達しました。 エラスティック プールのデータベース数上限は、(%d) DTU を含むエラスティック プールの場合、(%d) を超えることはできません。 エラスティック プールのデータベース数が上限に達したときに、データベースを作成またはエラスティック プールにデータベースを追加しようとしています。 可能であれば、エラスティック プールの DTU を増やして、データベースの上限を上げることを検討するか、エラスティック プールからデータベースを削除してください。
40889 16 エラスティック プール '%.*ls' の DTU または記憶域の上限を下げることはできません。下げると、データベースに十分な記憶域スペースを提供できなくなるためです。 記憶域の使用率を下回るエラスティック プールの記憶域の上限を下げようとしています。 エラスティック プール内の個々のデータベースの記憶域使用率を減らすことを検討するか、その DTU または記憶域の上限を下げるためにプールからデータベースを削除してください。
40891 16 データベースあたりの DTU 最小値 (%d) は、データベースあたりの DTU 最大値 (%d) を超えることはできません。 データベースあたりの DTU 最大値を超えるデータベースあたりの DTU 最小値を設定しようとしています。 データベースあたりの DTU の最小値がデータベースあたりの DTU 最大値を超えていないことをご確認ください。
TBD 16 エラスティック プール内の個々のデータベースの記憶域サイズは、サービス階層のエラスティック プール '%.*ls' で許可されている最大サイズを超えることはできません。 データベースの最大サイズが、エラスティック プールのサービス階層によって許可されている最大サイズを超えています。 データベースの最大サイズを、エラスティック プールのサービス階層によって許可されている最大サイズの制限内に設定してください。

このログインで要求されたデータベース "master" を開けません。 ログインに失敗しました

この問題は、アカウントに master データベースにアクセスするアクセス許可がないために発生します。 しかし、既定では、SQL Server Management Studio (SSMS) で master データベースへの接続が試行されます。

この問題を解決するには、次の手順に従ってください。

  1. SSMS のログイン画面で [オプション] を選択してから、 [接続プロパティ] を選択します。

  2. [データベースに接続] フィールドで、既定のログイン データベースとしてユーザーの既定のデータベース名を入力し、 [接続] を選択します。

    Connection properties

読み取り専用エラー

読み取り専用のデータベースに書き込もうとすると、エラーが発生します。 状況によっては、データベースが読み取り専用状態になっている原因が、すぐにわからないことがあります。

エラー 3906: データベース "DatabaseName" を更新できませんでした。データベースが読み取り専用です。

読み取り専用データベースを変更しようとすると、次のエラーが発生します。

Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.

読み取り専用レプリカに接続されている可能性がある

Azure SQL Database と Azure SQL Managed Instance のどちらの場合も、読み取り専用レプリカのデータベースに接続されている可能性があります。 この場合、DATABASEPROPERTYEX() 関数を使って次のクエリを行うと、READ_ONLY が返されます。

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO

SQL Server Management Studio を使用して接続している場合は、接続オプションの [追加の接続パラメーター] タブApplicationIntent=ReadOnly を指定しているかどうかを確認します。

接続文字列を使ってアプリケーションまたはクライアントから接続している場合は、接続文字列で ApplicationIntent=ReadOnly が指定されているかどうかを確認します。 詳しくは、「読み取り専用レプリカに接続する」をご覧ください。

データベースが読み取り専用に設定されている可能性がある

Azure SQL Database を使っている場合は、データベース自体が読み取り専用に設定されている可能性があります。 データベースの状態は、次のクエリを使って確認できます。

SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();

Azure SQL Database のデータベースの読み取り専用状態は、ALTER DATABASE Transact-SQL を使って変更できます。 現在、マネージド インスタンスのデータベースを読み取り専用に設定することはできません。

エラーの原因が接続の問題かどうかを確認する

接続の問題が原因でエラーが発生しているかどうかを確認するには、次のような接続を開くための呼び出しを示すフレームのスタック トレースを確認します (SqlConnection クラスへの参照に注意)。

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
 at System.Data.SqlClient.SqlConnection.Open()
 at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>

クエリの問題によって例外がトリガーされた場合、次のような呼び出し履歴が表示されます (SqlCommand クラスへの参照に注意)。 このような場合は、クエリを調整します。

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:<Client ID>

パフォーマンスの微調整に関する詳細なガイダンスについては、以下のリソースを参照してください。

一般的な接続に関する問題を修正するための手順

  1. アプリケーション サーバーで TCP/IP がクライアント プロトコルとして有効になっていることを確認します。 詳細については、「クライアント プロトコルの構成」を参照してください。 SQL ツールがインストールされていないアプリケーション サーバーでは、cliconfg.exe (SQL Server クライアント ネットワーク ユーティリティ) を実行して、TCP/IP が有効になっていることを確認します。

  2. アプリケーションの接続文字列を調べ、正しく構成されていることを確認します。 たとえば、接続文字列で正しいポート (1433) と完全修飾サーバー名が指定されていることを確認します。 「接続情報の取得」をご覧ください。

  3. 接続タイムアウトの値を増やしてみます。 30 秒以上の接続タイムアウトを使用することをお勧めします。

  4. SQL Server Management Studio (SSMS)、UDL ファイル、ping、または telnet を使用して、アプリケーション サーバーと Azure SQL Database との間の接続をテストします。 詳細については、接続問題のトラブルシューティング接続問題の診断に関するページをご覧ください。

    Note

    トラブルシューティングの手順として、別のクライアント コンピューターでの接続をテストすることもできます。

  5. ベスト プラクティスとして、再試行ロジックが実施されていることを確認します。 再試行ロジックの詳細については、SQL Database に関する一時的な障害と接続エラーのトラブルシューティングについての記事を参照してください。

これらの手順で問題が解決しない場合は、さらにデータを収集してから、サポートに連絡してみてください。 アプリケーションがクラウド サービスの場合は、ログ記録を有効にします。 この手順により、エラーの UTC タイムスタンプが返されます。 さらに、SQL Database によりトレース ID が返されます。 Microsoft カスタマー サポート サービスはこの情報を使用できます。

ログ記録を有効にする方法の詳細については、「Azure App Service でのアプリの診断ログの有効化」を参照してください。

次のステップ

関連するトピックについて詳しくは、以下の記事をご覧ください。