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

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

この記事では、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 の論理ストレージ構造を理解する

機能 ページヘッダー、チェックサム、前後のページのレコードの一部の情報を記録します。#Infimum supremum行レコード空き領域ページ ディレクトリ ファイル トレーラー

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 学習者の迅速な成長を支援します!
ファイルheader
ページヘッダーは、ページのステータス情報を記録します。ストレージ情報、最初のレコードの位置
#InnoDB の各データ ページには 2 つの仮想行レコードがあり、レコード境界を制限するために使用されます
実際に格納された行データ情報
空き領域、リンク リスト構造
# レコードの相対的な場所を格納します
innodb はこれを使用して、ページがディスクに完全に書き込まれました