Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Apache solr 5.3.1内存不足_Postgresql_Memory_Solr - Fatal编程技术网

Postgresql Apache solr 5.3.1内存不足

Postgresql Apache solr 5.3.1内存不足,postgresql,memory,solr,Postgresql,Memory,Solr,我是solr的新手,不过我花了几天的时间在一个有大约117.000.000条目的实体上运行postgreSQL 9.4 DB的完整索引。 我在Windows7x64上使用Solr5.3.1,内存为16GB。我不打算把这台机器用作服务器,它只是我正在做的某种原型 我在jdkx86上不断地遇到这个错误,只是将solr作为solr start启动,没有任何选项。然后我试着: solr start-m 2g这会导致solr根本不出现 solr start-m1g使solr启动,但在索引了大约87.000

我是solr的新手,不过我花了几天的时间在一个有大约117.000.000条目的实体上运行postgreSQL 9.4 DB的完整索引。 我在Windows7x64上使用Solr5.3.1,内存为16GB。我不打算把这台机器用作服务器,它只是我正在做的某种原型

我在jdkx86上不断地遇到这个错误,只是将solr作为
solr start
启动,没有任何选项。然后我试着:
solr start-m 2g
这会导致solr根本不出现
solr start-m1g
使solr启动,但在索引了大约87.000.000个条目后,它因内存不足错误而消失

虽然在管理仪表板上我看到JVM堆已满,但它在没有任何选项的情况下也会在同一个时间点死亡

所以,由于solr警告我无论如何都要使用x64 JDK,所以我使用了x64 JDK,现在使用的是8u65。我用4g堆启动solr,然后再次开始完全导入。在87.000.000个条目之后,它再次抛出相同的异常。但是堆甚至没有满(42%),RAM和交换也没有满

有人知道这种行为的原因吗? 这是我的数据配置

<dataConfig>
<dataSource 
type="JdbcDataSource"
driver="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/dbname"
user="user"
password="secret"
readOnly="true" 
autoCommit="false" 
transactionIsolation="TRANSACTION_READ_COMMITTED" 
holdability="CLOSE_CURSORS_AT_COMMIT" />

<entity name="hotel"
query="select * from someview;"
deltaImportQuery = "select * someview where solr_id = '${dataimporter.delta.id}'"
deltaQuery="select * from someview where changed > '${dataimporter.last_index_time}';">

<field name="id" column="id"/>
... etc for all 84 columns

提前感谢

正如MatsLindh所指出的,这是一个JDBC错误。与此同时,我使用hibernate搜索,在完全相同的时间(接近87.000.000个索引实体)遇到了相同的错误。诀窍是更频繁地犯罪

因此,在这个案例中,我一次尝试了几件事情,结果都成功了(不知道哪一个选项确实奏效):

我想这是因为1。和/或3.,我将做进一步的测试并更新我的帖子


当我尝试使用hibernate搜索进行索引时,我可以看到为PostgreSQL Server分配的RAM在提交时被释放,因此RAM不再是问题。这在这里没有发生,DB服务器最终达到了85 GB的RAM,但仍在继续工作。

正如MatsLindh所指出的,这是一个JDBC错误。与此同时,我使用hibernate搜索,在完全相同的时间(接近87.000.000个索引实体)遇到了相同的错误。诀窍是更频繁地犯罪

因此,在这个案例中,我一次尝试了几件事情,结果都成功了(不知道哪一个选项确实奏效):

我想这是因为1。和/或3.,我将做进一步的测试并更新我的帖子


当我尝试使用hibernate搜索进行索引时,我可以看到为PostgreSQL Server分配的RAM在提交时被释放,因此RAM不再是问题。这里没有发生这种情况,DB服务器最终达到了85 GB RAM,但仍在继续工作。

只是一个注释:可能有一条记录的内容大小超过了solr上的字段模式定义。错误似乎是由JDBC postgres驱动程序引发的,因此可能是结果大小的结果。DIH确实有一个批量大小属性,您可以尝试对其进行调整,也可以将其转储到CSV或JSON中,然后尝试对其进行索引。谢谢,JDBC确实是个问题!只是一个注释:可能有一条记录的内容大小超过了solr上的字段模式定义。该错误似乎是由JDBC postgres驱动程序引发的,因此它可能是结果大小的结果。DIH确实有一个批量大小属性,您可以尝试对其进行调整,也可以将其转储到CSV或JSON中,然后尝试对其进行索引。谢谢,JDBC确实是个问题!
getNext() failed for query 'select * from someview;':org.apache.solr.handler.dataimport.DataImportHandlerException: org.postgresql.util.PSQLException: FEHLER: Speicher aufgebraucht
Detail: Fehler bei Anfrage mit Größe 48.
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:62)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.hasnext(JdbcDataSource.java:416)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.access$500(JdbcDataSource.java:296)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.hasNext(JdbcDataSource.java:331)
at org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:132)
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:74)
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416)
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480)
at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:461)
Caused by: org.postgresql.util.PSQLException: FEHLER: Speicher aufgebraucht
Detail: Fehler bei Anfrage mit Größe 48.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)
at org.postgresql.core.v3.QueryExecutorImpl.fetch(QueryExecutorImpl.java:2113)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java:1964)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.hasnext(JdbcDataSource.java:408)
... 12 more
1. set maxDocs for autoCommit in solrconfig.xml to 100.000. I believe that the default setting for committing is something at 15 seconds if no new documents are added, what actually happens all the time, until heap space runs full.
2. Set batchSize for the postrgreSQL JDBC Driver at 100 (Default is 500).
3. Changed the evil 'select * from table' to 'select c1, c2, ..., c85 from table'
4. Updated the JDBC Driver from 9.4.1203 to 9.4.1207
5. Updated Java to 1.8u74