mysql關於表空間的總結

lusklusklusk發表於2018-10-12

1.系統表空間(System Tablespace)

innodb系統表空間包含innodb資料字典(innodb相關物件的後設資料),undo logs、the change buffer, and the doublewrite buffer。

此外,當innodb_file_per_table=OFF時系統表空間也儲存表空間建立的表和索引等資料。

由於系統表空間可以儲存多張表,因此,其為一個共享表空間。

系統表空間由一個或多個資料檔案組成,預設情況下,其包含一個叫ibdata1的系統資料檔案,位於mysql資料目錄下。

系統表空間資料檔案的大小和數目由innodb_data_file_path啟動選項控制。


innodb_data_file_path=ibdata1:50M;ibdata2:12M:autoextend:max:500MB

多個檔案的情況下, 實際存在的檔案的大小必須和物理大小一樣,如上ibdata1的大小50M必須和實際儲存大小一樣

autoextend和max屬性只能用於innodb_data_file_path設定中最後指定的資料檔案


https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_system_tablespace

One or more data files (ibdata files) containing metadata for InnoDB-related objects (the InnoDB data dictionary), and the storage areas for the change buffer, the doublewrite buffer, and possibly undo logs. It may also contain table and index data for InnoDB tables if tables were created in the system tablespace instead of file-per-table or general tablespaces. The data and metadata in the system tablespace apply to all databases in a MySQL instance.

Prior to MySQL 5.6.7, the default was to keep all InnoDB tables and indexes inside the system tablespace, often causing this file to become very large. Because the system tablespace never shrinks, storage problems could arise if large amounts of temporary data were loaded and then deleted. In MySQL 5.7, the default is file-per-table mode, where each table and its associated indexes are stored in a separate .ibd file. 

包含InnoDB相關物件(InnoDB資料字典)的後設資料的一個或多個資料檔案(ibdata檔案),以及更改緩衝區,雙寫緩衝區和可能的撤消日誌的儲存區域。 如果在系統表空間而不是每個表檔案或一般表空間中建立表,它還可能包含InnoDB表的表和索引資料。 系統表空間中的資料和後設資料適用於MySQL例項中的所有資料庫。

在MySQL 5.6.7之前,預設設定是將所有InnoDB表和索引保留在系統表空間內,這通常會導致此檔案變得非常大。 由於系統表空間永遠不會縮小,因此如果載入並刪除了大量臨時資料,則可能會出現儲存問題。 在MySQL 5.7中,預設為每表檔案模式,其中每個表及其相關索引儲存在單獨的.ibd檔案中。



2.表檔案表空間(File-Per-Table Tablespaces)

表檔案表空間是一個單表表空間,該表建立於自己的資料檔案中。當innodb_file_per_table選項開啟時,表將被建立於表檔案表空間中。

儲存單個InnoDB表資料的每表檔案表空間由.ibd資料檔案表示

https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html

Historically, all InnoDB tables and indexes were stored in the system tablespace. This monolithic approach was targeted at machines dedicated entirely to database processing, with carefully planned data growth, where any disk storage allocated to MySQL would never be needed for other purposes. InnoDB's file-per-table tablespace feature provides a more flexible alternative, where each InnoDB table and its indexes are stored in a separate .ibd data file. Each such .ibd data file represents an individual tablespace. This feature is controlled by the innodb_file_per_table configuration option, which is enabled by default in MySQL 5.6.6 and higher.

從歷史上看,所有InnoDB表和索引都儲存在系統表空間中。 這種單片方法的目標是完全專用於資料庫處理的機器,精心規劃的資料增長,其中任何分配給MySQL的磁碟儲存都不會用於其他目的。 InnoDB的每表檔案表空間功能提供了更靈活的替代方案,其中每個InnoDB表及其索引都儲存在單獨的.ibd資料檔案中。 每個這樣的.ibd資料檔案代表一個單獨的表空間。 此功能由innodb_file_per_table配置選項控制,該選項在MySQL 5.6.6及更高版本中預設啟用。



3.通用表空間(General Tablespaces)

https://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html

A general tablespace is a shared InnoDB tablespace that is created using CREATE TABLESPACE syntax

通用表空間是使用CREATE TABLESPACE語法建立的共享InnoDB表空間

Creating a general tablespace in the MySQL data directory 在MySQL資料目錄中建立通用表空間:

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

Creating a general tablespace in a directory outside of the MySQL data directory 在MySQL資料目錄之外的目錄中建立通用表空間:

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE '/my/tablespace/directory/ts1.ibd' Engine=InnoDB;

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1;

mysql> ALTER TABLE t2 TABLESPACE ts1;



4.undo表空間(undo tablespace)

https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_undo_tablespaces

innodb_undo_tablespaces is deprecated and will be removed in a future release.

5.7.21版本開始innodb_undo_tablespaces已棄用,將在以後的版本中刪除



5.臨時表空間(Temporary Tablespace)

https://dev.mysql.com/doc/refman/5.7/en/innodb-temporary-tablespace.html

Non-compressed, user-created temporary tables and on-disk internal temporary tables are created in a shared temporary tablespace

The innodb_temp_data_file_path configuration option defines the relative path, name, size, and attributes for temporary tablespace data files. If no value is specified for innodb_temp_data_file_path, the default behavior is to create an auto-extending data file named ibtmp1 in the innodb_data_home_dir directory that is slightly larger than 12MB.

Compressed temporary tables, which are temporary tables created using the ROW_FORMAT=COMPRESSED attribute, are created in file-per-table tablespaces in the temporary file directory.

The temporary tablespace is removed on normal shutdown or on an aborted initialization, and is recreated each time the server is started . The temporary tablespace receives a dynamically generated space ID when it is created. Startup is refused if the temporary tablespace cannot be created. The temporary tablespace is not removed if the server halts unexpectedly. In this case, a database administrator can remove the temporary tablespace manually or restart the server, which removes and recreates the temporary tablespace automatically.

壓縮臨時表是使用ROW_FORMAT = COMPRESSED屬性建立的臨時表,它們是在臨時檔案目錄中的每表檔案表空間中建立的。

使用者建立的臨時表和磁碟內部臨時表建立於共享臨時表空間中。

innodb_temp_data_file_path配置選項定義臨時表空間資料檔案的相對路徑,名稱,大小和屬性。 如果沒有為innodb_temp_data_file_path指定值,則預設行為是在innodb_data_home_dir目錄中建立一個稍大於12MB的名為 ibtmp1 的自動擴充套件資料檔案。

臨時表空間在正常關閉或中止初始化時被刪除,並在每次啟動伺服器時重新建立 。 臨時表空間在建立時會收到動態生成的空間ID。 如果無法建立臨時表空間,則拒絕啟動。 如果伺服器意外停止,則不會刪除臨時表空間。 在這種情況下,資料庫管理員可以手動刪除臨時表空間或重新啟動伺服器,從而自動刪除並重新建立臨時表空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2216262/,如需轉載,請註明出處,否則將追究法律責任。

相關文章