SQL 性能问题 ASP.Net 应用程序
Posted
技术标签:
【中文标题】SQL 性能问题 ASP.Net 应用程序【英文标题】:SQL Performance Issue ASP.Net App 【发布时间】:2015-11-13 13:52:48 【问题描述】:我们在基于 ASP.NET 的 Web 应用程序中存在性能问题,并且仅在早上登录时可见一次。根据日志看起来像下面的查询需要超过 1 分 20 秒。下次用户登录应用程序并尝试访问同一页面时不会发现任何问题。你能告诉我如何优化这个查询吗?有什么想法可以解决这个问题吗?
日志 -
"11/13/15","08:38:27","ExecuteSql - ---3---- ","8",""
"11/13/15","08:38:27","ExecuteSql - ---4---- : SQL : SELECT TOP 1 CONVERT(varchar(15), Period_End_Date, 107) as PDate FROM PBHISTORY..STATEMENT_OF_CHANGE
ORDER BY Period_End_Date DESC","8",""
"11/13/15","08:39:48","ExecuteSql - ---5---- ","8",""
SQL:
SELECT TOP 1
CONVERT(varchar(15), Period_End_Date, 107) as PDate
FROM
PBHISTORY..STATEMENT_OF_CHANGE
ORDER BY
Period_End_Date DESC
C# ASP.NET -
public string GetDateRangeReportingDate(int reportId)
var report = GetReportInfoById(reportId);
string sql = string.Format(@"SELECT TOP 1 CONVERT(varchar(15), Period_End_Date, 107) as PDate FROM 0..1 ORDER BY Period_End_Date DESC", _historyDatabase, report.SourceTableName);
var data = ExecuteSql(sql);
while (data.Read())
return data["PDate"].ToString();
return null;
private SqlDataReader ExecuteSql(string sql)
SqlDataReader reader;
SqlConnection conn;
var commandTimeOut = ConfigurationManager.AppSettings["PBReportCommandTimeout"].ToString();
string connString = ConfigurationManager.ConnectionStrings["PBReportCS"].ConnectionString;
conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandTimeout = int.Parse(commandTimeOut);
reader = cmd.ExecuteReader();
return reader;
【问题讨论】:
你要获取多少条记录? 避免内联 SQL,实现 IDisposable 接口的任何类也应该包含在 using 语句中……这些都是性能问题——我只能想象系统中还有哪些其他缺陷。跨度> 该列是否有索引? Eldho - 只有一个记录。当我在 SQL Server Studio 中运行查询时,执行时间不会超过 3 秒。 应用池是否设置为每天自动回收?我会关闭它,看看是否可以解决它。听起来它会在一夜之间回收,初始请求需要一段时间,这在 asp.net 中很常见 【参考方案1】:我找到了上面提到的性能问题的解决方案。问题是表中的索引错误,我通过更改我们在生产中获取记录的表的索引来解决此问题。
另外,我通过使用 SQL 数据适配器和 using 语句修复了框架级别的实体类。应用程序在生产中运行速度超快。谢谢你的帮助。
私有字符串 ExecuteSqlNew(string sql) 字符串 connectionString = ConfigurationManager.ConnectionStrings["PBReportCS"].ConnectionString; 字符串 commandTimeOut = ConfigurationManager.AppSettings["PBReportCommandTimeout"].ToString(); 数据集结果 = 新数据集(); 字符串 pDate = "";
try
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
conn.Open();
cmd.CommandTimeout = int.Parse(commandTimeOut);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(result);
adapter.Dispose();
conn.Close();
pDate = result.Tables[0].Rows[0]["PDate"].ToString();
catch(Exception ex)
throw ex;
return pDate;
【讨论】:
以上是关于SQL 性能问题 ASP.Net 应用程序的主要内容,如果未能解决你的问题,请参考以下文章