我应该在数据库连接字符串中设置最大池大小吗?如果我不这样做会怎样?

Posted

技术标签:

【中文标题】我应该在数据库连接字符串中设置最大池大小吗?如果我不这样做会怎样?【英文标题】:Should I set max pool size in database connection string? What happens if I don't? 【发布时间】:2011-12-08 16:55:18 【问题描述】:

这是我的数据库连接字符串。直到现在我才设置最大池大小。

public static string srConnectionString = 
                       "server=localhost;database=mydb;uid=sa;pwd=mypw;";

那么目前我的应用程序支持多少个连接?增加连接池大小的正确语法是什么?

应用程序是用 C# 4.0 编写的。

【问题讨论】:

如果您没有问题,请将其保留为默认值。 目前是,但我认为这可能会在高峰时刻引起问题。所以我更喜欢设置高于默认值。我读到默认是 100 我对吗? 默认连接池大小 100 由 Microsoft 在docs.microsoft.com/en-us/dotnet/framework/data/adonet/… 和可能的其他地方记录。 【参考方案1】:

对于 Spring yml 配置:

spring:
  datasource:
    url: $DB-URL
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: $DB-USERNAME
    password: $DB-PASSWORD
    hikari:
      auto-commit: true
      maximum-pool-size: 200

application-prod.properties 文件:

spring.datasource.hikari.maximum-pool-size=200

【讨论】:

【参考方案2】:

我们可以通过以下方式定义最大池大小:

                <pool> 
               <min-pool-size>5</min-pool-size>
                <max-pool-size>200</max-pool-size>
                <prefill>true</prefill>
                <use-strict-min>true</use-strict-min>
                <flush-strategy>IdleConnections</flush-strategy>
                </pool>

【讨论】:

这是什么文件? 不清楚这是什么文件,如果是webconfig那么我们应该在哪里添加这个标签。【参考方案3】:

“目前是,但我认为它可能会在高峰时刻引起问题” 我可以确认,我遇到了由于峰值请求而导致超时的问题。设置最大池大小后,应用程序运行没有任何问题。 IIS 7.5 / ASP.Net

【讨论】:

这不是答案【参考方案4】:

目前您的应用程序支持池中的 100 个连接。如果要将 conn 字符串增加到 200,则如下所示:

public static string srConnectionString = 
                "server=localhost;database=mydb;uid=sa;pwd=mypw;Max Pool Size=200;";

您可以通过在数据库中执行sp_who 过程来调查您的应用程序使用了多少与数据库的连接。在大多数情况下,默认连接池大小就足够了。

【讨论】:

除了通过连接字符串设置最大和最小池大小之外,还有其他方法吗?我宁愿用代码来做...... 将“最大池大小”设置为 30 时会发生什么。当所有插槽都充满“使用中”和“空闲连接”时,空闲连接会自动关闭以使新连接的空间? @Pierre - 您将收到类似于以下内容的错误:System.InvalidOperationException: Timeout expired。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。在 System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) 在 System.Data.SqlClient.SqlConnection.Open() 默认情况下100个连接的参考是什么? 文档文章 SQL Server 连接池 (ADO.NET) 的“添加连接”部分的第一段指出 100 是默认的最大池大小。 (docs.microsoft.com/en-us/dotnet/framework/data/adonet/…) 见 2019-09-14

以上是关于我应该在数据库连接字符串中设置最大池大小吗?如果我不这样做会怎样?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们需要在 ConnectionString 中设置 Min pool size

如何在上下文文件中设置连接池?

在 SQL Server 中设置最大连接超时的最佳方法

Oracle中的连接池大小概念

Tomcat中设置数据源和连接池

memset()没有在c中设置内存