标签: connection-pooling

Mysql 连接池类似于 PostgreSQL 的 PgBouncer

我正在寻找一种独立于语言的 mysql 池解决方案。我使用 PGBouncer 作为示例,因为它

  1. 驻留在数据库所在的服务器上
  2. 只需更改连接字符串即可使用池连接器
  3. 无需修改代码

MySQL 中是否有类似的东西,我可以通过安装第 3 方连接器并通过该端口连接来使用池?

mysql connection-pooling

6
推荐指数
1
解决办法
9496
查看次数

SQL 连接池

我有一个连接到 SQL 的 .net 网站。只是想知道默认情况下是否启用了连接池还是我必须自己激活?

sql-server connection-pooling

6
推荐指数
1
解决办法
1292
查看次数

如何从 Lambda -> RDS with Node 处理 MySQL 数据库连接/池

我在测试我的 Lambda 函数时遇到了一些问题。我的测试,我并行N执行我的 Lambda 函数。在我的 lambda 函数中,我通过 Knex 检索数据库连接。我正在搞乱 db init 中的设置pool: { min: 0, max: [1 or 5] },这似乎修复/破坏了一些东西,这取决于我代码中的其他东西。

执行我的 lambda 函数 20 次会输出正确的结果,但是,当我达到 500 次时(我期望在生产中看到的很容易超过这个),事情开始破裂。我遇到了诸如Error: ER_CON_COUNT_ERROR: Too many connections, 之类的错误Error: pool is draining and cannot accept work(如果我knex.destroy()在 lambda 函数的末尾使用 Knex 的接口)。在 AWS Lambda 和 RDS 中处理连接和池以实现规模化的正确方法是什么?如果我在 AWS 上运行相同的压力测试,我在本地机器上看到的问题是否会重现?

mysql aws connection-pooling amazon-rds

6
推荐指数
1
解决办法
9108
查看次数

增加 SQL Server 中最大池大小的成本

我们有一个大部分时间运行良好的公共前台网站。但我们有时会遇到连接高峰(例如在邮件活动之后),并且我们会收到如下错误:

超时已过。从池中获取连接之前超时时间已过。发生这种情况的原因可能是所有池连接都在使用中并且已达到最大池大小

我们非常确定所有连接都已正确关闭(没有连接泄漏)。

因此我们决定增加池中允许的连接数(默认为 100)。

我们将其增加到 1000(max pool size=1000;在我们的连接字符串中),现在我们的站点可以处理大多数连接峰值。(我精确地说该网站在专用服务器上运行)

我的问题是:最大连接池的增加可能会产生哪些负面影响?

编辑:这是我在这些高峰期间使用 sp_who2 时所得到的:

如果最大池设置为 100,则我有超过 100 行“等待命令”行:

SPID 地位 登录 主机名 块通过 数据库名称 命令 中央处理器时间 磁盘IO 最后一批 程序名称 SPID 请求ID
数字 睡眠 数据库用户 我网站的 IIS 池名称 我的数据库名称 等待命令 0 0 05/10 14:48:59 .Net SqlClient 数据提供程序 137 0

我可以看到所有“LastBatch”都是在几秒钟前执行的。

sql-server connection-pooling

5
推荐指数
1
解决办法
1万
查看次数

从性能的角度来看,来自应用程序的数据库连接是否昂贵?

一位同事告诉我,连接到数据库的成本很高,而且可能会损害应用程序的性能。他们让我创建一个调用另外 8 个过程的过程,这样他们调用一个过程并取回 8 个数据集。从我的角度来看,SQL 必须等待每个数据集返回,然后才能开始检索下一个数据集,这样也会产生负面影响。

任何人都可以量化应用程序的连接成本,并让我知道最好的方法是调用多个过程还是一个主过程?

performance sql-server-2008 sql-server connection-pooling connections

4
推荐指数
1
解决办法
967
查看次数

使用 ADO.NET 增加 Sql 服务器睡眠状态?

我们有一个实时的 ASP.Net 应用程序,它被大约 1000 个并发用户使用。在这个应用程序中,我们使用了连接池。在 web.config 中定义了 2 个不同名称的连接字符串,但我们正在调用相同的数据库。

<add key="connection1" value="server=1.1.1.1;USER ID=**;pwd=**;database=test;Max Pool Size=500;Min Pool Size=50;Connection Timeout = 300; Pooling='true'" />

<add key="connection2" value="server=1.1.1.1;USER ID=**;pwd=**;database=test;Max Pool Size=500;Min Pool Size=50;Connection Timeout = 300; Pooling='true'"/>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我们正在打开一个关闭连接的每个地方,如下所示

try{
    if (connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }
}
catch(Exception ex)
{
}
finally{connection.close()}
Run Code Online (Sandbox Code Playgroud)

现在的问题是当我使用 sp_who2 检查数据库时,我看到大约 1000 或更多的睡眠会话,并且每个记录程序名称是“.Net sql server Provider”。我浏览了 MSDN,发现如果我们使用连接池,那么连接会保持打开状态直到 4-8 分钟。所以我现在有点困惑,如果我只使用 2 个连接字符串和连接池,那么为什么我们看到这么多休眠连接,我想它应该只有 2 个?有人可以在这种情况下帮助我并提出正确的建议吗?我们怎样才能最大限度地减少睡眠时间。也不确定是应用程序池(IIS 服务器)错误还是应用程序错误?请帮忙。

谢谢,

sql-server ado.net sql-server-2012 connection-pooling

3
推荐指数
1
解决办法
922
查看次数

连接池错误

我从我的 .net 应用程序中收到以下错误。

Source: xxx.Services.xxx.xxx.xxxx.xxxx.xxxxRequest
    ---
    System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.
Run Code Online (Sandbox Code Playgroud)

我看过几篇关于这个连接池错误的帖子。我已经阅读了其中的大部分内容,我明白为什么会发生这种情况,以及应用程序端的可能解决方案,比如关闭应用程序打开的连接。这些是我的理解:

  1. 打开的连接并没有关闭,称为连接泄漏。
  2. 正在使用 100 多个并发连接。如果我们有 100 个以上的并发用户,请增加连接字符串中的最大池大小。
  3. 缓慢的查询或打开的事务会阻止新连接。当连接被慢速查询执行/打开事务保持打开时,而不是重用连接,新连接将打开并最终达到连接池最大值。

我如何从数据库端监控这一点。我看到了一些建议,例如使用 sp_who 或 sp_who2 查看现有会话。当我看到这些错误时执行 sp_who2 时,我看到很多活动会话,但是我怎么能看到连接池池下的信息和连接。问题:

  1. 有什么方法可以跟踪打开的连接并将其与从数据库端创建的连接池相关联。

我注意到当问题发生时,通常运行得更快的查询会变慢。

  1. 这是预期的吗?因为我怀疑慢查询是否导致连接池错误。

sql-server transaction connection-pooling timeout

2
推荐指数
1
解决办法
1921
查看次数

如何在sql server中找到会话的连接字符串值?

我知道有一个类似的问题之前,在SO如图所示这里 然而,这个问题的答案真的没有解决我的问题。这是我的场景,我将使用 PowerShell 进行演示。

以下代码将在我的本地 sql2016 实例上创建两个会话

#The only difference in the two connection strings is [pooling] property, the $connstr_1 has pooling=true, while the $connstr_2 has pooling=false.

$connstr_1 = "data source=localhost\sql2016; initial catalog=master; trusted_connection=true; app=ConnPoolTest; pooling=true";
$SqlConnection1 = New-Object System.Data.SqlClient.SqlConnection($connstr_1)


$connstr_2 = "data source=localhost\sql2016; initial catalog=master; trusted_connection=true; app=ConnPoolTest; pooling=false";
$SqlConnection2 = New-Object System.Data.SqlClient.SqlConnection($connstr_2)

$SqlConnection1.Open()

$SqlConnection2.Open();
Run Code Online (Sandbox Code Playgroud)

我的问题是在 sql server 端,我怎么知道哪个会话的连接字符串将池属性设置为true和哪个设置为false

sql-server connection-pooling

0
推荐指数
1
解决办法
191
查看次数