Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


14.5.2 InnoDB File-Per-Table モード

従来、InnoDB のすべてのテーブルとインデックスは、システムテーブルスペースに格納されていました。このモノリシック方式は、データの拡大を綿密に計画した、データベース処理に完全に特化したマシンに対象を絞った方式です。この方式では、MySQL に割り当てられるどのディスクストレージも、他の目的のために要求されることはありません。InnoDBfile-per-table モードは、InnoDB の各テーブルとそのインデックスを個別のファイルに格納する方式の、柔軟性を向上した代替手段です。.ibd のような各ファイルは、それぞれのテーブルスペースを表します。このモードは innodb_file_per_table 構成オプションで制御され、MySQL 5.6.6 以降ではデフォルトです。

File-Per-Table モードの利点

  • テーブルを切り詰めたり、削除したりするときに、オペレーティングシステムのディスクスペースを再利用できます。file-per-table モードがオフに切り替えられたときに作成されたテーブルの場合、テーブルを切り詰めたり、削除したりすると、内部的に ibdata ファイルに空き領域が作成されますが、その空き領域は新しい InnoDB データにのみ使用できます。

  • TRUNCATE TABLE 操作は、個々の .ibd ファイルで実行する場合よりも高速です。

  • I/O の最適化、容量管理、またはバップアップのために、特定のテーブルを別々のストレージデバイスに格納することができます。前のリリースでは、セクション8.11.3.1「シンボリックリンクの使用」で述べられているように、ほかのドライブにデータベースディレクトリ全体を移動し、MySQL データディレクトリにシンボリックリンクを作成する必要がありました。MySQL 5.6.6 以降では、セクション14.5.4「テーブルスペースの位置の指定」で述べられているように、構文 CREATE TABLE ... DATA DIRECTORY = absolute_path_to_directory を使用して各テーブルの位置を特定できます。

  • OPTIMIZE TABLE を実行して、テーブルスペースを圧縮または再作成できます。OPTIMIZE TABLE を実行すると、InnoDB は実際のデータの格納に必要なスペースだけを使用して、一時名を持つ新しい .ibd ファイルを作成します。最適化が完了すると、InnoDB は古い .ibd ファイルを削除し、新しい .ibd ファイルで置き換えます。前の .ibd ファイルは非常に大きくなったが、実際のデータはそのサイズの一部を占めるだけの場合、OPTIMIZE TABLE を実行すると、未使用領域を再利用できます。

  • データベース全体ではなく、個別の InnoDB テーブルを移動できます。

  • ある MySQL インスタンスから別のインスタンスに個別の InnoDB テーブルをコピーできます (トランスポータブルテーブルスペース 機能として知られています)。

  • innodb_file_per_table が有効なときに作成されたテーブルは、Barracuda ファイル形式を使用できます。Barracuda ファイル形式は、圧縮 および ダイナミック の行フォーマットなどの機能に対応します。innodb_file_per_table がオフのときに作成されたテーブルは、これらの機能を使用できません。これらの機能を既存のテーブルに利用するには、file-per-table 設定をオンにして、既存のテーブルで ALTER TABLE t ENGINE=INNODB を実行します。テーブルを変換する前に、セクション14.6.4「MyISAM から InnoDB へのテーブルの変換」を参照してください。

  • ダイナミック行フォーマットを使用して、大きな BLOB またはテキストカラムを持つテーブルでストレージ効率を向上させることができます。

  • innodb_file_per_table を使用すると、リカバリが成功する可能性が高くなることがあります。また破損が発生した場合、サーバーが再起動できない場合、またはバックアップおよびバイナリログが使用できない場合に、時間が節約できる可能性があります。

  • MySQL Enterprise Backup 製品を使用して、他の InnoDB テーブルの使用を中断せずに、単一のテーブルを迅速にバックアップしたり、リストアしたりできます。詳細は、Partial Backup and Restore Optionsを参照してください。

  • File-per-table モードを使用すると、バックアップからテーブルを除外できます。これは、それほど頻繁にバックアップを取る必要のないテーブル、または別のスケジュールでバックアップが必要なテーブルに有効です。

  • file-per-table モードは、テーブルをコピーまたはバックアップするときにレポートする、テーブルごとのステータスに便利です。

  • file-per-table モードを使用すると、MySQL にアクセスせずに、ファイルシステムレベルでテーブルサイズをモニターできます。

  • 一般的な Linux ファイルシステムでは、innodb_flush_methodO_DIRECT に設定されていると、1 つのファイルへの並列書き込みは許可されていません。その結果、innodb_flush_method と併せて innodb_file_per_table を使用すると、パフォーマンスが向上する可能性があります。

  • innodb_file_per_table が無効な場合、テーブル、データディクショナリ、および Undo ログに対して 1 つの共有テーブルスペース (システムテーブルスペース) があります。この 1 つのテーブルスペースのサイズの制限値は 64TB です。innodb_file_per_table が有効である場合、各テーブルには独自のテーブルスペースがあり、各テーブルスペースのサイズの制限値は 64TB です。関連情報については、セクションD.10.3「テーブルサイズの制限」を参照してください。

File-Per-Table モードの考えられる短所

  • innodb_file_per_table の場合、各テーブルには未使用のテーブルスペースがある場合があり、そのテーブルスペースを利用できるのは同じテーブルの行だけです。これは、テーブルスペースが適切に管理されていないと、無駄なテーブルスペースが減るのではなく、増える結果となる可能性があります。

  • fsync 操作は、1 つのファイルではなく、各オープンテーブルで実行する必要があります。ファイルごとに別々の fsync 操作があるため、複数のテーブルへの書き込み操作を 1 つの I/O 操作に結合することはできません。このため、InnoDBfsync 操作の総数を増やして実行する必要がある可能性があります。

  • mysqld では、テーブル当たり 1 つのオープンファイルの処理を維持する必要があるため、大量のテーブルがある場合、パフォーマンスに影響が出る可能性があります。

  • より多くのファイルディスクリプタが使用されます。

  • innodb_file_per_table は、MySQL 5.6.6 以降ではデフォルトでオンです。MySQL 5.5 または 5.1 との下位互換性に懸念がある場合、無効化の検討をお勧めします。innodb_file_per_table を無効にすると、ALTER TABLE がテーブル (ALGORITHM=COPY) を再作成する場合、ALTER TABLEInnoDB テーブルがシステムのテーブルスペースから個々の .ibd ファイルに移動するのが抑えられます。

    たとえば、InnoDB テーブルのクラスタインデックスを再構築する場合、テーブルはinnodb_file_per_table の現在の設定を使用して再作成されます。この動作は、InnoDB のセカンダリインデックスを追加または削除するときには適用されません。セカンダリインデックスがテーブルを再構築しないで作成された場合、現在の innodb_file_per_table 設定にかかわらず、そのインデックスはテーブルデータと同じファイルに格納されます。

  • テーブルが増えていくと、DROP TABLE およびテーブルスキャンのパフォーマンスが下がることがあるフラグメンテーションが増える可能性があります。しかし、フラグメンテーションが管理されている場合、ファイル自身のテーブルスペース内にファイルがあると、パフォーマンスが向上する可能性があります。

  • バッファープールはテーブルごとのテーブルスペースを削除するときにスキャンされるため、サイズが数十ギガバイトのバッファープールに数秒かかる場合があります。スキャンは広範囲に内部ロックをかけて実行されるため、他の操作を遅らせる場合があります。共有テーブルスペース内のテーブルには影響ありません。

  • 自動拡張の共有テーブルスペースが満杯になったときに、そのサイズを拡張する場合の増分サイズ (MB 単位) を定義する innodb_autoextend_increment 変数は、file-per-table テーブルスペースファイルに適用されません。innodb_autoextend_increment の値にかかわらず、file-per-table テーブルスペースファイルは自動拡張です。拡張は少量で始まり、その後の拡張は増分が 4MB で発生します。


User Comments
Sign Up Login You must be logged in to post a comment.