Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

Một bảng do người dùng xác định và dữ liệu chỉ mục tương ứng & nbsp; trong innodb, is & nbsp; được lưu trữ trong các tệp có phần mở rộng .ibd. Có hai loại không gian bảng, không gian bảng chung (hoặc chia sẻ) và tập tin cho mỗi bảng. & nbsp; cho các không gian chia sẻ & nbsp; dữ liệu từ nhiều bảng khác nhau & nbsp; và các chỉ mục tương ứng của chúng có thể nằm trong một tệp .ibd duy nhất. Trong khi đó, đối với các không gian bảng tệp, dữ liệu của một bảng và các chỉ mục của nó & nbsp; Nằm trong một tệp .ibd.

Bài đăng trên blog này sẽ nói về việc quản lý không gian trong các tệp .ibd này một cách chi tiết..ibd files in details.

Tệp .ibd

Các tập tin này thường nằm trong thư mục dữ liệu. Hãy để cố gắng tạo một thử nghiệm bảng.T1.test.t1.

CREATE TABLE test.t1 (c INT) engine=InnoDB;

$ cd /test

$ ls t1.ibd
t1.ibd

Trên đây là một bảng tính tệp mỗi bảng, tức là dữ liệu bảng và chỉ mục liên quan đến Bảng T1 sẽ nằm trong tệp này.t1 will reside in this file.

Không gian bảng

Đối với một không gian bảng tệp mỗi bảng, tên không gian bảng giống như tên của tệp/bảng, tức là đối với Bảng T1 ở trên, tên không gian bảng sẽ là T1. Nếu nó là một không gian bảng chung (hoặc chia sẻ) được tạo bằng tên my_tablespace, thì tên bảng không gian sẽ được & nbsp; & nbsp; my_tablespace ..t1 above, tablespace name will be t1. Had it been a general (or shared) tablespace created with name my_tablespace, then the tablespace name would have been   my_tablespace..

Các không gian bảng này được xác định với ID duy nhất được gọi là ID bảng.

Trang

Tệp không gian bảng được làm bằng số trang kích thước cố định. Có nhiều loại trang khác nhau để phục vụ mục đích khác nhau. Chúng tôi sẽ xem xét tất cả chúng trong các chi tiết trong các phần sắp tới. Ở đây chỉ cần nhớ rằng tệp bảng không gian là một tập hợp nhiều trang kích thước cố định.

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

Phạm vi

Một mức độ là một tập hợp các trang tiếp giáp trong không gian bảng. Kích thước phạm vi là 1 MB. Do đó, nếu kích thước trang là 16kb thì có thể có 64 trang trong một mức độ.

Do đó, nếu chúng ta nhìn lại vào tệp không gian bảng, thì đó là một tập hợp các phạm vi.

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?
 

Trang tiêu đề

Không có lưu trữ riêng cho thông tin dữ liệu meta của không gian bảng. Nó được lưu trữ trong cùng một tệp trong trang tiêu đề (luôn luôn trang 0). Hãy cùng nhìn vào những người chi tiết bây giờ.

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

Danh sách Frags miễn phí:

Con trỏ nút cơ sở của danh sách liên kết của các phạm vi có các trang được phân bổ ‘cá nhân. Danh sách này chứa các phạm vi có ít nhất một trang miễn phí được phân bổ.‘individually’. This list contains the Extents which have at least one free page to be allocated.

Danh sách đầy đủ của Frags:

Con trỏ nút cơ sở của danh sách liên kết của các phạm vi có các trang được phân bổ ‘cá nhân. Danh sách này chứa các phạm vi không còn trang miễn phí để được phân bổ.‘individually’. This list contains the Extents which have no free page left to be allocated.

Danh sách miễn phí:

Con trỏ nút cơ sở của danh sách liên kết cho các mức độ tự do được phân bổ. Một mức độ từ danh sách này có thể được phân bổ cho một phân đoạn tệp (được mô tả sau) hoặc có thể được phân bổ cho danh sách frag miễn phí.

Các mục nhập XDes:

Các mục mô tả phạm vi (được mô tả sau) cho tập hợp đầu tiên trong không gian bảng.


Trang mô tả phạm vi (trang XDES)

Một mức độ là một tập hợp các trang. Chúng ta cần lưu trữ một số thông tin siêu dữ liệu liên quan đến các trang thuộc một mức độ. Để lưu trữ thông tin này, chúng tôi có trang mô tả phạm vi.extent descriptor page’.

Đối với kích thước trang 16K, một mục nhập XDES (được mô tả sau) có kích thước 40 byte và sẽ cung cấp thông tin siêu dữ liệu khoảng 64 trang. Để dễ thực hiện, số lượng trang được bao gồm bởi một mục nhập trang XDES bằng kích thước trang. Dựa trên điều này, thật dễ dàng để tìm ra số lượng các mục XDES trong trang XDES cho mỗi kích thước trang.

Kích thước trangKích thước phạm viCác trang trong một mức độ
an extent
Kích thước nhập XDESCác trang được đề cập trong trang XDESCác mục nhập XDes trong trang XDES
4K1m256 88 b4096 (4K)16
8k1m128 88 b4096 (4K)64
8k1m64 88 b4096 (4K)256
8k56 b64 88 b4096 (4K)512
8k56 b64 88 b4096 (4K)1024

8k

56 b

8192 (8K)For first set of extents, header page is used to store XDES entries.

16k

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

40 bprevious and next pointers in LIST NODE, points to Previous/Next Extents in the list:

  • 16384 (16K)
  • 32K

2m

32768 (32K)
One page size       = 16 KB
Total pages in one extent = 64 Pages
Total XDES entries in one XDES page = 256
Total Extents could be covered in one XDES page = 256
Total pages could be covered with one XDES Page = 16384

64K

4mINODE PAGE

65536 (64K)

Phân đoạn tập tin

Một phân đoạn tệp là một đơn vị logic là một tập hợp các trang và phạm vi. Hình sau mô tả chế độ xem logic (không phải) cấp cao của phân đoạn tệp.

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

  • Mảng Frag
    • Một mảng các trang đơn (32 mục) được phân bổ cho phân khúc này.
  • Không phải danh sách đầy đủ
    • Con trỏ nút cơ sở đến danh sách liên kết của các phạm vi được gán cho phân đoạn này và có ít nhất một trang miễn phí.
  • Danh sách đầy đủ
    • Con trỏ nút cơ sở đến danh sách liên kết của các phạm vi được gán cho phân đoạn này và không có trang miễn phí.
  • Danh sách miễn phí
    • Con trỏ nút cơ sở đến danh sách liên kết của các phạm vi được gán cho phân đoạn này và có tất cả các trang miễn phí.

Lưu ý 1: Các trang trong mảng Frag thuộc một mức độ là một phần của danh sách Frag_full/Frag_Free (nghĩa là có ID phân đoạn tệp 0) được duy trì tại trang tiêu đề bảng không gian bảng. Như được mô tả trước đây, các trang trong các phạm vi này được chia sẻ bởi nhiều phân đoạn. Như được mô tả dưới đây: Pages in FRAG ARRAY belong to an Extent which is part of FRAG_FULL/FRAG_FREE list (i.e. have File Segment id 0) which are maintained at Tablespace Header Page. As described before, pages in these extents are shared by many segments. As depicted below:

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

Lưu ý 2: Khi một mức độ trở nên miễn phí (nghĩa là không còn các trang được sử dụng), nó không chuyển sang danh sách miễn phí của phân đoạn tệp. Thay vào đó, nó chuyển sang danh sách miễn phí được duy trì ở cấp độ không gian bảng. When an extent becomes free (i.e. no more used pages) it DOES NOT move to FREE list of File Segment. Instead, it moves to FREE list maintained at tablespace level.

Q: Tại sao chúng ta cần phân đoạn tệp?

A: Nó để làm cho quản lý trang dễ dàng. Vì vậy, một khi chúng tôi xóa phân đoạn tệp, chúng tôi biết tất cả các phạm vi và trang nào sẽ được giải phóng.It’s to make the page management easy. So once we delete the File Segment, we know which all extents and pages are to be freed.

Khi một bảng phát triển, nó sẽ phân bổ các trang riêng lẻ trong mỗi phân đoạn tệp cho đến khi mảng mảnh trở nên đầy, sau đó chuyển sang phân bổ 1 phạm vi tại một thời điểm và cuối cùng để phân bổ 4 phạm vi cùng một lúc.

Trang Inode (Xem lại)

Bây giờ, hãy để Lừa quay lại các trang Inode. Một trang inode giữ các mục nhập cho các phân đoạn tệp, tức là mỗi mục nhập trong một trang inode đại diện cho một phân đoạn tệp. Hình X (trong đó nó mô tả chế độ xem cấp cao của phân đoạn tệp) được mô tả ở trên thực sự là một mục nhập trong trang Inode và được gọi là mục nhập tệp Inode Inode. Hãy cùng nhìn vào nó: & nbsp; 

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?
 

Q: Các phân đoạn tệp được sử dụng như thế nào trong chỉ mục?

Trả lời: Mỗi chỉ mục trong Innodb, được biểu thị bằng cây B+, sử dụng hai phân đoạn tệp.Each index in InnoDB, which is represented by a B+ tree, uses two File Segments.

  • Phân đoạn trang lá: Để lưu trữ các trang lá trong cây B.: to store Leaf pages in B Tree.
  • Phân đoạn trang không lá: Để lưu trữ các trang không lá (trung gian) trong cây B.: to store non-leaf (intermediate) pages in B Tree.

Trên một trang, tiêu đề FSEG là nơi lưu trữ hai phân đoạn tệp này. Từ các mục này, chúng tôi tham khảo trang Inode để đi thông tin phân đoạn tệp tương ứng.

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

Lưu ý: Đối với một chỉ mục, chỉ có tiêu đề FSG của trang gốc FSG được sử dụng để lưu trữ các thông tin này vì chỉ có một lá và một phân đoạn không lá cho một chỉ mục. Đối với phần còn lại của các trang trong cây B, tiêu đề FSEG là 0 được lấp đầy.For an index, only root page’s FSEG HEADER is used to store these info because there is only one LEAF and one NON-LEAF Segment for an index. For rest of the pages in B Tree the FSEG HEADER is 0 filled.

Một ví dụ minh họa rất đẹp được đưa ra bởi Jeremy Cole trong blog của mình:

Ví dụ, trong một bảng mới được tạo, trang duy nhất tồn tại sẽ là trang gốc, cũng là một trang lá, nhưng có mặt trong phân đoạn tệp nội bộ của Cameron (để nó không phải được di chuyển sau đó) . Phân đoạn tệp của Lá Lá Danh sách inode và mảng phân đoạn sẽ trống. Các danh sách Inode Inode Inde Inde Inode sẽ trống và trang gốc sẽ trống và trang gốc sẽ nằm trong mảng phân đoạn.

Hướng dẫn what is ibd in mysql? - ibd trong mysql là gì?

Nguồn: https://blog.jcole.us/2013/01/04/page-man quản lý

BẢN TÓM TẮT

Vậy làm thế nào để tất cả hoạt động khi chúng ta tạo/thả một chỉ mục?

Như được mô tả ở trên, ngay khi một chỉ mục được tạo (nghĩa là ít nhất trang gốc được tạo), hai phân đoạn tệp sẽ được phân bổ cho chỉ mục. Một cho các trang lá, hiện tại sẽ không có trang và một trang cho các trang không lá sẽ chỉ có một trang được phân bổ là trang gốc.

Bây giờ và khi kích thước chỉ số phát triển, tức là B cây phát triển,

  • Các trang mới được phân bổ trong mảng frag.
  • Khi yêu cầu vượt qua 32 trang, một mức độ được phân bổ cho phân khúc và được chuyển sang danh sách miễn phí.
  • Khi các trang của mức độ mới này được sử dụng, phạm vi này được chuyển sang danh sách không đầy đủ.
  • Khi tất cả các trang trong phạm vi này được sử dụng, nó đã chuyển sang danh sách đầy đủ và mức độ mới được phân bổ (giống như bước 3).

Khi chúng tôi bỏ chỉ mục, từ trang gốc, chúng tôi sẽ biết hai phân đoạn tệp. Chúng tôi tiếp tục và đánh dấu tất cả các phạm vi trong hai phân đoạn tệp đó là miễn phí.

Cảm ơn bạn đã sử dụng MySQL!

Các tệp FRM và IBD trong MySQL là gì?

Tệp FRM được sử dụng bởi máy chủ MySQL để lưu trữ lược đồ bảng và tệp .ibd được sử dụng để lưu trữ dữ liệu và chỉ mục của cơ sở dữ liệu MySQL.Trong trường hợp xóa dữ liệu tình cờ hoặc tham nhũng cơ sở dữ liệu MySQL, bạn có thể khôi phục dữ liệu từ.Frm và.Tệp IBD. IBD file is used to store data and indexes of a MySQL database. In the event of accidental deletion of data or MySQL database corruption, you can restore the data from the . FRM and . IBD files.

Tôi có thể xóa tệp ibd mysql không?

Bạn không được xóa tệp .ibd nếu bạn muốn tránh mất dữ liệu hoặc thời gian chết.Này .Các tệp IBD chứa dữ liệu và chỉ mục của bạn. ibd file if you want to avoid data loss or downtime. These . ibd files contain your data and indexes.

Tiện ích mở rộng IBD là gì?

IBD là loại tệp hoặc tiện ích mở rộng được liên kết với MySQL-Innodb.Innodb có một tính năng gọi là 'nhiều không gian bảng' cho phép tất cả các bảng và chỉ mục được lưu trữ trong tệp của riêng họ để mỗi bảng có thể sử dụng không gian bảng riêng của nó.a file type or extension associated with MySQL-InnoDB. InnoDB has a feature called 'multiple table space' that allows all tables and indexes to be stored in their own file so each table can use its own table space.

Tôi có thể nhập tệp ibd mysql không?

Tệp IBD, bạn có thể khôi phục nó về cài đặt MySQL mà từ đó nó có nguồn gốc như sau: bảng không được bỏ hoặc cắt ngắn kể từ khi bạn sao chép.Tệp IBD, vì làm như vậy thay đổi ID bảng được lưu trữ bên trong không gian bảng.you can restore it to the MySQL installation from which it originated as follows: The table must not have been dropped or truncated since you copied the . ibd file, because doing so changes the table ID stored inside the tablespace.