簡體   English   中英

MySQL連接花費太長時間?

[英]MySQL connection taking too long?

看來我的代碼需要很長時間才能打開連接,我已經進行了一些測試,並且花費的時間太長了,以前它的最大加載時間為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內完成,這比第一個連接要快得多。

Oracle的Connector / NET提供程序具有一個已知的錯誤#80030 ,該錯誤可使與服務器的第一次連接非常慢。

我建議切換到MySqlConnector ,它是OSS的替代品,可以修復此錯誤,總體上性能更高,並提供真正的異步I / O。

顯然,您的硬件與任何呼叫的性能都息息相關,因此呼叫需要花費多長時間是沒有意義的問題。

建立數據庫連接通常是一個緩慢的過程,這就是為什么連接池和連接重用是一種常見的技術。

進行概要分析(而不是秒表監視)可以使您更好地了解瓶頸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM