我们有一份报告给我们带来了一些严重问题,因此我决定将其放入控制台应用程序中以解决问题。
报告只是从SQL中选择一个简单的单一选项,返回大约25列, 我们的日期范围可以是3-6个月,返回大约10k行,所以我们不是在谈论大量数据。
这是最新发生的事情,当报告运行时,它从我们的网站出来,在控制台中,它需要13-18分钟才能完成,等待似乎发生在
{{2 }}
现在这是奇怪的事情,它在SQL Server Management Studio中运行大约1-3秒,当我们的Delphi开发人员创建一个类似的应用程序时,它也是几秒钟运行,这只发生在使用.NET
我们尝试从数据集更改为加载到datareader, 使用此代码..
da.Fill(ds);然而它根本没有帮助,它只是显示在夹头中,但经常有延迟。我正在考虑它的SQL,但无法解释为什么它在Delphi和SQL Management Studio中工作正常。
我尝试过在所有框架上使用.NET 2.0,3.5和4。
这是我的代码
using (var dr = _command.ExecuteReader()) { if (dr.HasRows) { int i = 0; while (dr.Read()) { var startRead = DateTime.Now; Console.Write("{2}\t{0}\t{1}\t", dr.GetInt32(0), dr.GetString(1), i); var tookRead = DateTime.Now.Subtract(startRead); Console.WriteLine("Took: " + tookRead); i++; } }
有什么想法吗?我们的DBA指责框架,我实际上是在SQL中谴责某些东西..(可能是统计数据,或者是损坏的数据库)
答案 0 :(得分:2)
.NET与其他客户端(SQL Management Studio)之间SQL性能的差异通常取决于配置不同的连接 - 频繁的罪魁祸首是ANSI_NULLS; ANSI_PADDING。
尝试查看SQL Management Studio中如何配置连接,然后在.NET应用程序中复制相同的内容。
答案 1 :(得分:0)
您提供的信息不包含足够的详细信息,无法真正帮助...
如果SSMS真的快得多,那么原因可能是某些会话/连接设置 - 与.NET相比,SSMS使用了微妙的不同设置。
有关可能有什么不同/错误等的一些解释和提示,请参阅http://www.sommarskog.se/query-plan-mysteries.html