EC2 Windows インスタンスで Microsoft SQL の問題のトラブルシューティングを行うにはどうすればよいですか?
最終更新日: 2021 年 6 月 25 日
Microsoft SQL Server を実行している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでエラーが発生しています。または、SQL Server が遅いのでアプリケーションログのタイムアウトエラーが発生します。インスタンスの SQL Server の問題のトラブルシューティング方法を教えてください。
簡単な説明
SQL Server で発生する可能性のある一般的なエラーを次に示します。
- SQL Server インスタンスが、プライマリレプリカからセカンダリレプリカにフェイルオーバーした。
- イベントビューアが、イベント1196「Cluster network name resource 'Cluster Name' failed registration of one or more associated DNS name(s) for the following reason」を 15 分ごとに記録する。
- SQL リスナーを作成できない。
- SQL Server が遅く、アプリケーションがタイムアウトエラーをログに記録する。
- SQL セットアップで別のサーバーの設定を検出した後、無効な認証情報エラーでノードの追加が失敗する。
解決方法
SQL Server インスタンスが、プライマリレプリカからセカンダリレプリカにフェイルオーバーした
フェイルオーバーは、基礎となるクラスターグループで発生することがあります。問題がクラスターレベルのものかどうかを判断するには、次の手順を使用して、イベントビューアでシステムログを表示します。
- [ファイル名を指定して実行] を開き、「eventvwr」 と入力して [OK] を選択します。
- [Windows ログ]、[システム] の順に選択します。ログにイベント 1069、1146、1230、または 1135 が表示された場合は、クラスターログを生成してクラスターレベルで調査を開始します。
注:イベント 1135 が表示された場合は、クラスタノードのフェイルオーバーが発生したことを示します。この問題を解決する方法については、「イベント ID 1135 のクラスターの問題のトラブルシューティング」を参照してください。
クラスターログを生成して取得するには、次の手順を実行します。
- Windows PowerShell で get-clusterlogs コマンドを実行して、クラスターログの最新のセットを生成します。
- デフォルトの場所 (C:\windows\cluster\reports) からクラスターログを取得します。
SQL リソースが原因でクラスターがフェイルオーバーしたことがクラスターログに表示されている場合は、イベントビューアのアプリケーションログで SQL エラーがないかどうかを確認してください。詳細については、「Always On 可用性グループのリース、クラスター、正常性チェック タイムアウトのしくみとガイドライン」を参照してください。
イベントビューアが、イベント1196「Cluster network name resource 'Cluster Name' failed registration of one or more associated DNS name(s) for the following reason」を 15 分ごとに記録する
デフォルトでは、クラスター名オブジェクト (CNO) は 15 分ごとに DNS に送られ、必要なレコードがまだ存在するかどうかがチェックされます。チェックが失敗すると、クラスタネットワーク名リソース「クラスタ名」失敗の登録エラーが発生します。
このエラーは、クラスター内のネットワーク名のクラスター DNS レコードに対するアクセス許可が CNO にない場合に発生することがあります。これを解決するには、DNS レコードの CNO にフルコントロールを付与します。デフォルトでは、通常、クラスターは作成時にこれらのアクセス許可を付与します。
静的 DNS レコードを使用している場合、またはクラスターが DNS レコードを更新し続けないようにするには、次の手順を実行します。
- [ncpa.cpl]、[NIC カードのプロパティ]、[IPv4 のプロパティ]、[詳細設定]、[DNS] の順に移動します。
- [この接続のアドレスを DNS に登録] のチェックを外します。
SQL リスナーを作成できない
詳細については、「Create Listener Fails with Message 'The WSFC cluster could not bring the Network Name resource online'」を参照してください。
SQL Server が遅く、アプリケーションがタイムアウトエラーをログに記録する
SQL Server で高メモリ、高 CPU、またはディスクのボトルネックが発生しているかどうかを確認します。
OS のメモリ消費量が多いかどうかを確認します。 タスクマネージャーを開き、[パフォーマンス] タブを選択します。メモリ消費量が多い場合は、SQL メモリの上限を設定します (設定されていない場合)。SQL メモリが既に制限されている場合は、Windows パフォーマンスモニター (perfmon) にアクセスして、メモリを使用しているアプリケーションを特定します。perfmon はローカルまたはリモートで設定できます。
OS で高 CPU が発生しているかどうかをチェックします。タスクマネージャーを開き、[パフォーマンス] タブを選択します。または、AWS CloudWatch メトリクスを確認します。 Windows のパフォーマンスモニターにアクセスして、メモリを使用しているアプリケーションを特定します。高 CPU は、通常、古いドライバーによって引き起こされます。 最新の PV ドライバーバージョンにアップグレードしてください。または、AWS NVMe ドライバーを最新バージョンにアップグレードします。
サーバーのディスク消費量、ボリュームの遅さ、または高 I/O をチェックします。高 CPU が発生する場合と同様に、古いドライバーがディスク消費の原因となる可能性があります。最新の PV ドライバーバージョンにアップグレードしてください。または、AWS NVMe ドライバーを最新バージョンにアップグレードします。ドライバを更新しても問題が解決しない場合は、perfmon を設定して、ディスク I/O を消費しているものを特定します。
SQL セットアップで別のサーバーの設定を検出した後、無効な認証情報エラーでノードの追加が失敗する
次のいずれかに該当するかどうかを確認します。
- 2 番目のサーバーの詳細を検出すると、セカンダリノードの [SQL セットアップ] の SQL エージェントのアカウント名が空白になります。
- レジストリキー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\ConfigurationState には、値 2 のキーが 1 つ以上あります。
上記の 1 つまたは両方が該当する場合は、次の操作を行います。
1. Windows PowerShell を開き、次のコマンドを実行します。
$ClusterName = "YourClusterName"
$FciClusterGroupName = "SQL Server (MSSQLSERVER)"
Add-ClusterResourceType -Name "SQL Server Agent" -Dll "sqagtres.dll"
注: 上記のコマンド例の YourClusterName などの変数名を実際の環境に合わせて変更します。
2. フェールオーバークラスターマネージャーを開き、[ロール]、[SQL ロール]、[リソースの追加]、[その他のリソース] の順に選択します。
3. [新しい SQL Server エージェント]、[プロパティ]、[依存関係] の順に選択します。
4. [リソース] フィールドで、[SQL Server] を選択します。
5. [プロパティ] タブを選択し、[InstanceName] フィールドに SQL Server インスタンスの名前を入力します。次に、[VirtualServerName] フィールドに SQL クラスタの名前を入力します。新しい SQL Server エージェントが起動します。
6. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\ConfigurationState のすべてのキーを 1 に変更します。
7. セットアップをもう一度実行します。これで認証情報エラーなしでノードを追加できるようになります。