首页 > 解决方案 > 使用大量不同的连接字符串和连接池对效率有害吗?

问题描述

在我们的数据库中,我们需要动态地创建和使用模式。为此,我们希望使用动态 DbContext,它在构造时接受模式名称并将其用于此上下文中的所有查询。

我们的第一个想法是在导致数千个不同连接字符串的搜索路径连接字符串参数中指定模式。我的问题是这是否是 npgsql 中连接池策略的预期用例。我读到为每个连接字符串管理一个单独的连接池,这将导致数千个连接池每个都有一个或两个连接,这似乎很浪费。但另一方面,也有一些常见的用例,每个用户都有自己的数据库角色。由于角色也在连接字符串中指定,因此该场景还必须处理越来越多的连接字符串。

我们有一个备份策略,其中模式包含在 DbContext 的模型中。在这种情况下,我们将不得不管理数千个不同的模型,从而导致创建它们的开销或增加用于缓存它们的 RAM 使用量,但每个上下文都将使用相同的连接字符串。

标签: entity-framework-corenpgsql

解决方案


通读这个最近的问题,其中涉及到这个问题。

tl;dr 是的,连接字符串的任何差异都会导致不同的连接池,这会对性能产生重大影响,因为连接绑定到特定的租户并且不能共享 - 在一般情况下,强烈建议只使用一个游泳池。

解决此问题的一种方法(如问题中所示)是每次切换到新租户时手动设置 search_path。


推荐阅读