postgresql并发查询作为存储过程

时间:2014-05-09 19:24:02

标签: postgresql stored-procedures

我有2个与相同数据表交互的存储过程。 首先执行几个小时,第二个执行即时。 因此,如果我先运行第一个(第二个连接),那么第二个程序将等待第一个程序结束。 如果两者可以同时运行,那对我的数据是无害的,怎么做?

1 个答案:

答案 0 :(得分:1)

在第二个连接上阻止较短查询的事实表明,较长的查询在查询期间在表上获得了独占锁。

这表明它正在进行写入,就好像它们都是读取一样,不应该是任何锁定问题。 PgAdmin可以显示在较长查询期间哪些锁处于活动状态,以及较短查询是否确实在较长查询中被阻止。

如果较长的查询确实在进行写操作,那么您可以通过分块来减少锁争用,例如,这可能允许读者在分块更新/插入之间 - 但是如果它是一个需要独占写锁定的操作,那么它将阻止所有人,直到它完成。

您也可以优化查询,使其成为一个不排他性的低级锁定,但这完全取决于查询的具体内容正在做和你的数据。