外国数据包装器并发请求



PostgreSQL如何处理多个并发请求到外来表?

如果两个数据消费者想访问同一外国表,是否必须依次拭目以待并执行查询,或者支持查询的并发?

以下答案主要用于PostgreSQL的外国数据包装器,postgres_fdw

如果您需要有关其他外国数据包装器的信息,这将随着外国数据包装器的实现和基础数据存储的功能而有所不同。例如,要使用file_fdw并发(读取)请求,您需要一个文件系统,允许两个进程可以同时打开文件。

与同一外桌子的查询并发一样,就像本地表一样。它是处理SQL语句的远程服务器,锁定了修改的行直到交易完成,并且类似。

因此,可以任意有很多并发的读者,读者不会阻止作家,反之亦然。

如果您使用WHERE条件运行UPDATE S或DELETE s,就不能将其推到外国服务器(检查执行计划),则可能会比使用本地表时拥有更多的锁。

想象一下这样的查询:

UPDATE remote_tab SET col = 0 WHERE <complicated condition that is true for only one row>;

在本地表上,这只会锁定一排。

如果条件太复杂而无法将其推到外国服务器,则postgres_fdw将首先运行这样的查询:

SELECT ctid, col FROM remote_tab FOR UPDATE;

将检索并锁定表的所有行。

然后将在本地应用WHERE条件,并且在外国服务器上更新了结果行:

UPDATE remote_tab SET col = 0 WHERE ctid = ...;

因此,在这种情况下,并发和性能可能会遭受很多痛苦。

相关内容

  • 没有找到相关文章

最新更新