Pelajari MySQL secara mendalam dan fahami struktur storan logik InnoDB

青灯夜游
Lepaskan: 2021-12-10 19:20:21
ke hadapan
2129 orang telah melayarinya

Artikel ini akan membawa anda melalui struktur storan logik InnoDB, saya harap ia akan membantu anda!

Pelajari MySQL secara mendalam dan fahami struktur storan logik InnoDB

Struktur storan logik InnoDB

Dalam InnoDB, jadual yang kami cipta dan data indeks yang sepadan disimpan dalam sambungan Dalam .ibd, laluan fail ini boleh diperolehi dengan menyemak pembolehubah mysql datadir dahulu, dan kemudian memasukkan direktori nama pangkalan data yang sepadan Anda akan melihat banyak ibd Nama fail ialah nama jadual . Ruang meja kongsi (atau ruang jadual sistem) dan fail ruang meja bebas. [Cadangan berkaitan: tutorial video mysql]

Untuk ruang jadual kongsi, semua data jadual dan indeks yang sepadan disimpan di sini, manakala ruang jadual bebas ialah data dan indeks setiap jadual semua disimpan dalam fail ibd yang berasingan Dalam versi MySQL semasa, ruang jadual bebas digunakan secara lalai.

Nama fail ruang jadual kongsi boleh diperolehi melalui 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)
Salin selepas log masuk

Ruang jadual bebas dan kongsi boleh ditukar melalui innodb_file_per_table Data diletakkan dalam fail ruang jadual yang berasingan Ia juga harus diperhatikan bahawa ruang jadual setiap jadual hanya menyimpan data dan indeks lain, seperti maklumat rollback, maklumat transaksi sistem dan penimbal tulis sekunder disimpan dalam bahagian asal dalam ruang meja.

Pernyataan berikut boleh menyemak status 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)
Salin selepas log masuk

Ubah suai status innodb_file_per_table

set global innodb_file_per_table=0;
Salin selepas log masuk

Jika innodb_file_per_table bersamaan dengan 0, iaitu apabila OFF, jadual yang dibuat akan disimpan dan dikongsi oleh sistem Dalam ruang jadual, seperti contoh berikut.

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
Salin selepas log masuk

Anda boleh mendapati tiada fail ibd baharu dibuat selepas ditutup.

Ruang jadual terdiri daripada segmen, keluasan dan halaman, memperkenalkan gambar rangkaian.

Pelajari MySQL secara mendalam dan fahami struktur storan logik InnoDB

1. Segmen

Ruang jadual terdiri daripada segmen Ia adalah struktur logik yang digunakan untuk mengurus fail fizikal Segmen termasuk segmen data, segmen indeks dan segmen rollback Setiap segmen terdiri daripada N kawasan dan 32 halaman bertaburan.

Jadual enjin storan InnoDB disusun mengikut indeks, jadi data ialah indeks, dan indeks ialah data Biasanya, apabila membuat indeks, dua segmen akan dibuat, iaitu segmen nod bukan daun dan daun segmen nod.

2. Kawasan

adalah ruang yang terdiri daripada halaman berterusan Dalam apa jua keadaan, saiz setiap kawasan ialah 1MB. Untuk memastikan kesinambungan halaman dalam rantau, enjin storan InnoDB digunakan untuk 4-5 kawasan daripada cakera pada satu masa. Secara lalai, saiz halaman enjin storan InnoDB ialah 16KB, bermakna terdapat 64 halaman berturut-turut, 16*64=1024=1M.

Versi InnoDB1.2.x menambah parameter innodb_page_size, yang membenarkan menetapkan saiz halaman lalai kepada 4K, 8K,

3 Halaman

Halaman ialah unit terkecil bagi pengurusan cakera enjin storan InnoDB. Saiz halaman boleh ditetapkan kepada 4K, 8K atau 16K melalui parameter innodb_page_size. InnoDB telah mereka bentuk banyak jenis halaman untuk mencapai tujuan yang berbeza jenis halaman biasa dalam enjin storan InnoDB ialah:

  • halaman data

  • buat asal Halaman.

  • Halaman sistem

  • Halaman data transaksi (halaman sistem perdagangan)

  • Sisipkan imej bit penimbal halaman

  • Masukkan halaman senarai bebas penimbal

  • Halaman gumpalan tidak termampat

  • Halaman Objek Besar Binari Termampat

Anda boleh melihat saiz melalui arahan berikut.

mysql> show status like 'innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)

mysql>
Salin selepas log masuk

Berikut ialah struktur halaman data InnoDB, yang terdiri daripada tujuh bahagian.

Pelajari MySQL secara mendalam dan fahami struktur storan logik InnoDB

名称作用
File header记录了页头的一些信息,cheksum、Ppervious和next page的记录
Page header记录了页的状态信息和存储信息、首个记录的position
Infimum supremumInnoDB每个数据页有两个虚拟行记录,用来限定记录边界
Row records实际存储的行数据信息
Free space空闲空间,同样是链表结构
Page directory存放了记录的相对位置
File trailerinnodb利用它来保证页完整地写入磁盘

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:
Salin selepas log masuk

原文地址:https://juejin.cn/post/6999936914119720996

作者:i听风逝夜

更多编程相关知识,请访问:编程视频!!

Atas ialah kandungan terperinci Pelajari MySQL secara mendalam dan fahami struktur storan logik InnoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!