【问题标题】: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/… 和可能的其他地方记录。

标签: sql sql-server-2008 connection-string connection-pooling


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多