我正在将数据从excel表复制到SQL表。 此时它分布在18个表中的大约2000行。 我的工作问题是需要花费太多时间。这项工作大约需要2.5分钟。
我面临的其他问题是记忆。我试图复制大约250,000行,但我无法使用基本设置运行该作业。我必须增加Xms和Xmx分配。
如何解决这些问题?
答案 0 :(得分:1)
您应该使用tMSSQLConnection开始工作(我认为这是您正在使用的DBMS)然后使用tMSSQLCommit组件完成它,看看是否有帮助,因为它可能是Talend是打开大量的数据库连接而不是汇集它们。
增加提交大小也有助于加快批量加载,但很明显,如果任何提交失败,将失去整个提交。
除此之外,只要您没有竞争条件并且不关心插入或更新表的顺序,那么您可以使用tParallelize组件或通过启用多线程执行来并行化整个作业在“作业”窗口下的“额外”选项卡中。
有时,通过将进程拆分为单独的作业并将它们作为子作业链接到一个带有tRunJob组件的大型包装父作业中,可以提高作业中的内存使用率。这也将使工作更易于管理。
最后,在每个数据库输出组件的高级设置中有几个选项,允许您增加批量大小(尽管这会增加内存使用量),并且还可以启用可以大大提高性能的并行连接通过利用更多的数据库服务器核心。
您的内存问题不可能在重新设计工作时解决,只能一次处理较小的数据块并提交每个部分,然后抓住下一批。
这可以通过使用tFilterRow组件并且仅选择前x个记录来完成(通过某些过滤条件,如果数据集没有,则可以通过首先预处理所有内容来为每行添加一个Numeric.Sequence
),处理它并将其放入你的表中,然后选择下一个x记录等等。
答案 1 :(得分:0)
使用" Singe Insert Query"在MSSQL输出中。确保您使用正确的批量大小。
批次应该不应该或等于:2000 / column count
。这可以加快加载速度。
但是我不确定内存错误。我认为talend尝试将excel输入作为一个整体读入内存,因此对于更大的excel文件,您需要更多的内存。