从java

时间:2016-12-16 07:05:42

标签: java postgresql

我有一个用java编写的小实用程序,它从Postgresql数据库获取大量记录并将它们放入Solr。

在Solr记录中建立索引后,必须在Postgresql中将其标记为索引。 为此,我采用Postgresql程序并传递给它的记录数组'主键。

这是用于标记的java过程的片段:

    private void IndexDocumentsAndMark() throws SolrServerException, IOException, SQLException {
    logger.debug("Indexing start execution ...");
    UpdateResponse resp = solrClient.add(documents, solrCommitTimeOut);
    if (resp.getStatus() != 0) {
        logger.error("Indexing error: " + resp.getStatus());
    } else {
        logger.debug("Indexing completed. Indexed " + documents.size() + " documents ...");
        logger.debug("Solr commit start execution ...");
        solrClient.commit(); // Needs to be done in every bulk
        logger.debug("Solr commit completed ...");
        // Mark data in Postgresql as completed if bulk indexed successfully and Postgresql procedure for marking in defined
        if (databaseQueryStringMark != null) {
    // Prepare statement
            PreparedStatement pstmt = con.prepareStatement(databaseQueryStringMark);
    // Prepare parameters (primary keys)
            java.sql.Array array = con.createArrayOf("integer", paramsArray.toArray());
            pstmt.setArray(1, array);
            logger.debug("Query for mark bulk data as completed start execution ...");
    // Execute procedure
            pstmt.executeQuery();
            logger.debug("Query for mark bulk data as completed execution completed ...");
        }
    }
}

这个问题的问题是:

如果Postgresql服务器上没有高负载,实用程序工作正常,没有问题。

然而,对于Postgresql的高负载,服务器标记过程(Postgresql过程)的工作时间足够长(大约两个小时)。标记过程(完成Postgresql程序)后我可以看到我的java进程在内存中。它没有终止。

Postgresql函数的代码是

    CREATE OR REPLACE FUNCTION affiliates_service_json_data_mark("id$arr" integer[])
  RETURNS void AS
$BODY$
declare
begin
  update solr_interface.affiliates_json_data
  set is_transfered_to_solr = true
  where id in (select unnest(id$arr)
               );
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION affiliates_service_json_data_mark(integer[])
  OWNER TO postgres;

你能否告诉我这个问题的根源在哪里以及如何解决?

0 个答案:

没有答案