簡體   English   中英

使用 MyISAM 是否可以更有效地恢復磁盤空間?

[英]Does using MyISAM make recovering disk space more efficient?

我有一個每晚的 cron 作業,它刪除特定表中超過 30 天的所有行。 這張表的流失率很高,而且大小差異很大。 刪除這些行后,我還調用了OPTIMIZE TABLE ,它反過來重新創建了該表,因為它是一個 InnoDB 表。

有時,我會遇到服務器磁盤空間不足的問題,因為它需要復制數據才能重新創建表。

在將我的數據庫的 rest 保留為 InnoDB 的同時將該特定表切換到 MyISAM 會更有效並防止我的服務器用盡磁盤空間嗎? 或者換句話說,如果它在 MyISAM 而不是 InnoDB 中,那么OPTIMIZE TABLE會更多地充當該特定表的修剪嗎?

MyISAM 和 InnoDB 都存在磁盤空間增大但不縮小的“缺陷”。 兩者都重用了釋放的空間,所以情況還不錯。

MyISAM 刪除表中的空洞。 這些孔被鏈接在一起。 新插入的行將使用這些孔,即使這意味着將一行分成幾塊 這導致了 MySQL 中對OPTIMIZE TABLE的少數需求之一。

另一方面,InnoDB 主要負責處理漏洞,因此(通常)不需要OPTIMIZE 我建議你停止做OPTMIZE

允許數據集變得如此之大以至於沒有足夠的磁盤空間來ALTER最大的表是愚蠢的。 你似乎在那個 position 中。 與 InnoDB 相比,MyISAM 表很可能只占用一半的磁盤空間。

不要每月刪除,而是每天嘗試。 這將使該表在其高峰期的價值減少 29 天。 有關大刪除的更多提示: http://mysql.rjweb.org/doc.php/deletebig

有關PARTITIONing的更多信息,尤其是對於像您這樣的時間序列: http://mysql.rjweb.org/doc.php/partitionmaint

如果您想分享SHOW CREATE TABLE 我們可能有其他減少磁盤占用的技巧。

(我也不建議切換到MyISAM。集群系統上是不允許的,近期可能會從MySQL中移除。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM