所以我有一点性能问题。我制作了一个构建数据库的java程序。问题是在加载数据时。我正在将 5,000 个文件加载到 sql 数据库中。当程序启动时,它可以在 10 分钟内处理大约 10% 的文件,但是随着进程的进行它会变得慢得多。目前以 28% 的速度按目前的速度在 16 小时内完成。然而,这一速度正在显着放缓。
我的问题是为什么程序在运行时会逐渐变慢以及如何解决这个问题。
编辑:我有两个版本。一个是带螺纹的(上限为 5 个线程),一个不是。两者之间的差异可以忽略不计。如果有人喜欢,我可以再次发布代码,但我把它拿出来是因为我现在相当确定瓶颈是 MySQL(也适当地重新标记)。我继续使用批量插入。这确实导致了最初的速度提高,但在处理了大约 30% 的数据后,它再次迅速下降。
所以SQL点
- 我的所有 64 个表的引擎是 InnoDB 版本 10。
- 该表此时大约有 300k 行(约 30% 的数据)
- 所有表都有一个“联合”主键。一个 ID 和一个日期。
- 查看 MySQL WorkBench 我看到每个线程都有一个查询(5 个查询)
- 我不确定时间单位(只是从 MySQL 管理员那里读取),但是检查文件是否已插入的查询需要 300。(这个查询应该很快,因为它是从 MyTable 限制 1 到 1 的 SELECT MyIndex,其中 Date = 日期。)因为我一直在启动和停止我在此检查中构建的程序以查看文件是否已插入。这样我就可以在每次更改后启动它,看看是否有任何改进,而无需再次启动该过程。
- 我相当肯定性能的下降与表格的大小有关。(我现在可以停止和启动程序,但该过程仍然很慢。只有当表格很小时,该过程才能以可接受的速度进行。)
- 请,请询问,我会发布您需要的任何信息。
完毕!好吧,我只是让它运行了它需要的 4 天。谢谢大家的帮助。
干杯,
——奥兰