neo4j documentation对交易有这个说法:
// Now, transaction handling in Neo4j is very easy
try ( Transaction tx = graphDb.beginTx() )
{
// Database operations go here
tx.success();
}
我知道这闻到了腥味,只有在遇到问题后才调查它。它应该是:
// Transaction handling in neo4j is slightly less easier , omg a tx.close() :D
try ( Transaction tx = graphDb.beginTx() )
{
// Database operations go here
tx.success();
}
finally {
tx.close()
}
我运行了大量的批量全文索引操作,现在我似乎无法启动db了。 (在使用6g堆的嵌入式应用程序中执行此操作时,使用shell时出现GC错误,其他异常)。
如何销毁事务日志(是的,我将在此之后以批量插入器模式运行数据库)?
P.S。,
➜ index pwd
/Users/hassan/code/scala/avro/chunks.db/index
➜ index ls
lucene lucene.log.2 lucene.log.v0 lucene.log.v10 lucene.log.v12 lucene.log.v14 lucene.log.v3 lucene.log.v5 lucene.log.v7 lucene.log.v9
lucene-store.db lucene.log.active lucene.log.v1 lucene.log.v11 lucene.log.v13 lucene.log.v2 lucene.log.v4 lucene.log.v6 lucene.log.v8
是否会删除*.log
诀窍或将这些日志注册到重要位置 - 即,删除它们会导致进一步的问题吗?
建议:
shell应该有一些逻辑来处理这样的情况。应该让我做出一些选择。
更好的是,事务重放逻辑应该知道如何在JVM堆的范围之外工作(就像任何事务数据库一样)。
答案 0 :(得分:2)
实际上,第一个try()
版本与第二个版本相同。
Neo4j的事务实现AutoClosable
,因此java try-with-resource处理将在try块的末尾正确调用tx.close()
。
为了不保留逻辑日志,您可以添加如下配置选项:
keep_logical_logs=false
or
keep_logical_logs=2 days
or
keep_logical_logs=500M
答案 1 :(得分:1)
删除索引目录中的日志文件似乎可以解决问题。在启动期间不会抛出任何异常,因此我认为数据库是健康的。如果他们愿意,neo4j开发者可以充实它。