我目前正在尝试通过使用linq to sql和sql server express 2008数据库的报表网站提高性能。
我发现随着我现在在更“丑陋”的表中接近一百万行时,性能已成为一个真正的问题,尤其是一份报告需要3分钟才能生成。

本质上,我有一个循环,对于每个用户,循环访问数据库并获取他们身上的数据集合。然后以各种方式查询此数据(并根据需要加载更多行),直到我有了一个漂亮的小汇总对象,然后可以将其激发到一组silverlight图表上。使用了延迟加载,报告从大约8个链接表中提取数据。

问题是我不知道瓶颈在哪里以及如何提高性能。由于某些限制,我被迫对表中的许多主键使用uniqueidentifiers-这可能是个问题吗?

基本上,我需要花时间来提高性能,但是对于数据库或linq to sql来说都做不到。无论如何,我能看到瓶颈在哪里吗?

作为我正在运行的快递,我无权访问探查器。我正在考虑将查询重写为sql的已编译linq,但担心数据库可能是罪魁祸首。

我知道这个问题有点开放,在不了解我的设置(数据库架构等)的情况下很难回答,但是对于如何找出瓶颈所在的任何建议,我们将不胜感激!

谢谢

更新:
感谢所有出色的建议,并感谢一些出色工具的链接。

感兴趣的人更新
通过调整linq,我无法更快地进行查询。问题似乎是我的大多数数据库访问代码都是在循环中发生的。我看不到解决办法。基本上,我通过查看许多用户数据(因此是循环)来构建报告。将所有记录放在最前面似乎有点疯狂-800,000 +行。我的直觉是有更好的方法,但是对我来说,这是技术上的飞跃!

但是,向其中一个表的外键之一添加另一个索引可以提高性能,因此现在生成报告需要20秒,而不是3分钟!

最佳答案

我使用了这个出色的工具:Linq2Sql profiler。它在应用程序端起作用,因此不需要数据库服务器性能分析功能。

您必须向应用程序中添加一行初始化代码,然后在单独的桌面应用程序探查器中为您显示每个LINQ查询的SQL查询,其中包含执行它的确切代码行(cs或aspx),数据库时间和应用程序执行时间以及它甚至可以检测一些常见的性能问题,例如n + 1个查询(执行查询以进行迭代)或无限制的数据集。您需要付费,但也可以使用试用版。

关于sql - 性能瓶颈-Linq to SQL或数据库-如何知道?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2257507/

10-10 23:50
查看更多