MySQL连接耗时太长?

时间:2018-01-23 18:20:05

标签: c# mysql .net database-performance

似乎我的代码需要很长时间才能打开一个连接,我已经运行了一些测试,并且它花费的时间太长,之前它将以500ms的最大速度加载。

这个时间在2秒内达到峰值,这是在C#中打开MySQL连接的正常行为,还是我的概念正确?我用秒表判断这个时间非常准确。

让我们对它进行基准测试......

Startup 1 took: 1777ms
Startup 2 took: 1817ms
Startup 3 took: 1796ms
Startup 4 took: 1673ms
Startup 5 took: 1905ms
Startup 6 took: 1716ms

这是瓶颈的开始......

public DatabaseConnection Connection => new DatabaseConnection(_connectionString);

public bool ConnectionWorks()
{
    try
    {
        using (Connection)
        {
        }

        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

对于对DatabaseConnection类的构造函数感兴趣的人,这里是。

public DatabaseConnection(string connectionString)
{
    _connection = new MySqlConnection(connectionString);
    _command = _connection.CreateCommand();

    OpenConnection();
}

OpenConnection()方法:

private void OpenConnection()
{
    if (_connection.State == ConnectionState.Open)
    {
        throw new InvalidOperationException("Connection already open.");
    }

    _connection.Open();
}

连接字符串:

var connectionString = new MySqlConnectionStringBuilder
{
    ConnectionLifeTime = 60 * 5,
    ConnectionTimeout = 30,
    Database = "testing",
    DefaultCommandTimeout = 30,
    Logging = false,
    MaximumPoolSize = 250,
    MinimumPoolSize = 10,
    Password = "********",
    Pooling = true,
    Port = 3306,
    Server = "127.0.0.1"
    UserID = "root"
};

我做了一些调试,可以看到瓶颈来自_connection.Open(),第一个之后的所有连接都在20ms内完成,这比第一次连接要快得多......

2 个答案:

答案 0 :(得分:2)

Oracle的Connector / NET提供程序有一个known bug #80030,可以很快地与服务器建立第一个连接。

我建议切换到MySqlConnector,这是修复此错误的OSS替代方案,整体性能更高,并提供真正的异步I / O.

答案 1 :(得分:0)

显然,你的硬件与任何通话的性能都非常相关,所以通话需要多长时间,这是一个毫无意义的问题。

建立数据库连接通常是一个缓慢的过程,这就是连接池和连接重用是一种常见技术的原因。

分析,而不是秒表,可以让您更好地了解瓶颈。