Mysql

如何防止不斷增長的索引文件(MyISAM 引擎)導致 Windows(NTFS 分區)中的磁碟碎片?

  • October 12, 2011

我們有一個使用 MISAM 儲存引擎的不斷增長的表。

幾乎每半年,這張表就會當機,需要維修。

我查看了windows碎片整理程序報告的碎片整理結果,碎片最多的文件是:

-------------------------------------------------------------------------------- 
碎片 文件大小 最零碎的文件 
3,812 213 MB \MySQLData\data\cmszivr\calllog.MYI 
24 541 MB \Program Files\Microsoft SQL Server\MSSQL\Data\tempdb.mdf 
... 

您可以看到,索引文件在 213 MB 大小時導致了 3812 個片段。與 SQL Server(24 個片段,541 MB 大小)相比,它太糟糕了。

我不知道碎片問題是否導致 mysql-server/mysql-table 崩潰,但它一定不利於儲存,並且可能是導致伺服器不穩定的潛在原因。

那麼,有沒有辦法防止呢?(更改配置?更改儲存引擎?)

當您執行任何作業系統碎片整理或病毒掃描操作時,請確保 mysql 已關閉。伺服器啟動時,不應針對任何表執行任何實用程序(基於 mysql 或其他)。MySQL 不適合在不專用於 MySQL DB 的 PC 上執行,尤其是在執行碎片整理或病毒掃描軟體的情況下。眾所周知,臨時表也會受到病毒掃描軟體的攻擊。

至少,將 MyISAM 表移動到遠離標準數據目錄的文件夾中。

您應該考慮使用以下方法對 MyISAM 表進行碎片整理:

OPTIMIZE TABLE calllog;

或者您可以分階段進行:

CREATE TABLE calllognew LIKE calllog;
ALTER TABLE calllognew DISABLE KEYS;
INSERT INTO calllognew SELECT * FROM calllog;
ALTER TABLE calllognew ENABLE KEYS;
ALTER TABLE calllog RENAME calllogold;
ALTER TABLE calllognew RENAME calllog;
DROP TABLE calllogold;

您可能需要考慮升級到 MySQL 5.5 以獲得最新的 MyISAM 儲存引擎程式碼。

如果要切換到 InnoDB,則必須對其進行配置,以便每個表都有自己的表空間

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