io/file/innodb/innodb_data_file - Amazon Aurora

io/file/innodb/innodb_data_file

io/file/innodb/innodb_data_file イベントは、ストレージからの I/O オペレーションに待機中のスレッドがある場合に発生します。

サポート対象エンジンバージョン

この待機イベント情報は、以下のエンジンバージョンでサポートされています。

Aurora MySQL バージョン 1 から 1.23.1 まで

Context

InnoDB バッファプールは Aurora MySQL がテーブルとインデックスデータをキャッシュする共有メモリ領域です。クエリはディスクから読み取ることなく、頻繁に使用されるデータにメモリから直接アクセスできます。イベントio/file/innodb/innodb_data_file は、データはバッファプールで使用できないため、クエリの処理にストレージ I/O 操作が必要であることを示します。

RDS は通常、読み取り、書き込み、フラッシュなどの I/O オペレーションを実行するときにこのイベントを生成します。RDS は、データ定義言語 (DDL) ステートメントの実行時にもこのイベントを生成します。これは、これらのステートメントに InnoDB データファイルの作成、削除、開く、閉じる、または名前の変更が含まれるために発生します。

待ち時間増加の考えられる原因

この イベントが通常よりも多く表示され、パフォーマンスの問題を示している可能性がある場合、典型的な原因は次のとおりです。

  • I/O を大量に消費するアプリケーションワークロードが急増すると、ストレージから読み込むクエリが増えるため、この待機イベントの発生がスパイクする可能性があります。

    スキャンされるページ数が大幅に増加すると、最も最近使用されていない (LRU) ページがバッファプールから高速に削除されます。非効率なクエリプランは、問題につながる可能性があります。クエリプランは、古い状態、インデックスの欠落、または非効率的に記述されたクエリが原因で、非効率的になる可能性があります。

  • ストレージ容量は十分ですが、ネットワークのスループットがインスタンスクラスの最大帯域幅を超えているため、I/O スロットリングが発生します。異なるインスタンスクラスのネットワークスループット容量については、Aurora 用の DB インスタンスクラスのハードウェア仕様 を参照してください。

  • 多くの行を読み取り、挿入し、また変更する DDL ステートメントないしトランザクションを含むオペレーション。例えば一括挿入、アップデート、または削除ステートメントは、WHERE 句の幅広い値を指定できます。

  • 多数の行をスキャンする SELECT クエリ。例えばBETWEEN または IN 句を使用するクエリは幅広いデータを指定することができます。

  • バッファプールが小さすぎるため、バッファープールのヒット率が低い。バッファプールが小さいほど、LRU ページがフラッシュされる頻度が高くなります。これにより、要求されたデータがディスクから読み込まれる可能性が高くなります。

アクション

待機イベントの原因に応じたさまざまなアクションをお勧めします。

問題のあるクエリを特定して最適化する

Performance Insights から、この待機の原因となるクエリダイジェストを見つけます。クエリのステートメント実行プランをチェックして、InnoDB バッファープールに読み込まれるページ数を減らすようにクエリを最適化できるかどうかを確認します。そうすることで、バッファプールから削除される最も最近使用されていないページの数が減ります。これにより、バッファプールのキャッシュヒット効率が向上し、I/O サブシステムのロードが軽減されます。

クエリのステートメント実行プランを確認するには、EXPLAIN ステートメントを実行します。このコマンドは、クエリの実行に関連する個々のステップを示しています。詳細については、MySQL ドキュメントの EXPLAIN でクエリを最適化を参照してください。

インスタンスのスケールアップ

ネットワークまたはバッファプールの容量が不十分であることが原因で io/file/innodb/innodb_data_file 待機イベントが起きている場合、RDS インスタンスをより高いインスタンスクラスタイプにスケールアップすることを検討してください。

  • ネットワークスループット - Amazon CloudWatch メトリクス network receive throughput および network transmit throughputの値の増加を確認します。インスタンスがインスタンスクラスのネットワーク帯域幅制限に達した場合は、RDS インスタンスをより高いインスタンスクラスタイプにスケールアップすることを検討してください。詳細については、「Aurora 用の DB インスタンスクラスのハードウェア仕様」を参照してください。

  • バッファプールサイズ — 低いバッファープールのヒット率をチェックします。Performance Insights でこの値をモニタリングするには、db.Cache.innoDB_buffer_pool_hit_rate.avg メトリクスをチェックします。このメトリクスを追加するには、[Manage metrics] (メトリクスの管理) を選択し、[Database metrics] (データベースメトリクス) タブの [Cache] (キャッシュ) で innoDB_buffer_pool_hit_rate を選択します。

    ヒット率が低い場合は、RDS インスタンスをより高いインスタンスクラスタイプにスケールアップすることを検討してください。

    注記

    バッファープールのサイズを制御する DB インスタンスパラメータは innodb_buffer_pool_size です。このパラメータ値は変更できますが、デフォルト値は各インスタンスクラスに最適化されているため、代わりにインスタンスクラスをスケールアップすることをお勧めします。

バッファースキャンの耐性を保つ

レポートクエリとオンライントランザクション処理 (OLTP) クエリが混在している場合は、バッファープールのスキャンを耐性に設定することを検討してください。これを行うには、パラメータ innodb_old_blocks_pctinnodb_old_blocks_time を調整します。これらのパラメータの効果は、インスタンスクラスのハードウェア、データ、およびワークロードタイプによって異なります。運用環境でこれらのパラメータを設定する前に、システムをベンチマークすることを強くお勧めします。詳細については、MySQL ドキュメントのバッファプールのスキャンを耐性にするを参照してください。