2016-11-10 45 views
0

我需要在数据源上执行5000条select语句,然后将结果和5000个值插入到不同数据源的表中。300s之后的交易时间点Websphere,Spring批处理,DB2

5000个select语句(全部是不同的sql语句),我被一个 exeuting一个(这是花更多的时间)

5000个插入我做JdbcTemplate.batchUpdate()

以上工作需要每30分钟执行一次。我已经配置了spring批处理来完成这项工作,CRON每30分钟就会触发一次。

一旦调用该方法来完成5000个选择语句它需要超过300秒才能完成所以Websphere正在抛出超时异常。它说全球交易时间超过300s。

我知道我可以增加websphere的超时时间,但我不能这样做,因为在生产中服务器配置文件被配置为默认值。

有人可以建议我一个更好的方法来处理这个问题。

回答

0

之前,您可以尝试减少为请求的SELECT的数量和无论他们在数据库端花费多少时间,每个响应都是单独的网络延迟项。发行5000个个人查询,并等待他们的个人成绩确实需要时间,即使查询是简单SELECT 1 FROM SYSIBM.SYSDUMMY1小号

如果两个或多个查询具有相同类型的结果,那么你就可以UNION S和如果两个或更多加入他们的行列查询预计将有相同数量的结果,那么你可以加入他们通过自己的成绩列或ROW_NUMBER()产生的像一个虚构的关键:

select a,b,c from .... and select a,e,f from...变成

select table1.a, b,c,d,e,f from 
table (select a,b,c from ...) table1, 
table (select a,e,f from ...) table2 
where 
table1.a = table2.a 

希望这帮助,

0

感谢马克和图兰yuksel为您的建议。我已经解决了这个问题。

我已将5000 sqls拆分为更小的单元,并将其作为请求列表处理,而不是5000 sqls的请求处理。现在Spring批处理没有超时问题。由于批处理事务在300秒后超时,Spring批次项目编写器造成的超时。

现在已解决。希望这有助于面临类似问题的人。