この記事では、InnoDB の論理ストレージ構造について説明します。お役に立てば幸いです。
datadirを確認してから、対応するデータベース名ディレクトリを入力することで取得できます。多くの ibd が表示されます。ファイル名はテーブル名です。2 つあります。ここでのタイプは、表スペース、共有表スペース (またはシステム表スペース)、および独立表スペース・ファイルです。 [関連する推奨事項:
mysql ビデオ チュートリアル]
innodb_data_file_path、
mysql> show variables like 'innodb_data_file_path'; +-----------------------+------------------------+ | Variable_name | Value | +-----------------------+------------------------+ | innodb_data_file_path | ibdata1:12M:autoextend | +-----------------------+------------------------+ 1 row in set (0.00 sec)
innodb_file_per_tableを通じて切り替えることができます。が有効になっている場合、各テーブルのデータは別個のテーブルスペースファイルに配置されます。また、各テーブルのテーブルスペースにはデータとインデックスのみが格納され、ロールバック情報、システムトランザクション情報などの他のタイプのデータが格納されることにも注意してください。 、およびセカンダリ書き込みバッファは元の共有テーブルスペースに引き続き格納されます。
innodb_file_per_tableのステータスを確認できます。
mysql> show variables like '%innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec)
innodb_file_per_tableStatus
set global innodb_file_per_table=0;
innodb_file_per_tableが 0 に等しい場合、つまり OFF が閉じられている場合、作成されたテーブルは保存されます次の例のように、システムによって共有されるテーブルスペース内。
1.创建database_1数据库 mysql> create database database_1; Query OK, 1 row affected (0.02 sec) 2. 当前状态 mysql> show variables like '%innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec) 3. 创建表 mysql> create table t1(id int(11)); Query OK, 0 rows affected, 1 warning (0.05 sec) 4. 查看ibd文件 root@hxl-PC:/var/lib/mysql/database_1# ls t1.ibd root@hxl-PC:/var/lib/mysql/database_1# 5. 关闭innodb_file_per_table后在创建表 mysql> set global innodb_file_per_table=0; Query OK, 0 rows affected (0.01 sec) mysql> create table t2(id int(11)); Query OK, 0 rows affected, 1 warning (0.05 sec) 6. 查看ibd文件 root@hxl-PC:/var/lib/mysql/database_1# ls t1.ibd
innodb_page_sizeが追加され、このパラメータによりデフォルトのページ サイズを 4K、8K、
を使用して 4K、8K、または 16K に設定できます。 InnoDB は、さまざまな目的を達成するために多くのタイプのページを設計しました。InnoDB ストレージ エンジンの一般的なページ タイプは次のとおりです:
#非圧縮バイナリ ラージ オブジェクト ページ
mysql> show status like 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec) mysql>
##名前
InnoDB存储引擎是面向行的,页里面又记录着行记录的信息,也就是数据是按照行存储的。行记录数据又是按照行格式进行存放的。每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200行,也就是7992行。
InnoDB存储引擎有两种文件格式,一种叫Antelops,另外一种叫Barracuda。
在Antelope文件格式下,有compact和redundant两种行记录格式。
在Barracuda文件格式下,有compressed和dynamic两种行记录格式。
可以通过以下方式查看当前格式,其中Row_format就是对应行格式存储类型。
mysql> show table status \G; *************************** 1. row *************************** Name: t1 Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 15 Avg_row_length: 1092 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: 2021-08-24 09:43:29 Update_time: 2021-08-24 14:43:35 Check_time: NULL Collation: utf8mb4_0900_ai_ci Checksum: NULL Create_options: Comment:
原文地址:https://juejin.cn/post/6999936914119720996
作者:i听风逝夜
更多编程相关知识,请访问:编程视频!!
以上がMySQL を深く学び、InnoDB の論理ストレージ構造を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
ファイルheader | |
---|---|
ページヘッダー | は、ページのステータス情報を記録します。ストレージ情報、最初のレコードの位置 |
#InnoDB の各データ ページには 2 つの仮想行レコードがあり、レコード境界を制限するために使用されます | |
実際に格納された行データ情報 | |
空き領域、リンク リスト構造 | |
# レコードの相対的な場所を格納します | |
innodb はこれを使用して、ページがディスクに完全に書き込まれました |