Mysql
如何防止不斷增長的索引文件(MyISAM 引擎)導致 Windows(NTFS 分區)中的磁碟碎片?
我們有一個使用 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,則必須對其進行配置,以便每個表都有自己的表空間。