我正在尝试通过JDBC将SQL Server 1300万条记录(2.5GB数据)中的一个巨大表加载到Java中。然后,我将在Java上运行一些代码以屏蔽/更新数据并将更新后的数据加载到其他数据库中。我正在尝试了解提高代码性能的最佳方案。
尝试1:使用普通的selectMethod=direct - outcome - OOM error
。
尝试2:使用selectMethod = cursor fetchSize(200000)-无OOM错误
尝试3:在连接网址中添加sendStringParametersAsUnicode=false
-性能没有重大变化
尝试4:删除fetchsize /删除selectMethod=cursor
并添加responseBuffering=adaptive
。 -结果性能优于Try2。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//url = "jdbc:sqlserver://"+server/*+"\\"+instanceName*/+":"+portnbr+";DatabaseName="+db+";sendStringParametersAsUnicode=false;selectMethod=cursor";
url = "jdbc:sqlserver://"+server/*+"\\"+instanceName*/+":"+portnbr+";DatabaseName="+db+";sendStringParametersAsUnicode=false;responseBuffering=adaptive";
//url = "jdbc:sqlserver://"+server/*+"\\"+instanceName*/+":"+portnbr+";DatabaseName="+db+";selectMethod=cursor";
//url = "jdbc:sqlserver://"+server/*+"\\"+instanceName*/+":"+portnbr+";DatabaseName="+db;
//url = "jdbc:sqlserver://"+server+"\\"+instanceName+";DatabaseName="+db;
我想知道可以做些什么,什么是对大量结果集有更好性能的最佳方法。 -fetchSize可以与responseBuffering = adaptive一起使用吗,它实际上会做什么?