MySQL .Net 连接池 connection.Open() 非常慢

Posted

技术标签:

【中文标题】MySQL .Net 连接池 connection.Open() 非常慢【英文标题】:MySQL .Net connection pool connection.Open() very slow 【发布时间】:2012-01-29 13:11:34 【问题描述】:

版本 6.4.4:

使用mysqlConnection最基本的实现,下面的代码在预加载连接池时每个连接需要2-5秒才能达到我的连接字符串中配置的“Min Pool Size”。

任何想法为什么需要这么长时间,如何修复或解决方法?

连接字符串:

<add name="users" connectionString="server=192.168.1.2;User Id=dbuser;password=dbpassword;database=users;Pooling=true;Min Pool Size=10;Max Pool Size=50;Persist Security Info=True;" />

代码

private static void MySqlConnectionTester()

    string connectionString = ConfigurationManager.ConnectionStrings["users"].ConnectionString;

    using (var connection = new MySqlConnection(connectionString))
    
        using (var command = connection.CreateCommand())
        
            command.CommandText = "select * from users;";

            try
            
                connection.Open(); // This line hangs until "Min Pool Size" is reached.
                using (var reader = command.ExecuteReader())
                
                    while(reader.Read())
                    
                        // Read results
                    
                
            
            catch(Exception ex)
            
                // Log exception
            
            finally
            
                connection.Close();
            

        
    

【问题讨论】:

【参考方案1】:

MySQL's homepage 他们写道,您应该避免自己创建、打开和关闭连接对象,而是应该使用应该更好地与连接池配合使用的辅助类。

我还没有测试过,但我刚读过:)

【讨论】:

我知道你所说的信息。他们的建议是不要创建自己的 MySqlConnection() 对象,而是使用 MySqlConnection(connectionString) 重载。池化由不同的连接字符串管理。 @TexasViking 您是否认为服务器/网络是引导项而不是连接器? 我已经考虑过了。我计划今天在本地安装 mysql 以测试该理论。但是,当我删除“自定义”连接字符串池设置时,我几乎可以立即创建连接。【参考方案2】:

MySql 连接器 .Net 6.6.5 在我们这边也存在这个问题。 MySql 连接器 .Net 6.8.3 正在解决这个问题。

面料

【讨论】:

以上是关于MySQL .Net 连接池 connection.Open() 非常慢的主要内容,如果未能解决你的问题,请参考以下文章

关于c3p0连接池连接mysql数据库需要注意的几点

连接池技术 Connection Pooling

Java-自定义简单的mysql数据库连接池

Mysql线程池系列一:什么是线程池和连接池( thread_pool 和 connection_pool)

dbcp2连接池获取数据库连接Connection

JDBC以及连接池连接MySQL出现时区错误问题--An attempt by a client to checkout a Connection has timed out