PostgreSQL中对不同表(相同数据库)的并发查询

PostgreSQL中对不同表(相同数据库)的并发查询,postgresql,Postgresql,有谁能帮助我理解PostgreSQL的内部结构吗?如果我从两个客户端访问两个单独的表(同一个数据库),与在不同时间对单独的表执行查询相比,查询响应时间会增加。我对不同表上的同时查询如何导致更长的执行时间感到困惑。理论上,如果我在不同的表上同时执行查询,那么两个客户机的表都将被解锁,执行时间应该保持不变 我想知道,由于数据库相同,使用公共共享资源是否会产生任何开销 请帮忙 好吧,让我们看看最基本的情况 磁盘上存储了两个大型表 您可以对这两个单独的表运行两个查询 但是,虽然它们是由DB表示的两个独立

有谁能帮助我理解PostgreSQL的内部结构吗?如果我从两个客户端访问两个单独的表(同一个数据库),与在不同时间对单独的表执行查询相比,查询响应时间会增加。我对不同表上的同时查询如何导致更长的执行时间感到困惑。理论上,如果我在不同的表上同时执行查询,那么两个客户机的表都将被解锁,执行时间应该保持不变

我想知道,由于数据库相同,使用公共共享资源是否会产生任何开销


请帮忙

好吧,让我们看看最基本的情况

磁盘上存储了两个大型表

您可以对这两个单独的表运行两个查询

但是,虽然它们是由DB表示的两个独立的逻辑表,但实际上它们共享同一个磁盘

因此,当每个单独的postgres进程读取每个表时,磁头来回滑动,试图提供数据,因此每个进程都在磁盘驱动器(单一共享资源)上相互争斗

这就像有一家银行有两个出纳员窗口和两条线,但只有一个出纳员在后面做所有的工作


这并没有考虑到任何其他可能影响查询速度的因素。这只是一个可能发生的案例的基本例子。

好吧,让我们来看看最基本的案例

磁盘上存储了两个大型表

您可以对这两个单独的表运行两个查询

但是,虽然它们是由DB表示的两个独立的逻辑表,但实际上它们共享同一个磁盘

因此,当每个单独的postgres进程读取每个表时,磁头来回滑动,试图提供数据,因此每个进程都在磁盘驱动器(单一共享资源)上相互争斗

这就像有一家银行有两个出纳员窗口和两条线,但只有一个出纳员在后面做所有的工作


这并没有考虑到任何其他可能影响查询速度的因素。这只是一个可能发生的案例的基本例子。

这里有很多事情需要记住

首先,顺序磁盘I/O和随机磁盘I/O之间存在巨大差异。使用随机磁盘I/O,您无法让操作系统帮助预取,但可以使用顺序访问。因此,在顺序读取中,操作系统将提取比我们最初读取的数据多得多的数据,我们将在操作系统从另一个表中提取数据用于另一个查询时获取数据。在随机访问中,您可以得到所描述的效果,但在随机访问中,您需要等待磁头移动,而不会出现并发问题,因为您正在进行随机读取

要记住的第二件事是,不同的查询计划具有不同的I/O配置文件。如果我们从磁盘上提取,比如说,表中10%的页面,并且我们有一个索引,我们可能会选择按顺序加载索引,然后按逻辑顺序遍历以找到我们的记录(而磁盘正在为另一个查询做事情),然后接受从磁盘上随机提取几页的开销。当然,这涉及到等待头部移动,可能存在也可能不存在使情况更糟的并发问题。因此,完全有可能查询1进行索引扫描,查询2进行顺序扫描,并在查询1处理索引时提取所需的大部分数据。也许你会得到威尔描述的一些问题,但可能不会太多

最后一件事是缓存,这一点非常关键。数据库倾向于缓存大量记录,因为这样可以完全避免磁盘I/O。所以在这种情况下,你可能会有一些非常不同的东西。查询1可能在内存中工作,或者主要在内存中工作,而查询2可能在磁盘上运行。一般来说,如果您有足够的内存,使您感兴趣的大多数数据都能很好地存储在内存中,并且有足够的空间用于其他软件(如内核),那么可能出现的磁盘I/O问题将不会是实际问题,并且您通常访问磁盘的唯一时间将是提交WAL段


所以答案是“视情况而定”,这取决于你的系统。这取决于RAM和数据大小。这取决于你的硬盘和操作系统。这取决于具体的查询。这取决于其他使用模式。这要视情况而定。

这里有很多事情需要记住

首先,顺序磁盘I/O和随机磁盘I/O之间存在巨大差异。使用随机磁盘I/O,您无法让操作系统帮助预取,但可以使用顺序访问。因此,在顺序读取中,操作系统将提取比我们最初读取的数据多得多的数据,我们将在操作系统从另一个表中提取数据用于另一个查询时获取数据。在随机访问中,您可以得到所描述的效果,但在随机访问中,您需要等待磁头移动,而不会出现并发问题,因为您正在进行随机读取

要记住的第二件事是,不同的查询计划具有不同的I/O配置文件。如果我们从磁盘上提取,比如说,表中10%的页面,并且我们有一个索引,我们可能会选择按顺序加载索引,然后按逻辑顺序遍历以找到我们的记录(而磁盘正在为另一个查询做事情),然后接受从磁盘上随机提取几页的开销。当然,这涉及到等待头部移动,可能存在也可能不存在使情况更糟的并发问题。所以这是完全可能的