c# - MySqlConnection ADO.Net 高 CPU 使用率
问题描述
我有一个多线程应用程序,其中 N 个线程正在访问 MySQL 数据库。每个查询都将创建自己的MySqlConnection实例以避免共享MySqlDataReader。但是,我们的数据库服务器遇到 CPU 峰值。我已经尝试运行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 是否已经处理了连接池?
解决方案
删除所有 Close 和 Dispose 调用。using 块已经在处理处置。
还要确保您在 deviceId 列上有一个索引。
然后再试一次。
推荐阅读
- python-3.x - 使用opencv(图像处理)寻找轮廓
- xamarin.ios - 无法在 Xamarin.iOS 中设置状态栏背景
- android - 两个应用程序图标显示 android。我的主线有什么问题吗?
- ray - 在多个 AWS 账户之间设置集群
- html - 如何使用 LESS 查找嵌套类
- google-chrome - Chrome ctrl 逗号和 ctrl 句号不再能够遍历调用帧?
- angular - Ionic 3 - 网络信息插件 - Object(...) is not a function(...)
- sql - 必须声明标识符 DBMS_XSLPROCESSOR
- c# - EF从没有PK的数据库中添加表
- php - 在新服务器和 cPanel 中安装 php4