我有一个与Azure托管的PostgreSQL数据库实例进行交互的API服务器。一台postgres服务器上有大量(> 50个)postgres数据库。任何给定的API请求都可能必须与任何给定的数据库进行交互。
不幸的是,我们的Postgres Azure计划仅允许50个连接。我经常收到失败的请求,因为Postgres不会接受更多请求。我的ADO.NET连接池仍保持最近使用的数据库的数据库连接,而与其他数据库的连接出错。
我尝试在连接字符串上设置Max Pool Size
,但似乎连接池限制是按每个数据库而不是每个服务器应用的。我仍然需要尽可能多的缓冲,打开新连接可能需要> 1500ms,如果每次请求都发生这种情况,这超出了我的SLA。
是否有一种方法可以要求.NET从每个服务器或总共打开50个以上的数据库连接?
答案 0 :(得分:0)
设置Max Pool Size
,而不是连接到单独的数据库,而是连接到服务器上的同一数据库,然后执行\connect
语句以更改为所需的数据库。以下代码片段演示了如何建立与master
数据库的初始连接,然后切换到databaseName
字符串变量中指定的所需数据库。
// Assumes that command is a NpgsqlCommand object and that
// connectionString connects to master.
command.Text = "\connect DatabaseName";
using (NpgsqlConnection connection = new NpgsqlConnection(
connectionString))
{
connection.Open();
command.ExecuteNonQuery();
}