0

假设我们有两个用户对 PostgreSQL 中的同一个表运行查询。所以,

用户 1:SELECT * FROM table WHERE year = '2020'

用户 2:SELECT * FROM table WHERE year = '2019'

它们是否会同时执行,而不是一个接一个地执行?

我希望如果我有 2 个处理器,我可以同时运行这两个处理器。但是我认为事情变得更加复杂,这取决于数据所在的位置(例如磁盘),因为它是同一张表,是否存在分区、配置、事务等。有人可以帮助我了解如何确保就 PostgreSQL 而言,我得到了我想要的行为?在什么情况下我会得到我想要的行为,在什么情况下我不会?

编辑:我发现另一个问题非常接近我的要求 - https://dba.stackexchange.com/questions/72325/postgresql-if-i-run-multiple-queries-concurrently-under-what-情况-wo。它有点旧,没有太多答案,希望能有新的看法。

4

1 回答 1

1

如果两个用户有两个独立的连接并且他们没有竭尽全力互相阻止,那么查询将同时执行。如果他们需要同时访问同一个缓冲区,或者同时将同一个磁盘页面读入一个缓冲区,他们将使用非常快速的锁定/协调方法(LWLocks、自旋锁或像 CAS 之类的原子操作)来协调那。确切的技术因版本而异,因为更好的方法在受支持的平台上变得广泛可用,并且人们找到时间来更改实现以使用这些更好的方法。

就 PostgreSQL 而言,我可以确保获得我想要的行为吗?

您应该始终获得查询的正确答案(或者如果您使用最高(和非默认)隔离级别,则可能会出现某种错误,表明序列化失败,但如果每个这些查询在单语句事务中运行。)

我觉得你想多了。使用数据库管理系统的重点是您不需要对其进行微观管理。

此外,“并行查询”是指使用多个 CPU 的单个查询,而不是同时运行的不同查询。

于 2020-02-13T16:45:29.623 回答