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.event_id | イベント開始時のスレッド+現在のイベント番号 |
client.address / client.port | クライアントのホスト/ポート(ポートはMySQL 8.0.22以降でのみ入力され、それ以外の場合は0) |
network.peer.address / network.peer.port | ネットワーク層の属性と同様 |
mysql.blocking.blockers | このセッションの同時InnoDB行ロックブロッカーごとに1つの、{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で割ると、実行あたりの平均が得られます。これらは論理読み取りではなく、行数です。 |
db.query.comment_tags / .nr_service_guid | 同じ query_sample |
db.query.text.normalized.hash | 同じ query_sample |
db.server.query_plan
ステートメントの実行プランです。プランをtop_query/query_sample自体の統計とは独立してフィルタリング、ルーティング、またはドロップできるように、独自のイベントとして報告されます。db.server.top_queryまたはdb.server.query_sampleの少なくとも1つも有効になっている必要があります。有効にすると、mysql.query_planはdb.server.top_query/db.server.query_sampleレコードに保持されなくなります。EXPLAINのメカニズムについては、Execution plan collectionを参照してください。
| 属性 | 説明 |
|---|---|
db.system.name | mysql |
db.namespace | クエリのデフォルトのデータベース/スキーマです。クエリサンプルでは、これはスレッドの現在のデータベース(processlist_db)です;トップクエリでは、ダイジェストのSCHEMA_NAMEです。デフォルトのデータベースが選択されていない場合は空になります。 |
mysql.query_plan.hash | 仕様により、mysql.events_statements_summary_by_digest.digest(クエリダイジェスト)と同じ値に設定されます。 |
mysql.query_plan.source | プランが報告されたイベント(db.server.top_query または db.server.query_sample)であるため、ソースイベントごとにプランをルーティングまたはドロップできます。 |
mysql.query_plan | 利用可能な場合、ステートメントのクエリプランです。 |
実行プランの収集
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)と組み合わせてください。