У меня есть многопоточное приложение, где N потоков обращаются к базе данных MySQL.Каждый запрос создаст свой собственный MySqlConnection intance, чтобы избежать совместного использования MySqlDataReader .Однако мы сталкиваемся с пиками ЦП на наш сервер базы данных.Я уже пытался запустить SHOW PROCESSLIST , но в результатах нет медленных запросов.Я подозреваю, что основной причиной является то, как потоки обрабатывают соединения.
Ниже приведен пример моего метода запроса.
public List<Configuration> GetAlertConfigByDeviceID(string deviceID)
{
List<Configuration> configurations = new List<Configuration>();
try
{
using (MySqlConnection dbConnection = new MySqlConnection(WinAlerterConfig.WebConnectionString))
{
dbConnection.Open();
using (MySqlCommand dbCommand = dbConnection.CreateCommand())
{
dbCommand.CommandText = StoredProcedures.SqlGetAlertCfgDetailByDeviceID;
dbCommand.Parameters.Add(new MySqlParameter("DeviceID", deviceID));
using (MySqlDataReader dbResultSet = dbCommand.ExecuteReader())
{
if (dbResultSet.HasRows)
{
while (dbResultSet.Read())
{
configurations.Add(new Configuration()
{
ConfigID = dbResultSet.GetUInt64Safe(0),
AlertType = dbResultSet.GetUInt64Safe(1),
ZoneID = dbResultSet.GetUInt64Safe(2),
Timeout = dbResultSet.GetInt64Safe(3),
DeviceID = dbResultSet.GetStringSafe(4),
FromZoneID = dbResultSet.GetUInt64Safe(5),
OtherZoneAlert = dbResultSet.GetBooleanSafe(6),
Remarks = dbResultSet.GetStringSafe(7)
});
}
}
dbResultSet.Close();
dbResultSet.Dispose();
}
dbCommand.Dispose();
}
dbConnection.Close();
dbConnection.Dispose();
}
}
catch (MySqlException ex)
{
Logger.LogErrorLine("GetAlertConfigByDeviceID: {0} {1} {2}", ex.Message, Environment.NewLine, ex.StackTrace);
}
catch (Exception ex)
{
Logger.LogErrorLine("GetAlertConfigByDeviceID: {0} {1} {2}", ex.Message, Environment.NewLine, ex.StackTrace);
}
return configurations;
}
Я также включил "polling = true;" в нашей строке подключения.Поэтому я предполагаю, что MySQL или ADO.net будут обрабатывать пул соединений.
Что-то не так в моем методе?Пул соединений уже обработан ADO.net уже?