技術ブログ
技術ブログ
2017年11月29日
このエントリーをはてなブックマークに追加

New Relic APM のスロークエリ表示にまつわるTips

はじめに

今回は APM のスロークエリの表示に関する話題になります。「スロークエリを表示してくれる機能は便利だけど、長い SQL は途中で表示が切れてしまう」というお問い合わせを頂きました。今のところ、New Relic のドキュメントにも記載がないようです。ご参考までにご紹介します。

スロークエリとは?

まずはDBになじみのない方のために「スロークエリとは何ぞや?」の補足です。レスポンスタイムが遅いクエリ(SQL文)をスロークエリと呼びます。MySQL等、スロークエリのログの出力設定をするとスローなクエリがログに表示されます。これをスロークエリログと呼びます。

New Relic APM のスロークエリ表示機能とは?

New Relic APM からもスロークエリを見ることができます。エージェントが入っていれば最初から見ることができます。DBサーバの設定も不要です。スローの定義は、アプリサーバから
DBサーバに対して500ms以上のレスポンスタイムがかかっているクエリになります(500msはデフォルト値です。エージェントの設定ファイル上で変更することが可能です。

こんなイメージで見られます。

 

New Relic でスロークエリを見るメリット

私がお客様に「New Relic APM ならスロークエリも見られますよ!!」と申し上げますと、「うちはDB側でスロークエリログを取っているから別にいいよ!!」と返答されます。ごもっともであります。が、しかし敢えて申し上げますとこの様なメリットが挙げられます。

  • アプリ性能を監視する中で、DBのレスポンスも同時に見ることができます
  • DBサーバでログの出力処理を行わない為、DBサーバの負荷が軽減できます
  • New Relic の場合、値はデフォルトでバインドされるため(?に変換)、セキュリティ上望ましい場合があります。バインドさせない設定も可能です

スロークエリの文字数制限(デフォルト値)

ところがあるとき、クエリ文(長大)が途中で切れて表示されるとのお問い合わせを頂きました。弊社の検証環境や、New Relic 謹製デモ環境をもってしても、”表示が切れるほどの長大なクエリ文”を扱ったことがなかった為、New Relic 社のエンジニアに確認しましたところ、デフォルトで2000文字の制限があることがわかりました。この制限についてどこかに書かれているわけではありません。

制限を超えて表示させる場合は、New Relic エージェントの設定ファイル( newrelic.yml )に対して設定を追加する必要があります。また設定後は、アプリケーションサーバ( Apache や Tomcat 等)のプロセスを再起動して設定を反映させる必要があります。

変更箇所

newrelic.yml の具体的な設定例ですが、transaction_tracer セクションに以下のように追記します。

——————————
transaction_tracer:
insert_sql_max_length: 1000000
——————————
※ 0(zero)は指定できません。2000よりも大きな値にします。
※ yml 形式ですので空白行の位置にご注意ください

参考:Java agent config file template

上限値はあるの?

設定できる文字数について上限値はありません。最適値・推奨の上限値については、試験環境等でトライアルを繰り返しながら決める必要があります。

アプリへの影響は?

文字数を増やすことによる影響として、送信するメトリクスが増える分、エージェントのオーバーヘッドが増える可能性はあります。

設定変更自体は直接アプリの性能に影響を与えませんが、エージェントのオーバーヘッドが増える分、ホストへの負荷を高め、その結果アプリの性能に与えるという意味で、間接的にアプリ性能に影響を与える可能性はあります。 実際の影響度については試験環境等でトライアルを繰り返しながら確認する必要があります。

以上

このエントリーをはてなブックマークに追加

この記事を書いた人

dxtomochika 海外の新しい製品・サービスなどを検証して紹介します。

PROプランのすべての機能を
30日間無料でお試し

新規無料登録いただくとPROプランのすべての機能を
30日間無料でお試しいただけます。
クレジットカードなど決済情報の登録は不要です。

各プランの詳細はこちらからご確認ください。