现在看来,以前的工作方法已被弃用:
unsupported.dbms.executiontime_limit.enabled=true
unsupported.dbms.executiontime_limit.time=1s
根据documentation新变量负责超时处理:
dbms.transaction.timeout
dbms.transaction_timeout
同时新变量看起来与交易相关。
新的超时变量看起来不起作用。它们在neo4j.conf中设置如下:
dbms.transaction_timeout=5s
dbms.transaction.timeout=5s
缓慢的密码查询未终止。
然后添加Neo4j插件以使用事务建模慢查询:
@Procedure("test.slowQuery")
public Stream<Res> slowQuery(@Name("delay") Number Delay )
{
ArrayList<Res> res = new ArrayList<>();
try ( Transaction tx = db.beginTx() ){
Thread.sleep(Delay.intValue(), 0);
tx.success();
} catch (Exception e) {
System.out.println(e);
}
return res.stream();
}
插件提供的功能是使用新主义Golang包执行的。并且也不会触发超时。
答案 0 :(得分:0)
只有当您的过程代码调用图形上的任何操作(如读取节点和rels)或显式检查当前事务是否标记为终止时,才会超时超时。
对于后者,请参阅https://github.com/neo4j-contrib/neo4j-apoc-procedures/blob/master/src/main/java/apoc/util/Utils.java#L41-L51作为示例。
答案 1 :(得分:0)
根据文件,交易警卫只对孤儿交易感兴趣。
服务器使用超时防止孤立事务。如果在超时期限内没有对给定事务的请求,则服务器将回滚它。您可以通过将dbms.transaction_timeout设置为超时前的秒数来配置服务器配置中的超时。默认超时为60秒。
我找不到如何为未使用本机功能孤立的查询触发超时的方法。
@StefanArmbruster指出了一个好方向。可以通过在Neo4j插件中创建包装函数来获得超时触发功能,就像在apoc中创建一样。