MySQLインスタンスに関するより深いインサイトを得るために、以下のオプションを設定できます:
書き込みステートメントのクエリプラン
explain_modeをprocedureに設定すると、監視ユーザーにDML権限を付与することなく、NRDOT Collectorが書き込みステートメントのEXPLAINプランを収集できるようになります。設定すると、レシーバーは<schema>.explain_statementという名前のSQL SECURITY DEFINERプロシージャを検索します。そのプロシージャが存在しない場合、または監視ユーザーにその実行権限がない場合、レシーバーはinlineモードにフォールバックします。この状態では、書き込みステートメントはクエリプランの収集に失敗し、コレクターのログに次の警告が表示されます:unable to execute explain statement。
explain_modeをprocedureに設定するには、特権アカウント(たとえば、root)として、スキーマごとに1回以下を実行してください:
DELIMITER //CREATE DEFINER = 'root'@'%' PROCEDURE <YOUR_SCHEMA>.explain_statement(IN q TEXT)SQL SECURITY DEFINERBEGIN SET @nr_explain_sql = CONCAT('EXPLAIN FORMAT=JSON ', q); PREPARE nr_explain_stmt FROM @nr_explain_sql; EXECUTE nr_explain_stmt; DEALLOCATE PREPARE nr_explain_stmt;END//DELIMITER ;GRANT EXECUTE ON PROCEDURE <YOUR_SCHEMA>.explain_statement TO '<YOUR_DB_USERNAME>'@'%';GRANT EXECUTEステップは、CALLステートメントを実行する以上の目的で必要です。この権限がないと、監視ユーザーはレシーバーが存在確認に使用するinformation_schema.ROUTINES内のプロシージャを表示できません。GRANT EXECUTEを省略すると、プロシージャが欠落している場合と同じ結果になり、どちらの場合もレシーバーはinlineモードにフォールバックします。
ヒント
この設定はスキーマごとにステートフルです。データベースの作成または復元、あるいはプロシージャの削除を行うと、そのスキーマの書き込みステートメントのプラン収集が暗黙的に無効になり、inlineモードへのフォールバックがトリガーされます。SQL SECURITY DEFINERストアドルーチンは、その中のPREPARE/EXECUTEステートメントを通じて実行される動的SQLに、定義者の権限を適用します。これにより、SELECTのみの監視ユーザーが、直接の実行権限を持たないステートメントのプランを取得できるようになります。
ロック待機時間の追跡の有効化
events_waits_currentの消費者はロック待機時間情報を提供しますが、プラットフォーム固有の設定が必要です:
プラットフォーム | 方法 | 再起動後も永続しますか? |
|---|---|---|
セルフマネージドMySQL |
(
)で | はい |
AWS RDS |
| いいえ : 再起動またはフェイルオーバー時にリセットされます。再起動のたびに再実行するか、再接続時に消費者を自動的に再有効化できるように、レシーバーユーザーにこの
を付与します。 |