2016-07-27 41 views
0

我正在开发一个大型数据库驱动的应用程序,有时需要大量的数据导入。数据是从excel电子表格导入的,并且在处理的开始阶段(对于大约500行),数据处理相对较为迅速,但是这种数据的处理速度显着下降。导入每行生成6行链接的实体,每行处理完毕后刷新。我的猜测是,所有这些实体都获得了教条的缓存,只是建立起来。我的想法是清除所有200行的缓存,但是我找不到如何从代码中清除它(在这个阶段,控制台不是一个选项)。任何援助或联系将不胜感激。Doctrine caching

回答

0

我想原因可能不在于学说,而是在数据库transaction log buffer size。文档说

大型日志缓冲区使大型事务运行,而无需在事务提交之前将日志写入磁盘。因此,如果您有大事务,则使日志缓冲区更大可节省磁盘I/O。

您很可能会在一个大事务中插入数据。当缓冲区已满时,它将被写入通常较慢的磁盘。

有几种可能的解决方案。

  • 增加缓冲区大小,以便事务符合缓冲区。
  • 将事务拆分为适合缓冲区的几个部分。

在第二种情况下请记住,每个事务也需要时间,所以将每个插入包装在单独的事务中也会降低性能。

我建议在事务中包装约500行,因为这似乎是适合缓冲区的大小。

+0

你检查是否有帮助吗? –