クエリのブロックは、データベース・アナリスト、エンジニア、およびスケールの大きなデータベース・パフォーマンスを管理するすべての人が直面する重要な問題の1つです。ブロッキングは、非効率的なクエリやデータベースの設計、およびリソースの飽和によって引き起こされる可能性があり、待ち時間の増加、エラー、およびユーザーのフラストレーションにつながる可能性があります。根本的なブロッカー(データベース・リソースに連鎖的なロックをかける根本的な問題のあるクエリ)を特定することは、トラブルシューティングとデータベース・パフォーマンス問題の改善の鍵となります。また、特に履歴分析に関してはより解決が困難な傾向があります。
Datadog データベース モニタリング は、ルート・ブロッキング・クエリに対する詳細な可視性を提供し、データベースとホストの全体にわたって、ブロックされた接続と最適でないパフォーマンスを迅速に調査してトラブルシューティングできるようになりました。データベースモニタリングでは、ホストとデータベースごとにブロックされたアクティブな接続の数をすばやく評価し、ルートブロッカーを特定できる詳細なインサイトを提供します。また、各データベースとホストへのアクティブな接続を検査し、インシデントのトラブルシューティングを迅速に行うために、任意のブロックアクティビティを分離するために使用することもできます。
この投稿では、データベースモニタリングを使ってルートブロッカーを特定して調査する方法の概要を説明します。これにより、データベース全体のパフォーマンスをモニタリングして最適化する、およびパフォーマンスに影響するインシデントをトラブルシューティングすることが可能になります。
データベース全体のパフォーマンスのモニタリングと最適化
データベースモニタリングでは、ホストとデータベースを、それぞれへのアクティブな接続がブロックされている割合で並べ替えることができるようになったため、ブロックが発生しているかどうか、また、どこに最適化の焦点を当てるべきかを迅速に判断できます。
各データベースとホストのブロッキング・サマリーは、任意の時間枠におけるブロッキング・アクティビティの正確なイメージを提供し、ルート・ブロッカーだけでなく、それらのブロッカーが原因となっているクエリ、またはアクティブに待機させているクエリをグラフ化および集計します。各ブロッキングサマリーにより、ブロックされたデータベース接続の根本原因を素早く突き止めることができます:
- ブロッキングの原因となっているクエリ文の正確な特定
- これらのブロッカーの結果としてどのクエリが待機しているかを特定する
- 特定のブロッカーが発生した回数を確認する
- 指定された時間枠内で、それらのブロッカーによって引き起こされる最大ブロッキングと待ち時間を決定する
Blocking Summaryテーブルには、BlockingビューとWaitingビューがあり、これらを切り替えることで、全体的に何が最もブロックを引き起こしているのか、または特定のクエリが待たされているのかを評価できます。
このパネルには、クエリ文、他のクエリをブロックした過去のインスタンスのカタログ、ブロックが発生したデータベースやホストなど、個々のクエリに関する詳細な情報が表示されます。このパネルのMetricsタブでは、過去のメトリクスを表示し、特定のクエリがブロッカーによってどのような影響を受けたかを確認できます。
また、データベースモニタリングでは、データベースが生成する不可解な待機イベントを、CPU、コミット/ログ、IO、ロックなどのわかりやすいカテゴリである待機グループ*に分類することで、明確にすることができます。各クエリが各待機グループに費やす時間の割合を明らかにすることで、ブロッキングアクティビティを素早く把握し、トラブルシューティングを迅速に行えます。
このような詳細なインサイトは、データベース全体のパフォーマンスを最適化する上で非常に重要です。たとえば、ホスト上で散発的だが一貫したロックが発生している場合、ブロッキング・サマリーは問題の根本を素早く突き止めるのに役立ちます。これを使用して、クエリ・アクティビティを分析可能で、特定のクエリやアプリケーション・レベルでの実行方法を変更するかどうか、また変更方法を決定し、改善プロセスを開始できます。
データベースのパフォーマンスに影響を与えるインシデントのトラブルシューティング
データベース モニタリングが提供する、ブロッキングクエリに関する新しい詳細な可視性は、データベースのパフォーマンスに影響を及ぼしているインシデントを特定し、トラブルシューティングするのに役立ちます。たとえば、データベース モニタリングがホストまたはデータベースへのブロックされた接続の割合の急増を示した場合、それは進行中のインシデントを示している可能性があります。
データベース・パフォーマンスに影響するインシデントのトラブルシューティングは、Active Connections タブを使用して、影響を受けるホストまたはデータベースの完全なロック・チェーンを表示できます。Blocking SummaryテーブルのLast Active 列は、現在アクティブなブロッカーにフラグを付けるので、ブロックしているセッション ID(SQL Server データベースの場合)またはプロセス ID(Postgres データベースの場合)をすぐに特定できます。このテーブルから現在のブロッカーを選択すると、Active Connections タブに移動し、アクティブな接続のサマリーをブロック中のアクティビティのみを表示するように切り替えることができます。これにより、任意の時点のブロッキングアクティビティに焦点を当てることができ、現在ブロックされているクエリや待機しているクエリのクエリ文とそのPIDまたはSIDが表示されます。
たとえば、データベースでロックが山積みになっている場合(多くのトランザクションが1つまたは複数の他のトランザクションを待機している状態)、その原因をすばやく正確に特定したいと思うでしょう。Active Connections タブを使用すると、ルートブロッカーを簡単に特定し、他のクエリをブロックしている時間、ブロックしている他の接続の数、ブロックしているクエリの種類など、トラブルシューティングの重要なインサイトを把握することができます。影響を受けるデータベースに直接アクセスできる場合、データベースモニタリングでは、アクティブな接続で提供される PID または SID を使用して、ルートブロッカーの背後にあるプロセスを手動で強制終了することで、直接対処できます。これは、必ずしも永続的なシステム上の問題ではないが、多くの接続をブロックしている異常なブロッカーの場合に推奨される場合があります。このようなタイプのブロッカーの背後にあるプロセスを強制終了することで、データベースの負荷を軽減し、パフォーマンスの問題を迅速に緩和することができます。
データベース内のブロックされたクエリのルートにすばやくアクセス
データベースモニタリングにより、Postgres および SQL Server データベースのブロッカーの根本を素早く突き止めることができるようになりました。この新しい可視性は、一般的なパフォーマンスの最適化だけでなく、トラブルシューティングやデータベースのパフォーマンス問題のタイムリーな解決にも不可欠です。
データベースの全体的なパフォーマンスを改善し、ブロックされたクエリの根本を素早く突き止めるために、今すぐデータベースモニタリングを始めましょう。Datadogをはじめてご利用になる場合は、14日間の フリートライアルをご利用ください。