MySQL 花太多時間清理 tmp 表

MySQL 花太多時間清理 tmp 表

我正在 AWS RDS MySQL 實例上運行一些 Django 遷移。我的團隊對遷移進行了非常徹底的測試,並且運作良好(甚至在我們的筆記型電腦上針對生產資料的副本運行時花費了不到 30 分鐘)。

現在我們正在遷移生產資料庫,這需要兩個多小時。當我跑步時:

mysql> SHOW PROCESSLIST;

我可以看到活躍的進程,它正在做一些事情,但速度非常慢。我們的遷移正在進行資料遷移,每個 SELECT 語句(我們透過 ORM 以 100 為一組的批次獲取行)最多需要 32 秒。最後30秒是在「正在刪除tmp表」的狀態下度過的。

知道是什麼原因造成的嗎?

答案1

我們透過 ORM 批量獲取 100 行

批次資料的查詢效率低。由於 DBMS 使用臨時表,因此必須檢查比輸出資料集中包含的資料多得多的資料 - 並且其中大部分都被丟棄。

前往 StackOverflow 並發布你的架構和用於提取資料的查詢以獲得更具體的建議 - 但 IME、ORM 原則上是如此破碎,以至於切換到工廠通常比嘗試讓它高效工作更容易/可靠。

相關內容