2017-03-24 64 views
0

我正在使用Apache Solr 6.4.1。 因爲我正在使用一個非常大的數據庫(超過3mio行),所以我想在db-data-config.xml中添加batchSize =「 - 1」。Solr DataImportHandler - 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-數據-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」 或其他工作)

UPDATE 如果我設置爲調試Dataimporthandler爲false,那麼它的作品!

+0

如何在設置batchSize = -1時發現它不工作?你有什麼例外嗎? – Mysterion

+0

如果我點擊執行什麼都沒有發生,繼續:0。我也試過responseBuffering =「自適應」。 – Hamso

+0

你檢查過日誌嗎? – Mysterion

回答

0

我不認爲將batchSize設置爲'-1'會對您的情況有所幫助。這是寫在裏面source code of 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); 

那麼仔細檢查什麼樣的參數接受MS JDBC driver for the setFetchSize方法。

的setFetchSize - 爲JDBC驅動程序提供提示以應該從數據庫時,需要由該 Statement產生 ResultSet對象的更多行中獲取的行 數。如果指定的值爲零,則提示 將被忽略。默認值爲零。

因此,司機可以自由地忽略這個提示,可能它只是在整個表中閱讀。您也可以嘗試更改您的JDBC驅動程序的版本...

我認爲您應該首先根據網絡延遲調整值,並在每次往返中調整要恢復的記錄數量。

索引性能和mssql服務器負載取決於批處理大小。嘗試從小尺寸開始,然後逐漸增加。

如果這不起作用,嘗試從根本上改變您的JDBC驅動程序。

返回batchSize參數,只有少數情況下你不需要它。通常,這是該問題的方法應該有:

  • ,如果你有足夠的內存配置了JVM讀取整個表
  • 如果你的JDBC驅動程序將上升一個異常調用setFetchSize()方法
  • ,如果你」重新處理MySql具有已知錯誤的JDBC驅動程序