【发布时间】:2021-12-22 19:46:54
【问题描述】:
我在全局范围内设置了 postgresql 语句超时,如下所示:
ALTER ROLE user SET statement_timeout = '10s';
当我有一个长时间运行的查询时,我可以像这样覆盖超时,它可以在我的 DB IDE 中正常工作:
SET statement_timeout TO '0';
SELECT pg_sleep(20);
但是当我从 Dapper 执行相同的操作时,它会抛出异常:
57014: canceling statement due to statement timeout
我怎样才能让它在 Dapper 中工作?
【问题讨论】:
-
为什么不设置命令超时呢?
-
因为命令超时是另一回事(客户端超时与服务器端超时)
-
它们指的是相同的超时时间,通过不同的机制设置。为什么要设置这么短的全局超时?你有阻塞或锁定问题吗?这不会解决他们。服务器仍将使用资源来处理这些不长的查询并丢弃结果。最好找出并解决问题(可能是缺少索引?长事务会导致冲突增加?)
-
如果问题是由长事务引起的阻塞,解决方法是不使用长事务。乐观并发可以将可伸缩性提高 几个 个数量级。
-
不,它们指的不是同一个超时时间。
标签: c# sql postgresql dapper npgsql