Mysql
我可以安全地殺死 InnoDB 表上的 OPTIMIZE TABLE 嗎?
MySQL 的
kill
警告文件:警告
殺死表上的
REPAIR TABLE
orOPTIMIZE TABLE
操作MyISAM
會導致表損壞且無法使用。對此類表的任何讀取或寫入都會失敗,直到您再次優化或修復它(不中斷)。那是為 MyISAM 準備的。
殺死
OPTIMIZE TABLE
針對 InnoDB 表執行的程序是否也不安全?
根據 MySQL 認證指南:
OPTIMIZE TABLE 語句通過對 MyISAM 表進行碎片整理來清理它。這涉及回收因刪除和更新而產生的未使用空間,以及合併已拆分和非連續儲存的記錄。如果索引頁亂序,OPTIMIZE TABLE 也會對它們進行排序並更新索引統計資訊
也適用於 InnoDB 表,但映射到重建表的 ALTER TABLE。這會更新索引統計資訊並釋放聚集索引中的空間。
所以在 InnoDB 的情況下:
Innodb 是 ACID 兼容的,優化表只是將所有記錄複製到一個新表中
- 如果索引頁未排序,則對其進行排序,
- 如果表的統計資訊不是最新的(並且無法通過對索引進行排序來完成修復),請更新它們。
- 如果表已刪除或拆分行,請修復表。
如果你在它執行時試圖殺死它,你不會失去任何記錄。
此外,在 InnoDB 的情況下
innodb_defragment=1
,將不需要 ROLLBACK,因為在這種情況下OPTIMIZE TABLE
是增量的。