システムテーブルスペースは、変更バッファの記憶域です。 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
変数は増分サイズを制御します。
別のデータファイルを追加して、システムテーブルスペースのサイズを増やすこともできます。 これを行うには:
MySQL Server を停止させます。
innodb_data_file_path
設定の最後のデータファイルがautoextend
属性で定義されている場合は、それを削除し、現在のデータファイルサイズを反映するように size 属性を変更します。 指定する適切なデータファイルサイズを決定するには、ファイルシステムでファイルサイズを確認し、その値を最も近い MB 値 (MB は 1024 x 1024) に切り捨てます。innodb_data_file_path
設定に新しいデータファイルを追加し、オプションでautoextend
属性を指定します。autoextend
属性は、innodb_data_file_path
設定の最後のデータファイルに対してのみ指定できます。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 テーブルスペース」を参照してください。
InnoDB
のシステムテーブルスペースでは、データファイルとして RAW ディスクパーティションを使用できます。 この方法を使用すると、ファイルシステムのオーバーヘッドが発生せずに、Windows 上および一部の Linux と Unix 上でバッファーに入れられない I/O が有効になります。 RAW パーティションを使用する場合と使用しない場合でテストを実行して、この変更によって実際にシステム上のパフォーマンスが改善されるかどうかを確認します。
RAW ディスクパーティションを使用する場合は、MySQL サーバーを実行しているユーザー ID がそのパーティションに対する読み取り権限および書き込み権限を持っていることを確認します。 たとえば、mysql
ユーザーとしてサーバーを実行する場合は、そのパーティションが mysql
によって読み取り可能および書き込み可能である必要があります。 --memlock
オプションを付けてサーバーを実行する場合は、サーバーを root
として実行する必要があるため、パーティションが root
によって読み取り可能および書き込み可能である必要があります。
次で説明する手順には、オプションファイルの変更が伴います。 追加情報については、セクション4.2.2.2「オプションファイルの使用」を参照してください。
Linux および Unix システムでの RAW ディスクパーティションの割り当て
-
新しいデータファイルを作成する際は、
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
サーバーを再起動します。
InnoDB
によってnewraw
キーワードが認識され、新しいパーティションが初期化されます。 ただし、まだInnoDB
テーブルを作成したり変更したりしないでください。 そうしなければ、サーバーを次に再起動したときにInnoDB
によってパーティションが再初期化され、変更がすべて失われます。 (安全策として、InnoDB
では、newraw
を含むパーティションが指定されたときにユーザーがデータを更新することが回避されます。)-
InnoDB
によって新しいパーティションが初期化されたら、サーバーを停止し、データファイルの指定でnewraw
をraw
に変更します。[mysqld] innodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
サーバーを再起動します。 これにより、
InnoDB
で変更を行うことが許可されます。
Windows での RAW ディスクパーティションの割り当て
Windows システムでは、Linux および Unix システムで説明したものと同じ手順および付随するガイドラインが適用されます。ただし、Windows では innodb_data_file_path
の設定がわずかに異なります。
-
新しいデータファイルを作成する際は、
innodb_data_file_path
オプションのデータファイルサイズの直後に、newraw
というキーワードを指定します。[mysqld] innodb_data_home_dir= innodb_data_file_path=//./D::10Gnewraw
//./
は、物理ドライブにアクセスするための Windows の構文\\.\
に対応しています。 前述の例では、D:
がパーティションのドライブ文字です。 サーバーを再起動します。
InnoDB
によってnewraw
キーワードが認識され、新しいパーティションが初期化されます。-
InnoDB
によって新しいパーティションが初期化されたら、サーバーを停止し、データファイルの指定でnewraw
をraw
に変更します。[mysqld] innodb_data_home_dir= innodb_data_file_path=//./D::10Graw
サーバーを再起動します。 これにより、
InnoDB
で変更を行うことが許可されます。