InnoDB的ibdata1

ibdata1是InnoDB基礎結構的系統表空間。

A set of files with names such as ibdata1, ibdata2, and so on, that make up the InnoDB system tablespace. These files contain metadata about InnoDB tables, (the InnoDB data dictionary), and the storage areas for one or more undo logs, the change buffer, and the doublewrite buffer. They also can contain some or all of the table data also (depending on whether the file-per-table mode is in effect when each table is created). When the innodb_file_per_table option is enabled, data and indexes for newly created tables are stored in separate .ibd files rather than in the system tablespace. The growth of the ibdata files is influenced by the innodb_autoextend_increment configuration option 一組名稱為ibdata1,ibdata2等的文件,構成InnoDB系統表空間。 這些文件包含有關InnoDB表(InnoDB數據字典)的元數據,以及一個或多個撤消日志,更改緩沖區和雙寫緩沖區的存儲區域。 它們還可以包含部分或全部表數據(取決於創建每個表時每個表的文件模式是否有效)。 啟用innodb_file_per_table選項後,新創建的表的數據和索引將存儲在單獨的.ibd文件中,而不是存儲在系統表空間中。 ibdata文件的增長受innodb_autoextend_increment配置選項的影響,默認是64M The increment size (in megabytes) for extending the size of an auto-extending InnoDB system tablespace file when it becomes full. The default value is 64 MySQL開啟獨享表空間的參數是Innodb_file_per_table,會為每個Innodb表創建一個.ibd的文件。

ibdata包含幾個對InnoDB至關重要的信息類

  • 表格數據頁
  • 表索引頁
  • 數據字典
  • MVCC控制數據
    • 撤消空間
    • 回滾段
  • 雙重寫入緩沖區(在後臺寫頁面以避免操作系統緩存)
  • 插入緩沖區(對二級索引的更改)

請註意ibdata1在InnoDB Universe中的位置(在右側)

您可以ibdata1通過啟用innodb_file_per_table來將數據頁和索引頁分開。這將導致任何新創建的InnoDB表將數據和索引頁存儲在外部.ibd文件中。

總結

1、默認情況下ibdata存放InnoDB表(InnoDB數據字典)元數據、undo logs、the change buffer, and the doublewrite buffer

2、如果innodb_file_per_table=off,則ibdata也存放InnoDB表的實際數據,也就是InnoDB表建立後,不會再有單獨的tablename.ibd文件

3、雖然InnoDB表元數據通過information_schema.tables來讀取,但是實際上information_schema是一個虛擬數據庫,並不物理存在,這些數據真正存放的地方就是ibdata 備註:元數據(meta data)–"data about data" 關於數據的數據,一般是結構化數據(如存儲在數據庫裡的數據,規定瞭字段的長度、類型等)

赞(0)