データベースとインスタンスレベルのパフォーマンス問題の分析

あなたが開発、運用、または管理チームのメンバーだとしたら、データベースで発生した問題をすばやく調査する必要があるでしょう。アプリケーションのパフォーマンス低下や障害にようるエラーの発生やパフォーマンスに関する問題を解決するには、原因が、データベースパフォーマンスなのか? 複数のホストやサービス、またはその両方に関連しているか? といったことを切り分けられる必要があります。

New Relic APM の トランザクション・トレーススロークエリ・トレースサービスマップを使うことで、問題となっている特定のクエリ、データベースのインスタンス(ホストとポート)、そしてデータベース名を調べることができます。New Relic APM のインスタンス単位のメトリクスを使うことで、関連する特定のインスタンスにドリルダウンしやすくなります。影響範囲を素早く特定し、問題の解決に便利なのです。

この機能を利用できるかは、お使いのサブスクリプションレベルによって変わります。

互換性と要件

New Relic は様々なデータベース、そしてデータベース・ドライバのインスタンスの詳細情報を収集します。New Relic APM を使って特定のインスタンスとデータベース情報を表示するには、以下のデータベース・ドライバと New Relic エージェントのバージョン条件を満たす必要があります。

Go
Go エージェントの場合は、バージョン 1.4 以上が必須。
全データベース・ドライバをサポートしています。
Java
Java エージェントの場合は、バージョン 3.33.0 以上が必須。

サポート:

  • 互換性のある JDBC ドライバ
  • DataStax Cassandra ドライバ 2.1.2, 3.0 から 3.1
  • Jedis Redis ドライバ 1.4 から 2.9
  • Mongo 2.12.0 から 2.13.3, 3.1 から 3.3
  • Spymemcached (2.11 から 2.12)

例外: getBulk API メソッドへの呼び出しでは、インスタンスレベルの情報はレポートされません。

.NET
現在は、利用できません。
Node.js
Node.js エージェントの場合は、バージョン 1.31.0 以上が必須。

データベース npm モジュール名 最小モジュールバージョン 最小エージェントバージョン
PostgreSQL pg 0.14.0 1.31.0
Redis redis 0.8.3 1.31.0
MongoDB mongodb 2.0.43 1.32.0
MySQL mysql 2.4.1 1.32.0
Memcached memcached 0.2.7 1.33.0
PHP
PHP エージェントの場合は、バージョン 6.8 以上が必須。

mysqlmysqliPDO mysql 拡張のインスタンス情報をサポートします。.

ホスト情報の収集を無効にするには、以下のオプションを使用します。

  • newrelic.ini にある newrelic.datastore_tracer.instance_reporting.enabledfalse を設定します。
  • newrelic.datastore_tracer.database_name_reporting.enabled = false でデータベース名を省略できます。
Python
Python エージェントの場合は、バージョン 2.72.0.52 以上が必須。

サポート:

データベース Python パッケージ名 最小パッケージバージョン 最小エージェントバージョン
PostgreSQL psycopg2 2.0.14 2.72.0.52
Ruby
Ruby エージェントの場合は、バージョン 3.17.0 以上が必須。

以下の ORM データベースをサポート:

ORM データベース アダプター名 最小エージェントバージョン
ActiveRecord 5+ PostgreSQL pg 3.17.0
MySQL mysql2 3.17.0
ActiveRecord 2.1 – 4 PostgreSQL pg 3.17.0
MySQL mysql 3.17.0
MySQL mysql2 3.17.0

Also supports these gem databases:

データベース Gem 名 最小 gem バージョン 最小エージェントバージョン
Memcached Dalli 2.6.4 3.17.1
Mongo DB mongo 2.1.0 3.17.1
Redis redis-rb 3.0.0 3.17.1

New Relic エージェントが、現在対応していないデータストアに対して、インスタンスレベルの情報を収集したい場合は、support.newrelic.comでサポートを受けてください。

データストアのインスタンスの詳細情報を使った、アプリの監視とトラブルシューティング

以下の例をスタートラインとして、アプリケーションと関連するデータストア・インスタンス間の接続に関するパフォーマンスを監視し、トラブルシューティングしてください。以下の例では、アプリにパフォーマンスの問題があり、背後にある原因が、アプリか? インデックス不足などのデータベース・インスタンスの設定上の問題か? 組織のリソースか? またはそれらの複合要因なのか? を判断するのに役立つ機能について解説します。

スロークエリ・トレースの例
Apdex が低下しており、何が、エンドユーザーに影響を与えているのか判断したいと考えているとします。New Relic APM の Database ページを見て、いくつか遅いクエリがあるとわかったとして、データベースのベンダーツールを使って、さらに詳細を調査できないか考えたとします。
この問題がインスタンス固有のものである可能性があるため、ベンダーツールを使う前に、遅いクエリが発生したデータベース名とインスタンスを知る必要があります。たとえば、インデックスが貼られていないことが原因かもしれません。New Relic APM の スロークエリ・トレースを使うと、クエリのパフォーマンス、データベースの名前とインスタンス、不適切なクエリや非効率なクエリを特定することができます。

APM Databases slow query details: Database and instances information
APM > (選択したアプリ) > Databases > (選択した DB 操作) > (選択した遅いクエリ) > Trace details: 上記は、特定のデータベースとインスタンスを特定しているスロークエリ・トレースの例です。

トランザクション・トレースの例
アプリにパフォーマンスの問題がある場合は、New Relic APM Transactions ページを使って、気になるトランザクションを特定できます。遅いトランザクションのトランザクショントレースを選択すると、データベースの処理時間が、トランザクションのパフォーマンス低下における主な原因であることがわかります。

選択した トランザクショントレースのDetailsタブで、Database [database icon]アイコンを選択して、データベース・クエリ情報を確認します。クエリの詳細とクエリが実行された特定のインスタンスの両方が表示されます。これをキーとして、データベースベンダーツールを使って、問題をさらに診断できます。

APM transaction trace: Database and instances information
APM > (選択したアプリ) > Transactions > (選択したトレース) > Trace details: アプリケーションのパフォーマンス上の問題を引き起こしている特定のデータベースとインスタンスに関する情報を表示するには、Database アイコンを選択します。

サービスマップの例
お使いの環境でパフォーマンスの問題があり、呼び出し元のアプリと特定のデータベース・インスタンスの間のパフォーマンス問題に対してのトラブルシューティングと評価を行いたいと考えているとします。

New Relic APM Service maps ページから、データベースや外部サービスを含むアプリケーションの接続や依存関係に関する概要を確認します。選択したサービスマップの詳細から、以下の操作を実行できます。/p>

  • アプリ外部サービスとデータストア・インスタンス間の接続における色分けされた健康状態を確認します。(New Relic は、シンプルなベースライン手法を使って、直近15分間のパフォーマンスと過去1週間の平均とを比較して判断しています)
  • サービスマップ上の時系列チャートで、特定のアプリケーション、インスタンス、または両方をフィルタし、想定外のパフォーマンスの急上昇に対するレスポンスタイム1分当たりのリクエスト数(スループット)を確認します。(これにより、他のサービスとのリソースやスループット時間に影響を与える異常値や「騒々しい隣人」かを簡単に特定できるようになります。)
  • パフォーマンスに想定外の影響を及ぼす可能性のある異常値を特定できます。

New Relic のサービスマップで、問題があるデータベースやインスタンスを特定したら、トランザクショントレースと遅いクエリトレース、およびデータベースベンダーツールを使用して問題をさらに調査します。

レスポンスタイムが急上昇した2つの MySQL インスタンスの例を以下に示します。Instances フィルターを選択すると、パフォーマンスの問題をさらに詳しく調べることができます。

crop-service-map-instances.png

Insights のダッシュボードとウィジェットの例
データベース・インスタンスの詳細機能をサポートしている APM エージェントを使っていれば、New Relic Insights から、レスポンスタイムやスループットなどのタイムスライスのメトリクスを利用できます。パフォーマンスの問題や傾向を可視化できるカスタムダッシュボードメトリックウィジェットを作成して、共有することもできます。
インスタンスのパフォーマンスに関するカスタムメトリクス上のアラートの例
事前に New Relic Alerts を設定して、顧客に悪影響を与える前に、アプリとデータベースインスタンスの間におけるパフォーマンスの問題について通知を受け取れるようにします。定義した Critical アラートの閾値に達したときに、PagerDuty、Webhooks などを通じて適切なスタッフに自動的に通知するようにアラートポリシーを作成できます。

アラートポリシーの設定として、以下の形式を使用すると、特定のインスタンス用のカスタムメトリクスで条件を作成できます。

Datastore/instance/vendor/host/port

例:

Datastore/instance/MySQL/msql-agent-1/12345

関連情報

関連する情報は以下のとおりです。

  • New Relic APM Overview ページ (New Relic APM でホストのパフォーマンス概要を表示し、New Relic Infrastructure とリンクして詳細情報を調べることができます。)
  • New Relic Infrastructure Compute ページ (組織のリソースのコンテキストから、ホストやインスタンス関連のパフォーマンスの問題を表示できます。)