我有一个SSIS包,可以将数据从SQL服务器移动到Postgres 9.5数据库。我使用最新的Postgres ODBC驱动程序连接到postgres服务器。大部分操作是插入,更新和upsert。当我在Visual Studio 2012中从我的开发机器(Win 10 64位)运行此程序包时,它非常快速。它可以在大约40秒内传输大约80k行。
当我将它部署到服务器(SQL Server 2012实例)并使用SQL管理工作室运行它时,执行速度非常慢。传输少于10行需要大约20秒,并且需要永远处理完整的数据集。如果完成,我永远不会放弃,因为它只需要太长时间。
我的开发机器和服务器都安装了完全相同的postgres驱动程序和相同配置的ODBC源。
编辑:我还应该注意,我已经将其他软件包部署到该服务器上运行得很好,尽管这些软件包不会触摸postgres或使用ODBC进行任何操作。
答案 0 :(得分:0)
如果其他条件相同:
我会关注资源差异。即
另一种解决问题的方法是运行不同版本的软件包,剥离部分数据流。即删除odbc / ado.net目的地并运行包。如果它快速完成,你知道问题就在那里。如果它仍然很慢,继续向上游继续,直到你发现组件变慢。
最后,我会考虑使用psql而不是odbc。 psql是一个postgres实用程序,如SQL的bcp,它允许您批量复制数据到postgres。 odbc驱动程序只允许逐行插入,这往往是缓慢的。将数据写入制表符分隔文件,然后使用psql将数据批量复制到postgres实际上要快得多(80k行可能需要5s全部告诉)。