Mysql

為什麼使用 innodb_file_per_table?

  • February 6, 2019

有很多文章誇大了(當然是恕我直言)對innodb_file_per_table. 我了解,使用innodb_file_per_table應該可以更好地控制各個表;像單獨備份每個表。然而,關於更好性能的說法是有問題的。

innodb_file_per_table在我的測試中,ibdata160GB 的數據庫的性能沒有差異。當然,這是一個普通查詢的簡單測試,現實生活中復雜查詢的情況可能會有所不同(這就是我問這個問題的原因)。64位linux配合ext4可以有效處理大文件。

有了innodb_file_per_table,需要更多的磁碟 I/O 操作;這在復雜JOIN的 s 和FOREIGN KEY約束中很重要。

表空間在單個上共享ibdata;單獨表的專用表空間如何節省磁碟空間?當然,使用 為每個表釋放表空間更容易ALTER,但它仍然是一個昂貴的過程(使用表鎖)。

問題:innodb_file_per_table對mysql的更好性能有影響嗎?如果是,為什麼?

我認為這不是績效問題,而是管理問題。

例如,通過每個表單獨的文件,您可以將不同的數據庫儲存在不同的儲存設備中。

您可以處理無法處理大文件的文件系統中非常大的數據庫的情況(至少將問題推遲到一個表達到文件大小限制)。

您沒有不受控制的表空間增長。如果您刪除了一些大表,則ibdata文件將保持較小。

可能對性能產生一些影響的一個方面是表數據和索引的碎片,每個表都會受到限制。但這需要測試來確認。

引用自:https://dba.stackexchange.com/questions/16208