Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

15.6.3.1 システムテーブルスペース

システムテーブルスペースは、変更バッファの記憶域です。 file-per-table または一般的なテーブルスペースではなく system テーブルスペースにテーブルが作成されている場合は、テーブルおよびインデックスデータが含まれることもあります。 以前のバージョンの MySQL では、システムテーブルスペースに InnoDB データディクショナリが含まれていました。 MySQL 8.0 では、InnoDB は MySQL データディクショナリにメタデータを格納します。 第14章「MySQL データディクショナリを参照してください。 以前の MySQL リリースでは、システムテーブルスペースに二重書込みバッファ記憶域も含まれていました。 この記憶域は、MySQL 8.0.20 の時点で別々の二重書込みファイルに存在します。 セクション15.6.4「二重書き込みバッファー」を参照してください。

システムテーブルスペースには、1 つ以上のデータファイルを含めることができます。 デフォルトでは、ibdata1 という名前の単一のシステムテーブルスペースデータファイルがデータディレクトリに作成されます。 システムテーブルスペースデータファイルのサイズと数は、innodb_data_file_path 起動オプションによって定義されます。 構成情報については、システムテーブルスペースデータファイル構成 を参照してください。

システムテーブルスペースの詳細は、このセクションの次のトピックを参照してください:

システムテーブルスペースのサイズ変更

このセクションでは、システムテーブルスペースのサイズを増減する方法について説明します。

システムテーブルスペースのサイズの増加

システムテーブルスペースのサイズを増やす最も簡単な方法は、自動拡張するように構成することです。 これを行うには、innodb_data_file_path 設定で最後のデータファイルの autoextend 属性を指定し、サーバーを再起動します。 例:

innodb_data_file_path=ibdata1:10M:autoextend

autoextend 属性が指定されている場合、データファイルのサイズは、領域が必要になると 8MB ずつ自動的に増加します。 innodb_autoextend_increment 変数は増分サイズを制御します。

別のデータファイルを追加して、システムテーブルスペースのサイズを増やすこともできます。 これを行うには:

  1. MySQL Server を停止させます。

  2. innodb_data_file_path 設定の最後のデータファイルが autoextend 属性で定義されている場合は、それを削除し、現在のデータファイルサイズを反映するように size 属性を変更します。 指定する適切なデータファイルサイズを決定するには、ファイルシステムでファイルサイズを確認し、その値を最も近い MB 値 (MB は 1024 x 1024) に切り捨てます。

  3. innodb_data_file_path 設定に新しいデータファイルを追加し、オプションで autoextend 属性を指定します。 autoextend 属性は、innodb_data_file_path 設定の最後のデータファイルに対してのみ指定できます。

  4. MySQL Server を起動する

たとえば、このテーブルスペースには自動拡張データファイルが 1 つあります:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

データファイルが時間の経過とともに 988MB に増加したとします。 これは、現在のデータファイルサイズを反映するように size 属性を変更した後、および新しい 50MB の自動拡張データファイルを指定した後の innodb_data_file_path 設定です:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

新しいデータファイルを追加する場合は、既存のファイル名を指定しないでください。 InnoDB では、サーバーの起動時に新しいデータファイルが作成され、初期化されます。

注記

size 属性を変更して、既存のシステムテーブルスペースデータファイルのサイズを増やすことはできません。 たとえば、innodb_data_file_path 設定を ibdata1:10M:autoextend から ibdata1:12M:autoextend に変更すると、サーバーの起動時に次のエラーが発生します:

[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system
data file './ibdata1' is of a different size 640 pages (rounded down to MB) than
specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!

このエラーは、既存のデータファイルサイズ (InnoDB ページで表示) が構成ファイルで指定されたサイズと異なることを示しています。 このエラーが発生した場合は、以前の innodb_data_file_path 設定をリストアし、システムテーブルスペースのサイズ変更手順を参照してください。

InnoDB のページサイズは、innodb_page_size 変数によって定義されます。 デフォルトは 16384 バイトです。

InnoDB システムテーブルスペースのサイズの縮小

既存のシステムテーブルスペースのサイズの縮小はサポートされていません。 小さいシステムテーブルスペースを実現する唯一のオプションは、バックアップから目的のシステムテーブルスペース構成で作成された新しい MySQL インスタンスにデータをリストアすることです。

バックアップの作成の詳細は、セクション15.18.1「InnoDB バックアップ」 を参照してください。

新しいシステムテーブルスペースのデータファイルの構成の詳細。 システムテーブルスペースデータファイル構成を参照してください。

大規模なシステムテーブルスペースを回避するには、データに file-per-table テーブルスペースを使用することを検討してください。 File-per-table テーブルスペースはデフォルトのテーブルスペースタイプで、InnoDB テーブルの作成時に暗黙的に使用されます。 システムテーブルスペースとは異なり、file-per-table テーブルスペースで作成されたテーブルを切り捨てたり削除すると、ディスク領域がオペレーティングシステムに戻されます。 詳細は、セクション15.6.3.2「File-Per-Table テーブルスペース」を参照してください。

システムテーブルスペースに対する RAW ディスクパーティションの使用

InnoDBシステムテーブルスペースでは、データファイルとして RAW ディスクパーティションを使用できます。 この方法を使用すると、ファイルシステムのオーバーヘッドが発生せずに、Windows 上および一部の Linux と Unix 上でバッファーに入れられない I/O が有効になります。 RAW パーティションを使用する場合と使用しない場合でテストを実行して、この変更によって実際にシステム上のパフォーマンスが改善されるかどうかを確認します。

RAW ディスクパーティションを使用する場合は、MySQL サーバーを実行しているユーザー ID がそのパーティションに対する読み取り権限および書き込み権限を持っていることを確認します。 たとえば、mysql ユーザーとしてサーバーを実行する場合は、そのパーティションが mysql によって読み取り可能および書き込み可能である必要があります。 --memlock オプションを付けてサーバーを実行する場合は、サーバーを root として実行する必要があるため、パーティションが root によって読み取り可能および書き込み可能である必要があります。

次で説明する手順には、オプションファイルの変更が伴います。 追加情報については、セクション4.2.2.2「オプションファイルの使用」を参照してください。

Linux および Unix システムでの RAW ディスクパーティションの割り当て
  1. 新しいデータファイルを作成する際は、innodb_data_file_path オプションのデータファイルサイズの直後に、newraw というキーワードを指定します。 パーティションは、少なくとも指定したサイズと同じである必要があります。 ディスク指定の 1M バイトは通常 1,000,000 バイトを意味するのに対して、InnoDB 内の 1M バイトは 1024 × 1024 バイトであることに注意してください。

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw
  2. サーバーを再起動します。 InnoDB によって newraw キーワードが認識され、新しいパーティションが初期化されます。 ただし、まだ InnoDB テーブルを作成したり変更したりしないでください。 そうしなければ、サーバーを次に再起動したときに InnoDB によってパーティションが再初期化され、変更がすべて失われます。 (安全策として、InnoDB では、newraw を含むパーティションが指定されたときにユーザーがデータを更新することが回避されます。)

  3. InnoDB によって新しいパーティションが初期化されたら、サーバーを停止し、データファイルの指定で newrawraw に変更します。

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
  4. サーバーを再起動します。 これにより、InnoDB で変更を行うことが許可されます。

Windows での RAW ディスクパーティションの割り当て

Windows システムでは、Linux および Unix システムで説明したものと同じ手順および付随するガイドラインが適用されます。ただし、Windows では innodb_data_file_path の設定がわずかに異なります。

  1. 新しいデータファイルを作成する際は、innodb_data_file_path オプションのデータファイルサイズの直後に、newraw というキーワードを指定します。

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=//./D::10Gnewraw

    //./ は、物理ドライブにアクセスするための Windows の構文 \\.\ に対応しています。 前述の例では、D: がパーティションのドライブ文字です。

  2. サーバーを再起動します。 InnoDB によって newraw キーワードが認識され、新しいパーティションが初期化されます。

  3. InnoDB によって新しいパーティションが初期化されたら、サーバーを停止し、データファイルの指定で newrawraw に変更します。

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=//./D::10Graw
  4. サーバーを再起動します。 これにより、InnoDB で変更を行うことが許可されます。