はじめに
Instana + DBmarlin の「後編」になります。
「前編」はコチラ
「後編」では、DBmarlin で取得できる DB の性能情報や、Instana において DBmarlin との連携で得られるメリットなどをご紹介します。
おことわり
前回検証環境として、「WordPressサーバー」を用いていましたが、Instana + DBmarlin の連携を検証する中で、PHP を使ったアプリは正常に連携しないということが判明しました。
下図は DB を参照する簡単なサンプルアプリを、Node.js と PHP で作成し、DB へのアクセスを Instana でトレースした結果の比較です。PHP で作成したアプリのトレースには、DBmarlin へのリンクが表示されていなことが見てとれます。
WordPress が PHP で作成されているアプリで検証に支障がでるため、代替の検証用アプリとして Node.js で動作する Strapi としました。(下図参照)
では、 DBmarlin ではどういった情報が収集されているのか、簡単に確認していきます。
サーバーの性能情報
最初に DB を実行しているサーバー(ホスト)の性能情報からです。
「Hosts」 > 「WP Server(対象サーバー名)」を選択すると、ホストのメトリクスが取得でき、CPU使用率、メモリ使用率、I/O使用率、ディスクの平均使用率を折れ線グラフとして確認することができます。
「Show Breakdown」を押下すると、積上げグラフ形式になり詳細な情報を確認することができます。CPUを例にすると、System・User・I/O Wait といった主要な指標を確認できます。
MySQL の性能情報
「Database Instanaces」 > 「WP DB(対象 DB 名)」を選択すると、DB のメトリクスが取得でき、初期表示の画面では DB の処理数(Executions)と処理時間(Time Spent)が時系列に表示され、処理時間の多い SQL クエリ(Top statements)と、待機時間(Top waits)の多い処理が円グラフで表示されます。
性能情報で注目したのは、「SQL Statistics」と「Statistics」の項目です。
「SQL Statistics」では、 処理された SQL の実行計画(EXPLAIN)を確認することが出来ます。
「Statistics」では、サーバーステータス変数の値を時系列に確認することができます。全ての変数ではないようですが、参照・更新・削除といった処理の実行回数や、接続数といった主要な値を確認できます。
もう一つ DB 関連の情報で注目したのが、「DB Versions」のメニューです。DBmarlinで管理している DB のバージョン情報と関連して、長期サポートのバージョンであるか、EoS(サポート提供終了)の予定日といった情報が提供されているのは有用なだと感じました。
Instana と DBmarlin の連携とは
さて、Instana と DBmarlin の連携による効果ですが、冒頭でも少し紹介したように、Instana のアプリトレースにおいて、DB に関連した処理は DBmarlin の分析画面へのリンクが埋め込まれます。
Strapi でサンプルのドキュメントを作成し、保存した時のトレースを例に見てみます。たとえば、アプリの応答が遅いといったようなケースを想定してみると、、、
① 「タイムライン」でアプリの処理の開始から終了までにかかった時間、呼び出された各処理の処理時間を、俯瞰的に確認することが出来ます。
② 「呼び出し」を確認することで、それぞれ呼び出された処理の詳細な情報を確認することが出来ます。今回は比較的時間がかかっている「insert」処理にフォーカスしています。
③ 「呼び出し」で選択した「insert」処理で実行された SQL 文と、「DBMARLIN で SQL を検索します」というリンクが表示されています。
「DBMARLIN で SQL を検索します」というリンクから、DBmarlin の「SQL Search」メニューに遷移し、該当する SQL 文の検索結果が表示された状態となります。
④ SQL 文を選択することで、SQL の処理にかかった要因をより詳しく解析することができます。
アプリパフォーマンス問題の原因が DB にあった、、、というケースは決して少なくないと思いますが、Instana と DBmarlin を合わせて使うことで、アプリのボトルネック箇所の迅速な診断と、DB のチューニングや改善が効率的に実現できるのではないかと思います。
SQL 文に実行計画が存在する場合は、生成 AI による最適化の支援が得られたため、つづいて紹介します。
DBmarlin Co-Pilot(生成 AI )による最適化支援
SQL 文の実行計画の表示画面や待機イベントの画面において、「Send to DBmarlin Co-pilot」を押下することで、生成 AI によるチューニングポイントが提示されます。
DBmarlin Co-Pilot の利用開始までの準備を簡単に案内します。今回の検証では、私が利用している OpenAI ChatGPT の API Key を事前に準備しています。
「SETTINGS」 セクションの 「Integrations」 から、AI Co-pilot の「Edit」を選択し、次画面で「Create」を設定します。
「AI Provider」に「OpenAI」を選択後「Model」と「API Key」を設定し、「Enabled」トグルを有効にし、「Create」を押下します。
※ OpenAI 以外にも OpenRouter が使用できるため、モデルとしては Google Gemini や Anthropic Claude なども利用できるかと思います。
「Send to DBmarlin Co-pilot」を押下すると、画面右側から DBmarlin Co-pilot 画面がスライドインしてくるので、AI 使用に関する留意点などに同意し、AI Settings を「Save」します。
設定完了後に、待機イベントや SQL実行計画に対して、「Send to DBmarlin Co-pilot」を実行すると、DB の状態や 実行された SQL の考察、見直すべきポイントを提示してくれました。(日本語で回答するように指定。)
今回の検証は Strapi という既成のアプリを使用しているため、提示された DB のチューニングをそのまま適用するのは難しいと思いますが、自社開発しているアプリなどでは有用な機能ではないでしょうか?
DBmarlin Co-Pilot を使用すると、回答ごとや累積で API の利用料金が表示されるのは、AWS の利用料など検証費用に気をつかう私からすると、ありがたい機能でした(笑
まとめ
PHP で構成されたアプリが正常に連携できない件もあり、やや検証環境の準備に苦労しましたが、Instana と DBmarlin の連携について、2回にわたってみてきました。
※ Instana を提供している IBM 社に、PHP アプリの件は伝えていますので、今後の改善を期待します!
もう少し DBmarlin の機能や、得られる情報を深堀したいという思いはありつつも、アドベントカレンダーへの投稿を考えて今回はここまでにしたいと思います (;^_^A
では、みなさま Happy Christmas !! そして、よいお年を!!

















