Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

資料庫大表刪除避免 I/O Hang 技巧:硬連結配合 truncate 工具秒級釋放空間

編輯:Linux 教學

刪除大型資料表 (如 MySQL/InnoDB .ibd) 易引發嚴重 I/O Hang,影響線上服務。巧用硬連結與 coreutils 的 truncate 可平滑釋放空間。

原理

  • 對原 .ibd 建立硬連結:ln big_table.ibd big_table.ibd.hardlink,兩檔名指向同一 inode。
  • 刪除原檔名 rm big_table.ibd 只減少連結計數,inode 仍存在,資料塊不釋放,操作瞬間完成,零 I/O 壓力。
  • 當連結計數歸 1 (僅剩 hardlink) 時,再用 truncate 漸進式縮小檔案,避免單次大量釋放造成 I/O 風暴。

truncate 關鍵語法

truncate -s -1G big_table.ibd.hardlink   # 每次縮小 1 GiB
truncate -s -500M big_table.ibd.hardlink # 每次縮小 500 MiB
# 迴圈腳本逐步縮小至 0

支援單位:K/KB (1024/1000)、M/MB、G/GB、T/P/E/Z;符號 + 擴大、- 縮小、< 至多、> 至少。

實測範例

touch abc
truncate -s +1KB abc
truncate -s +1KB abc
ls -l abc
# -rwxrwxrwx 1 root root 2000 ... abc

結合 ionice -c3 或 cgroup io.weight 限制 I/O 優先級,可進一步降低對線上負載干擾。

Copyright © Windows教程網 All Rights Reserved