我正在使用Apache 6.4.1。因为我使用的是一个非常大的数据库(超过3mio行),所以我想在db-data-config.xml中添加batchSize="-1“。
但如果我这么做,它就成功了。没有batchSize,我可以得到前2k行,而不是"java.lang.RuntimeException: java.lang.StackOverflowError“错误。
在Solrconfig.xml中
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
在db-data-config.xml中
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://***:1433;integratedSecurity=true;
Initial Catalog=***;"
batchSize="-1"/>
...为什么batchSize="-1“不起作用?(batchSize="200“或其他正在工作)
更新--如果我在Dataimporthandler中将调试设置为false,那么它就有效了!
发布于 2017-03-24 20:24:39
我不认为把batchSize设置为'-1‘对你的处境没有帮助。这是在Solr DataImportHandler源代码中编写的
if (batchSize == -1)
batchSize = Integer.MIN_VALUE;
[... omissis ...]
Statement statement = c.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchSize(batchSize);因此,请再次检查哪些参数接受setFetchSize方法。
setFetchSize -给JDBC驱动程序一个提示,当这个
Statement生成的ResultSet对象需要更多行时,应该从数据库中获取多少行。如果指定的值为零,则忽略提示。默认值为零。
所以,驱动程序可以随意忽略这个提示,也许它只是在整张表中阅读。您也可以尝试更改JDBC驱动程序的版本..。
我认为您首先应该根据网络延迟和每次往返要检索的记录量来调整值。
索引性能和mssql服务器负载取决于批处理大小。试着从小尺寸开始,然后逐渐增加。
如果这不起作用,试着彻底改变JDBC驱动程序。
返回到batchSize参数,只有少数情况下不需要它。一般来说,这就是这种方法应该具备的行为:
setFetchSize()方法https://stackoverflow.com/questions/43002116
复制相似问题