web-dev-qa-db-ja.com

表領域とは何ですか、なぜ使用されるのですか?

問題の調査中に、このエラーに遭遇しました。

30503 [エラー] InnoDB:以前に開いたテーブルスペースを開こうとしました。以前のテーブルスペースmysql/innodb_index_statsは、ファイルパス:./mysql/innodb_index_stats.ibdでスペースID:2を使用します。ファイルパスのスペースID:2を使用するテーブルスペースMydb/be_command_logを開けません:./Mydb/be_command_log.ibd

この問題について少し読んだ後、これが MySQLの既知の問題 であることを知りました。

しかし、私の問題は、表領域が実際にどのように機能するかについてあまり知らないことです。それらはどのように役立ちますか? この定義 と読みましたが、すべての情報を提供しているわけではありません。

誰かがテーブルスペースとは何か、どのように機能するかについての詳細な情報を共有できますか?

23
Bhupesh Pant

1つ以上のInnoDBテーブルおよび関連するインデックスのデータを保持できるデータファイル。

テーブルごとの情報クラビングの設定に基づいて、多くのタイプのテーブルスペースがあります。これらは、

a。システム表領域b。表領域ごとのファイルc。一般的なテーブルスペース

システムテーブルスペースに含まれる

  1. InnoDBデータディクショナリ。
  2. DoubleWriteバッファー。
  3. バッファを変更
  4. ログを元に戻します。

これとは別に、それも含まれています、

  1. テーブルと
  2. インデックスデータ

関連ファイルは.idbdata1

innodb_file_per_tableオプションは、MySQL 5.6以降でデフォルトで有効になっているため、テーブルごとに個別のデータファイルを使用して、テーブルごとのファイルテーブルスペースにテーブルを作成できます。 innodb_file_per_tableオプションを有効にすると、テーブル圧縮やトランスポータブルテーブルスペースなどの他のMySQL機能が利用可能になります。

関連ファイルは.idbd

InnoDBは一般的なテーブルスペースを導入しました MySQL 5.7.6。一般的なテーブルスペースは、CREATE TABLESPACE構文を使用して作成された共有テーブルスペースです。 MySQLデータディレクトリの外部で作成でき、複数のテーブルを保持でき、すべての行形式のテーブルをサポートします。

10
Bhupesh Pant

デフォルトでは、InnoDBには、識別子が0であるシステムテーブルスペースと呼ばれるテーブルスペースが1つだけ含まれています。innodb_file_per_table構成パラメーターを使用して、間接的にさらにテーブルスペースを作成できます。表領域は、一連のファイルで構成されています。ファイルのサイズは、データベースのブロックサイズで割り切れる必要はありません。なぜなら、最後の不完全なブロックを未使用のままにしておくことができるからです。新しいファイルが表領域に追加されると、ファイルの最大サイズも指定されます。現時点では、ファイルの作成時に既にファイルを最大サイズに拡張することをお勧めします。これは、テーブルスペースにさらにスペースが必要な場合にファイルを動的に拡張することを回避できるためです。データファイルは動的に拡張されますが、REDOログファイルは事前に割り当てられています。また、すでに前述したように、システムテーブルスペースのみが複数のデータファイルを持つことができます。また、表領域には複数のファイルを含めることができますが、それらは1つの大きなファイルが連結されていると見なされることも明確に述べられています。したがって、表領域内のファイルの順序は重要です。

から https://blogs.Oracle.com/mysqlinnodb/entry/data_organization_in_innodb

3
Rukshan Hassim

MySQL Innodb TableSpace は、dataディレクトリと呼ばれるディスク内のデータが存在する場所です(デフォルトでは"system tablespace")。例:

「/ var/lib/mysql」

MySQLバージョン5.6.6から、ユーザーはデータを保存するテーブルスペースを作成および指定でき、データ操作およびリカバリプロセスのスループットが可能になります。 InnoDBのfile-per-table機能は、各テーブルに個別の一般的なテーブルスペースを表す個別の。ibdデータインデックスファイルを提供します。データベース内の各テーブルが指すことができるように データディレクトリのさまざまな場所

例:

/home/{user}/test/data/{dbName}/{tableName}.ibd

/home/{user}/work/data/{dbName}/{tableName}.ibd

File-per-tableテーブルスペースの詳細については、この mysql documentation を参照してください。

2
S.K. Venkat

sqlクライアントはsqlオブジェクトのみを使用し、データベースサーバーがその情報を物理的に保存する場所を気にしません。

それが表領域の概念が必要な理由です。テーブルデータのようなsqlオブジェクトは、sqlクライアントの観点からテーブルスペースに入ります。

Dbサーバーの管理者は、物理的に移動したい場所にテーブルスペースを物理的に自由に配置できるようになりました。SQLクライアントプログラムは引き続き機能します。

1
user2587106