我正在 AWS RDS MySQL 实例上运行一些 Django 迁移。我的团队已经非常彻底地测试了迁移,并且它们运行良好(甚至在我们的笔记本电脑上针对我们的生产数据副本运行时也只花了不到 30 分钟)。
现在我们正在迁移生产数据库,这需要 2 个多小时。当我运行:
mysql> SHOW PROCESSLIST;
我可以看到活动进程,它正在执行一些操作,但速度非常慢。我们的迁移处于数据迁移的中间阶段,SELECT 语句(我们通过 ORM 批量提取 100 行)每个语句最多需要 32 秒。最后 30 秒处于“删除临时表”状态。
知道这是什么原因造成的吗?
答案1
我们通过 ORM 以 100 为一批获取行
数据批处理查询效率低下。由于 DBMS 使用临时表,因此它必须检查比输出数据集中包含的数据多得多的数据 - 而且大多数数据都被丢弃了。
转到 StackOverflow 并发布您的模式和用于提取数据的查询以获得更具体的建议 - 但 IME,ORM 在原则上是如此破碎,以至于切换到工厂通常比尝试使其高效/可靠地工作更容易。