物理的に言えば、InnoDB テーブルは、共有テーブルスペース ファイル (ibdata1)、排他テーブルスペース ファイル (ibd)、テーブル構造ファイル (.frm)、およびログ ファイル (REDO ファイルなど) で構成されます。 1. テーブル構造ファイル MYSQL でデータ テーブルを作成すると、そのデータ ディレクトリに対応するデータベース ディレクトリに、対応するテーブルの .frm ファイルが作成されます。.frm ファイルは、テーブル構造の定義など、各データ テーブルのメタデータ (メタ) 情報を保存するために使用されます。.frm ファイルはデータベース ストレージ エンジンとは関係ありません。つまり、ストレージ エンジンのすべてのデータ テーブルには、user.frm など、データ テーブル名 .frm という名前の .frm ファイルが必要です。.frm ファイルを使用すると、データベースがクラッシュしたときにテーブル構造を復元できます。 2. テーブルスペースファイル (1)表スペース構造分析 以下は InnoDB のテーブルスペース構造図です。 データ セグメントは B+ ツリーのリーフ ノードであり、インデックス セグメントは B+ ツリーの非リーフ ノードです。InnoDB ストレージ エンジンの管理はエンジン自体によって完了し、テーブルスペースは散在するセグメントで構成されます。セグメントには複数のエクステントが含まれます。 エクステントは 64 の連続したページで構成され、各ページのサイズは 16K です。つまり、各エクステントのサイズは 1MB です。新しいテーブルを作成すると、最初に 32 ページのフラグメントを使用してデータを格納し、データが使い果たされた後にエクステントが適用されます (InnoDB は、データのシーケンシャル パフォーマンスを確保するために、一度に最大 4 つのエクステントを適用します)。 (2)排他テーブルスペースファイル innodb_file_per_table がオンに設定されている場合、システムは各テーブルに対して table_name.ibd ファイルを生成します。このファイルには、テーブルに関連するデータ、インデックス、および内部データ ディクショナリ情報が格納されます。 (3)共有テーブルスペースファイル InnoDB ストレージ エンジンでは、デフォルトのテーブルスペース ファイルは ibdata1 (主に共有テーブルスペース データを格納) であり、次の図に示すように 10M に初期化され、拡張できます。 実際、InnoDB テーブルスペース ファイルは次のステートメントを使用して変更できます。 Innodb_data_file_path=ibdata1:370M;ibdata2:50M:自動拡張 共有テーブルスペース ストレージ方式を使用する場合、すべての Innodb データは、多数のファイルで構成できる個別のテーブルスペースに保存されます。テーブルは複数のファイルにまたがって存在できるため、テーブルのサイズ制限はファイル サイズの制限ではなく、テーブル自体の制限になります。 Innodb の公式ドキュメントによると、テーブルスペースの最大制限は 64 TB です。つまり、Innodb の単一テーブルの制限は基本的に約 64 TB です。もちろん、このサイズには、このテーブルのすべてのインデックスとその他の関連データが含まれます。 個別テーブルスペースストレージを使用する場合、各テーブルのデータは別々のファイルに保存されます。このとき、単一テーブルの制限はファイルシステムのサイズ制限になります。 以下は、さまざまなプラットフォーム上の個々の表領域ファイルの最大サイズです。
※以下はMySQLのドキュメントより抜粋です。 Windows ユーザーへの注意: FAT および VFAT (FAT32) は、MySQL の運用には適していません。 NTFSを使用する必要があります。 (4)共有表領域と排他表領域 共有表領域と排他表領域は、データが格納される方法を指します。 共有テーブルスペース: データベースのすべてのテーブル データとインデックス ファイルは 1 つのファイルに配置されます。この共有テーブルスペースのデフォルトのファイル パスは、データ ディレクトリにあります。 デフォルトのファイル名は ibdata1 で、10M に初期化されます。 排他的テーブルスペース: 各テーブルは独立したファイル (単一テーブルのデータ コンテンツとインデックス コンテンツを含む .ibd ファイル) に生成され、保存されます。 1) ストレージコンテンツの比較 排他テーブルスペースを使用した後: 各テーブルに対応するデータ、インデックス、挿入バッファは、専用のテーブルスペース(.idbファイル)に保存されます。 各テーブルに対応するUNDO情報、システムトランザクション情報、セカンダリ書き込みバッファなどは、元の共有テーブルスペース(ibdata1ファイル)に引き続き保存されます。 2) 機能の比較 共有表領域と独立表領域の具体的な利点と欠点は次のとおりです。 共有表領域: アドバンテージ: テーブルスペースは複数のファイルに分割され、異なるディスクに保存できます (テーブルスペース ファイルのサイズはテーブルのサイズによって制限されません。たとえば、テーブルを異なるファイルに分散できます)。 データとファイルはまとめて管理しやすくなっています。 欠点: すべてのデータとインデックスを 1 つのファイルに格納すると、非常に大きなファイルになります。大きなファイルは複数の小さなファイルに分割できますが、複数のテーブルとインデックスが混在してテーブルスペースに格納されます。このように、テーブルに対して大量の削除操作を実行すると、テーブルスペースに大量のギャップが発生します。特に、統計分析やロギング システムなどのアプリケーションでは、共有テーブル スペースを使用することは最も適していません。 独立したテーブルスペース: (設定ファイル (my.cnf) で innodb_file_per_table を設定) アドバンテージ:
独立した表領域を使用するテーブルの場合、どのように削除しても、表領域の断片化がパフォーマンスにそれほど深刻な影響を与えることはなく、対処する機会がまだあります。 a) テーブル削除操作によりテーブルスペースが自動的に再利用される b) 統計分析テーブルや日次値テーブルの場合は、大量のデータを削除した後、alter table TableName engine=innodb; を実行して未使用領域を縮小できます。 c) innodb-plugin を使用する Innodb の場合、truncate table を使用するとスペースも縮小されます。 5. サーバー リソースが限られており、単一のテーブル内のデータがそれほど大きくない場合は、独立したテーブルスペースの方が共有テーブルスペースよりも明らかに効率的です。ただし、MySQL はデフォルトで共有テーブルスペースを使用します。 欠点: 1 つのテーブルのサイズが 100 GB を超えるなど、大きすぎる可能性があります。 3) 共有表領域と排他表領域間の変換 排他的な空のテーブルスペース構成を変更し、次のパラメータを設定します。 innodb_data_home_dir = "/user/local/mysql/var" データベースファイルが保存されるディレクトリ innodb_log_group_home_dir = "/user/local/mysql/var" ログ保存ディレクトリ innodb_data_file_path=ibdata1:10M:autoextend は、拡張可能なサイズが 10 MB の ibdata1 という名前の別のファイル (共有データ ファイル) を設定します。ファイルの場所は指定されていないため、デフォルトでは MySQL データ ディレクトリ内になります。 innodb_file_per_table=1 共有テーブルスペースを使用するか、排他テーブルスペースを使用するか (1: 排他テーブルスペースを使用する、0: 共有テーブルスペースを使用する) innodb_file_per_table 変数を確認します。OFF の場合は、共有テーブルスペースが使用されていることを意味します (デフォルトでは、使用されるテーブルスペースは共有テーブルスペースです)。 innodb_file_per_table が変更されても、手動で変更しない限り、以前使用された共有テーブルスペースには影響しません。 知らせ: InnoDB はディレクトリを作成しないので、サーバーを起動する前に設定されたパス ディレクトリが存在することを確認してください。 データを移行およびバックアップするときは、データ ファイルの整合性に注意してください。 以下もご興味があるかもしれません:
|
<<: VirtualBox で作成された Debian 仮想マシンは Windows ホストとファイルを共有します
>>: Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)
毎日jQueryプラグイン - 検索履歴を作成するためのものです。参考までに、具体的な内容は次のとお...
1. はじめに最近、あるプロジェクトに取り組んでいたのですが、サーバーからクライアントに返される J...
1. スロークエリの用途は何ですか? long_query_time を超えて実行されるすべての S...
目次コンポーネント - タイムラインカスタムノードスタイルカスタムタイムスタンプコンポーネント - ...
ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...
今夜、数日間悩まされていた問題を解決しました。本当に解決したかどうかはわかりませんが、解決されている...
0x00 はじめに数か月前、Firefox に脆弱性 (CVE-2019-17016) があること...
半透明の境界線結果: 実装コード: <div> 半透明の境界線が見えますか? </...
日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...
MySQL カスタム値は、値を保存するための一時的なコンテナです。サーバーへの接続がアクティブである...
問題点: docker run に -v パラメータを追加すると、コンテナは常に再起動状態になります...
Vue 3.x プロジェクトの作成 npm init @vitejs/app my-vue-app ...
目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...
1. まずデータベースサーバーを停止しますサービスmysqld停止2.vim /etc/my.cnf...
1. MySQLデータベースの構成と関連概念まず、MySQL はリレーショナル データベースである...