1

让我解释一下我需要什么信息:

我有几个并发用户同时达到相同的记录。这意味着,在 db 端会有一些排队和锁定。这个缓冲区有多大?可以为 200 多个并发用户保留队列和锁定吗?

如何在我们的设置中确定此缓冲区的大小?有默认设置吗?

4

1 回答 1

1

数据库中没有查询队列(“缓冲区”)。

每个与数据库的并发连接都可以有一个正在运行的查询。其他查询不能在它后面排队* .

您的应用程序可能使用内部连接池,即 Rails,因此您可以等待许多查询,因为连接池中有插槽。

如果您在应用程序和 PostgreSQL 之间有一个像 PgBouncer 代理的外部连接池,那么您可以有更多的查询排队,因为当连接到 pgbouncer 时,您可以在应用程序中拥有更大的池大小,因为 pgbouncer 连接非常轻量级。PgBouncer 将在与 PostgreSQL 的少量实际连接上为这些请求提供服务。当以这种方式使用时,这有效地使 PgBouncer 成为查询队列(尽管不一定是 FIFO 队列)。但是,因为这些查询在发出时实际上并没有命中 Pg,所以它们在 PgBouncer 中等待时不会锁定。这对于某些并发设计可能很重要。


*好的,因此您可以一次发送多个分号分隔的查询,但不能像队列那样串联。

于 2012-09-04T22:11:14.193 回答