Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database PostgreSQL中的并发查询-实际发生了什么?_Database_Postgresql_Postgresql Performance_Postgresql 12_Postgresql Parallel Query - Fatal编程技术网

Database PostgreSQL中的并发查询-实际发生了什么?

Database PostgreSQL中的并发查询-实际发生了什么?,database,postgresql,postgresql-performance,postgresql-12,postgresql-parallel-query,Database,Postgresql,Postgresql Performance,Postgresql 12,Postgresql Parallel Query,假设有两个用户在PostgreSQL中对同一个表运行查询。所以 用户1:从表中选择*,其中年份='2020'和 用户2:从年份为“2019”的表中选择* 他们是否会同时执行,而不是一个接一个地执行 我希望如果我有两个处理器,我可以同时运行这两个处理器。但我认为,考虑到数据位于同一个表中(如磁盘),以及是否存在分区、配置、事务等,问题会变得复杂得多。有人能帮助我了解如何确保在PostgreSQL方面获得所需的行为吗?在什么情况下我会得到我想要的行为,在什么情况下我不会 编辑:我发现另一个问题非常接

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

用户1:
从表中选择*,其中年份='2020'

用户2:
从年份为“2019”的表中选择*

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

我希望如果我有两个处理器,我可以同时运行这两个处理器。但我认为,考虑到数据位于同一个表中(如磁盘),以及是否存在分区、配置、事务等,问题会变得复杂得多。有人能帮助我了解如何确保在PostgreSQL方面获得所需的行为吗?在什么情况下我会得到我想要的行为,在什么情况下我不会


编辑:我发现另一个问题非常接近我所问的-。这是一个有点老,没有太多的答案,如果能有一个新的看法,将不胜感激

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

就PostgreSQL而言,我可以确保达到我想要的行为

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

我觉得你想得太多了。使用数据库管理系统的意义在于,您不需要对其进行微观管理


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

我对微观管理方面特别感兴趣,因为我正在学习系统的内部结构。并行查询是“内部”和“内部”查询并行性的总称,因此它既可以指使用多个CPU的单个查询,也可以指同时运行的多个查询。不过,它有点老,没有太多的答案,希望能有一个新的看法。你能帮忙吗?