Mysql

亂序插入行(MySQL InnoDB)是否存在性能損失

  • October 6, 2020

我正在嘗試從具有巨大 SSD 和太多多餘空間的 MySQL AWS RDS 實例遷移到一個小的實例,而數據遷移是唯一的方法。有 330GB-450GB 範圍內的四個表並在單個執行緒中執行 mysqldump,而通過 pv 直接通過管道傳輸到目標 RDS 實例估計需要大約 24 小時(以 5 mbps 複製)。

我編寫了一個 bash 腳本,該腳本在末尾使用“&”和一個計算--where參數呼叫多個 mysqldump,以模擬多執行緒。這很有效,目前使用 28 個執行緒只需不到一個小時。

但是,我擔心將來查詢時可能會降低性能,因為我不會在 auto_increment id 列的序列中插入。

有人可以確認是否會出現這種情況,或者我是否無緣無故地偏執。

您對 100 GB 的單個表使用了什麼解決方案?由於某個特殊原因,我想避免使用 AWS DMS,並且絕對不想使用一段時間未維護的工具。

您是正確的,它會導致聚集索引的碎片。但是,如果它是一個自動遞增的列,則數據並沒有真正按任何有意義的方式排序。你從一個未分類的混亂變成了一個不同分類的未分類的混亂。

一次選擇/更新/讀取幾行?沒什麼大不了的——B-tree 仍然知道如何找到正確的頁面,而不需要太多額外的努力。

如果您嘗試通過使用自動遞增列的範圍來分解大型更新/刪除,則會遇到問題,因為行將跨頁面分佈。

如果性能確實成為問題,您可以重建索引,較新版本的 MySQL 應該能夠在不使表離線的情況下這樣做。

順便說一句 - 您是否嘗試按自動遞增列對數據進行排序然後執行批量載入?

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