Skip to main content
Enterprise applications
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

MySQLとInnoDB

共同作成者

InnoDBはストレージとMySQLサーバの中間層として機能し、データをドライブに格納します。

エラー:グラフィックイメージが見つかりません

MySQL I/Oは次の2つのタイプに分類されます。

  • ランダムファイルI/O

  • シーケンシャルファイルI/O

エラー:グラフィックイメージが見つかりません

データファイルはランダムに読み取りおよび上書きされるため、IOPSが高くなります。そのため、SSDストレージを推奨します。

REDOログファイルとバイナリログファイルはトランザクションログです。それらはシーケンシャルに書き込まれるので、書き込みキャッシュを備えたHDDで優れたパフォーマンスを得ることができます。リカバリ時にシーケンシャルリードが発生しますが、ログファイルのサイズは通常データファイルより小さく、シーケンシャルリードはランダムリード(データファイルで発生)よりも高速であるため、パフォーマンスの問題が発生することはほとんどありません。

ダブル書き込みバッファはInnoDBの特別な機能です。InnoDBは、最初にフラッシュされたページをダブルライトバッファに書き込み、次にページをデータファイル上の正しい位置に書き込みます。このプロセスにより、ページの破損が防止されます。二重書き込みバッファがない場合、ドライブへの書き込みプロセス中に電源障害が発生すると、ページが破損する可能性があります。ダブル書き込みバッファへの書き込みはシーケンシャルであるため、HDD向けに高度に最適化されています。リカバリ時にシーケンシャルリードが発生します。

ONTAP NVRAMはすでに書き込み保護を提供しているため、ダブル書き込みバッファは必要ありません。MySQLにはパラメータがあります。 skip_innodb_doublewrite、ダブルライトバッファをディセーブルにします。この機能により、パフォーマンスが大幅に向上します。

挿入バッファはInnoDBの特別な機能でもあります。一意でないセカンダリインデックスブロックがメモリ内にない場合、InnoDBはエントリを挿入バッファに挿入して、ランダムなI/O操作を回避します。定期的に、挿入バッファはデータベース内のセカンダリインデックスツリーにマージされます。挿入バッファは、I/O要求を同じブロックにマージすることでI/O処理数を削減します。ランダムI/O処理はシーケンシャルです。また、インサートバッファはHDD用に高度に最適化されています。シーケンシャルライトと読み取りは、どちらも通常運用時に発生します。

元に戻すセグメントは、ランダムI/Oです。Multi-Version Concurrency(MVCC)を保証するために、InnoDBは元に戻すセグメントに古いイメージを登録する必要があります。元に戻すセグメントから以前の画像を読み取るには、ランダムな読み取りが必要です。繰り返し実行可能な読み取りで長時間のトランザクション(mysqldump—単一トランザクションなど)を実行したり、長時間のクエリを実行したりすると、ランダムリードが発生する可能性があります。したがって、この場合、元に戻すセグメントをSSDに保存する方が適しています。短いトランザクションまたはクエリのみを実行する場合、ランダムリードは問題ではありません。

ヒント
  • NetAppでは、InnoDBのI/O特性を考慮して、以下のストレージ設計レイアウトを推奨しています。

  • MySQLのランダムI/OおよびシーケンシャルI/O指向ファイルを1つのボリュームに格納

  • 純粋にシーケンシャルなI/O指向のMySQLファイルを格納するための別のボリューム

このレイアウトは、データ保護のポリシーと戦略の設計にも役立ちます。