NRDOT Collectorによって収集された包括的なメトリクスを使用して、MySQLデータベースのパフォーマンスをモニターします。デフォルトでは、New Relicはデフォルトのメトリクスセクションで参照されているメトリクスを収集します。追加のメトリクスセクションにリストされている目的のメトリクスを有効にすることで、監視を強化できます。
追加のメトリクス
以下のメトリクスはデフォルトでは無効になっていますが、MySQLのパフォーマンスと健全性に関するより深いインサイトを得るために有効にすることができます。これらのメトリクスは機能ごとに整理されており、そのほとんどでMySQLへの直接接続が必要です。
ログイベント
db.server.query_sample
現在実行中のデータベースステートメントのリアルタイムの可視性 — 完全な実行ログではなく、スクレイプごとに取得されるポイントインタイムのスナップショット。デフォルトでは無効です。
| 属性 | 説明 |
|---|---|
db.system.name | mysql |
mysql.threads.thread_id | ステートメントを実行しているスレッドの一意の識別子 |
mysql.session.id | PROCESSLIST_ID — 経由で表示される接続ID SHOW PROCESSLIST |
user.name | フォアグラウンドスレッドのユーザー;バックグラウンドスレッドの場合は空 |
db.namespace | スレッドの現在のデータベース(processlist_db) |
mysql.threads.processlist_command | コマンドタイプ、またはアイドル状態の場合はSleep |
mysql.threads.processlist_state | スレッドの現在のアクション/状態 |
db.query.text | SQLステートメントテキスト |
mysql.events_statements_current.digest | SHA-256ステートメントダイジェスト |
mysql.events_statements_current.timer_start | ステートメントの開始を示す単調ピコ秒カウンター — スクレイプサイクル全体で安定した実行ごとのキー |
mysql.events_statements_current.timer_wait | 経過した実行時間(秒単位) |
mysql.events_waits_current.timer_wait | 経過した待機時間(秒単位)(events_waits_current消費者が必要です) |
mysql.wait_event_type | 待機イベント名(io、lock、synch)から派生したトップレベルの待機分類、または実際に待機していない場合はCPU/User sleep/other。mysql.wait_eventとペアになります。 |
mysql.wait_event | 詳細な待機の内訳 — カテゴリセグメントが削除された待機イベント名(たとえば、table/sql/handler、mutex/innodb/checkpoint_state)、または実際に待機していない場合はCPU/User sleep/other。mysql.wait_event_typeとペアになります。 |
mysql.wait_type | 待機イベントを生成した計装の生の未処理の名前 — 解析/分類された内訳については、mysql.wait_event_type/mysql.wait_eventを参照してください。 |
mysql.session.status | waiting、running 、または other |
mysql.query_plan / mysql.query_plan.hash | クエリプラン(利用可能な場合)とそのキャッシュキー |
mysql.event_id | イベント開始時のスレッド+現在のイベント番号 |
client.address / client.port | クライアントのホスト/ポート(ポートはMySQL 8.0.22以降でのみ入力され、それ以外の場合は0) |
network.peer.address / network.peer.port | ネットワーク層の属性と同様 |
mysql.blocking.blockers | このセッションの同時InnoDB行ロックブロッカーごとの{thread_id, session_id}タプルのJSON配列 — 複数存在する場合は、最初の1つだけではありません。ブロックされていない場合は"[]";解決される前に切断された場合、ブロッカーのsession_idはnullになります。 |
mysql.blocking.blocker.count | 同時ブロッカーの整数カウント。0はブロックされていないことを意味します。 |
mysql.session.client_name | session_connect_attrsからの、クライアントドライバーの自己申告によるID(たとえば、MySQL Connector/J)。ドライバーが接続属性を送信しない場合は空になります。 |
db.query.comment_tags / .nr_service_guid | APM相関コメントタグ — (オプション)APMとデータベースの相関関係を設定するをご覧ください。 |
db.query.text.normalized.hash | クロスエンジン相関のための正規化されたSQLのMD5 |
ヒント
!= 0ではなくmysql.blocking.blocker.count > 0でブロッキングをフィルタリングしてください — null != 0はNRQLでTRUEを評価するため、ブロックされていないセッションが結果に暗黙的に含まれることになります。
db.server.top_query
MySQL独自のperformance_schema.events_statements_summary_by_digestによってサーバー側で集計された、最も実行時間を消費しているクエリ — サンプル数ではなく、真のダイジェストごとの実行カウンターです。デフォルトでは無効です。
| 属性 | 説明 |
|---|---|
db.system.name | mysql |
db.query.text | SQLステートメントテキスト(難読化済み) |
db.namespace | ダイジェストの SCHEMA_NAME |
mysql.events_statements_summary_by_digest.digest | SHA-256ステートメントダイジェスト |
mysql.events_statements_summary_by_digest.count_star | ステートメントが実行された回数。累積ではなくスクレイプごとの差分として報告されます。 |
mysql.events_statements_summary_by_digest.sum_timer_wait | 合計実行時間、デルタ秒 |
mysql.events_statements_summary_by_digest.sum_rows_examined / .sum_rows_sent | デルタ行数 — count_starで割ると、1回の実行あたりの平均値が得られます。これらは論理読み取りではなく、行数です。 |
mysql.query_plan / mysql.query_plan.hash | クエリプラン(EXPLAIN経由)、利用可能な場合 — 実行プランの収集を参照してください |
db.query.comment_tags / .nr_service_guid | 同じ query_sample |
db.query.text.normalized.hash | 同じ query_sample |
実行プランの収集
EXPLAIN リテラルSQLステートメントが必要です — 正規化されたダイジェストテキストは、MySQLが実行できないプレースホルダー(SELECT ? FROM t WHERE id = ?)を使用します。
| MySQLバージョン | プランの利用可能性 |
|---|---|
8.0.3+ | 利用可能 — ダイジェストサマリーテーブルのquery_sample_textは実際のステートメントを保持します EXPLAIN |
5.x、8.0.0–8.0.2 | 利用不可 — 説明するquery_sample_textがありません |
キャプチャされたステートメントが切り捨てられた(...で終わる)場合、すべてのバージョンでEXPLAINはスキップされます — 推奨されるサーバーパラメーターを参照してください。
explain_mode | 行動 |
|---|---|
inline (デフォルト) | EXPLAIN FORMAT=json <statement>を直接実行します — SELECTのみのワークロードには十分です |
procedure | 監視ユーザーにDMLを付与せずに書き込みステートメント(UPDATE/DELETE/INSERT/REPLACE)を説明できるように、SQL SECURITY DEFINERプロシージャ(<schema>.explain_statement)を介してルーティングします。プロシージャがない場合はinlineにフォールバックします。スキーマごとに1回のセットアップ手順が必要です — 書き込みステートメントのクエリプランを参照してください。 |
重要
mysql.query_plan は生のEXPLAIN FORMAT=json出力であり、キャッシュする前に1要素のJSON配列にラップされるため、New Relicのログ取り込みによって自動的にフラット化されて破棄されることはありません。インデックス[0]を解析して、プランオブジェクトを復元します。
タイマー単位
テレメトリータイプ | フィールド | ユニット |
|---|---|---|
ログイベント(
、
) |
、
、
| 秒 |
メトリクス(ステートメントイベント、テーブル/インデックスのI/O待機、テーブルロック待機) |
単位あたり:ns | ナノ秒 |
重要
mysql.events_waits_current.timer_wait は、純粋で明確な待機/ブロック期間(合計経過時間ではない)である唯一のフィールドです — mysql.wait_event_type/mysql.wait_event(または生のmysql.wait_type)と組み合わせてください。