MySQL を深く学び、InnoDB の論理ストレージ構造を理解する

青灯夜游
リリース: 2021-12-10 19:20:21
転載
2056 人が閲覧しました

この記事では、InnoDB の論理ストレージ構造について説明します。お役に立てば幸いです。

MySQL を深く学び、InnoDB の論理ストレージ構造を理解する

#InnoDB の論理ストレージ構造

InnoDB では、作成したテーブルと対応するインデックス データは拡張機能に保存されます。 .ibd ファイルの場合、このファイル パスは、まず mysql 変数

datadirを確認してから、対応するデータベース名ディレクトリを入力することで取得できます。多くの ibd が表示されます。ファイル名はテーブル名です。2 つあります。ここでのタイプは、表スペース、共有表スペース (またはシステム表スペース)、および独立表スペース・ファイルです。 [関連する推奨事項:mysql ビデオ チュートリアル]

共有テーブル スペースの場合、すべてのテーブル データと対応するインデックスがここに保存されますが、独立テーブル スペースは各テーブルのデータとインデックスです。現在の 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)
ログイン後にコピー

Modification

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
ログイン後にコピー

閉じた後、新しい ibd ファイルが作成されていないことがわかります。

表スペースはセグメント、エクステント、ページで構成され、ネットワーク図を示します。

MySQL を深く学び、InnoDB の論理ストレージ構造を理解する

1. セグメント

テーブルスペースはセグメントで構成され、物理ファイルを管理するための論理構造です。セグメントにはデータセグメント、インデックスセグメント、ロールバックセグメントがあり、各セグメントはN個の領域と32個の分散ページから構成されます。

InnoDB ストレージ エンジン テーブルはインデックスによって編成されているため、データはインデックスであり、インデックスはデータです。通常、インデックスを作成すると、非リーフ ノード セグメントとリーフという 2 つのセグメントが作成されます。ノードセグメント。

2. エリア

エリアは連続したページから構成される空間であり、いずれの場合も各エリアのサイズは1MBです。リージョン内のページの連続性を確保するために、InnoDB ストレージ エンジンはディスクから一度に 4 ~ 5 つのリージョンを適用します。デフォルトでは、InnoDB ストレージ エンジンのページ サイズは 16 KB です。これは、64 の連続したページがあることを意味します (16*64=1024=1M)。

InnoDB1.2.x バージョンではパラメータ

innodb_page_sizeが追加され、このパラメータによりデフォルトのページ サイズを 4K、8K、

3 に設定できます。ページは、InnoDB ストレージ エンジンのディスク管理の最小単位です。デフォルトは 16kb です。ページ サイズは、パラメータ

innodb_page_size

を使用して 4K、8K、または 16K に設定できます。 InnoDB は、さまざまな目的を達成するために多くのタイプのページを設計しました。InnoDB ストレージ エンジンの一般的なページ タイプは次のとおりです:

    データ ページ
  • undo ページ
  • システムページ
  • 取引データページ(取引システムページ)
  • バッファビット画像の挿入ページ
  • #バッファ空きリストの挿入ページ
  • #非圧縮バイナリ ラージ オブジェクト ページ

  • #圧縮バイナリ ラージobject page

  • 次のコマンドでサイズを確認できます。

    mysql> show status like 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec) mysql>
    ログイン後にコピー

    以下は InnoDB データ ページ構造であり、7 つの部分で構成されています。

##名前MySQL を深く学び、InnoDB の論理ストレージ構造を理解する

機能

4.行

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!
ページヘッダー、チェックサム、前後のページのレコードの一部の情報を記録します。 #Infimum supremum 行レコード 空き領域 ページ ディレクトリ ファイル トレーラー
ファイルheader
ページヘッダー は、ページのステータス情報を記録します。ストレージ情報、最初のレコードの位置
#InnoDB の各データ ページには 2 つの仮想行レコードがあり、レコード境界を制限するために使用されます
実際に格納された行データ情報
空き領域、リンク リスト構造
# レコードの相対的な場所を格納します
innodb はこれを使用して、ページがディスクに完全に書き込まれました