代码之家  ›  专栏  ›  技术社区  ›  salgo60

LINQ和SQL Server性能优化SQL Server 2008数据库最佳实践?

  •  1
  • salgo60  · 技术社区  · 15 年前

    我的问题是使用Linq for SQL优化性能的最佳实践是什么 性能就是用户界面中的响应超时。

    现在,我在一个SQL Server 2008数据库中有一些销售数据,并显示这些数据(mat,yearly,in different segments,growth in segment,percent of market growth,,,,) 在ASP.NET应用程序的图表中,使用Linq for SQL构造可执行的iQuery表达式

    我看到了一个挑战,我有一个数据库,并使用LINQ构造所有问题,我无法控制创建了什么SQL(我可以跟踪它,但、、、、)并且我不使用存储过程,因此如何获取数据就像一个黑盒。

    现在我运行一些单元测试和手动测试应用程序,并使用Databasse Engine Tuning Advisor创建什么索引等…

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

    分析,分析,分析。:

    不仅要测量时间,还要注意I/O。频繁执行的I/O密集型查询可以由于缓存而快速执行,但反过来会对整个DB服务器性能产生负面影响,因为其他查询的可用资源将更少。

    正如您所说,L2s可能有点黑盒,因此您需要在实际用户使用应用程序时尝试复制所有场景和/或配置文件。然后使用它1)调整查询2)添加索引3)进行任何其他所需的更改以获得所需的性能。

    我有一个专门为linq-to-sql设计的分析工具,它可以减少一点黑盒——它允许您在将生成的查询与导致执行特定查询的代码(调用堆栈)绑定的同时进行运行时分析。您可以下载并获得免费试用许可证,网址为http://www.huagati.com/l2sprofiler/“rel=”nofollow noreferrer“>http://www.huagati.com/l2sprofiler/

    这里更详细地介绍了我的分析器的背景原因: http://huagati.blogspot.com/2009/06/profileing linq to sql applications.html

    …这里介绍了一些高级分析选项: http://huagati.blogspot.com/2009/08/walkthrough of-newst-filters and.html


    如果有许多表和许多列,另一个可能有用的方法是将索引信息获取到代码编辑器中。这是通过将带有该信息的XML文档注释添加到实体类和成员属性中来完成的;然后该信息将显示在vs代码编辑器的工具提示中:

    …这样您就可以在键入查询时看到,如果有一个索引覆盖了在where子句等中使用的列,为了避免在其中键入所有这些内容,我也为此创建了一个工具。请参阅 http://www.huagati.com/dbmltools中的“更新文档”功能。/

    由于缓存速度快,但反过来会对整个数据库服务器性能产生负面影响,因为其他查询的可用资源将更少。

    正如您所说,L2s可能有点黑盒,因此您需要在实际用户使用应用程序时尝试复制所有场景和/或配置文件。然后使用它1)调整查询2)添加索引3)进行任何其他所需的更改以获得所需的性能。

    我有一个专门为linq-to-sql设计的分析工具,它可以减少一点黑盒——它允许您在将生成的查询与导致执行特定查询的代码(调用堆栈)绑定的同时进行运行时分析。您可以下载它并在获得免费试用许可证 http://www.huagati.com/L2SProfiler/

    这里更详细地介绍了我的分析器的背景原因: http://huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html

    …这里介绍了一些高级分析选项: http://huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html


    如果有许多表和许多列,另一个可能有用的方法是将索引信息获取到代码编辑器中。这是通过将带有该信息的XML文档注释添加到实体类和成员属性中来完成的;然后该信息将显示在vs代码编辑器的工具提示中:

    code editor tooltips showing xml doccomments for L2S entity classes, member properties etc

    …这样您就可以在键入查询时看到,如果有一个索引覆盖了WHERE子句等中使用的列,为了避免在其中键入所有这些内容,我也为此创建了一个工具。请参阅中的“更新文档”功能 http://www.huagati.com/dbmltools/

        2
  •  2
  •   nitzmahone    15 年前

    除此之外,我通常会将SQL事件探查器和CLR事件探查器与大型ISH数据集上的一些模拟用户一起使用,并观察通过DataContext进行的长时间运行的查询和/或长时间运行的调用(这可能表示在封面下发生了多次往返)。我个人的偏好是在默认情况下禁用所有数据上下文的延迟加载和对象跟踪,因此在大多数情况下,我必须选择多个往返。虽然您不能直接影响生成的SQL,但是您可以小心使用loadWith/associateWith,并确保不会获取非常大/效率低下的结果集,并分解具有大量昂贵联接的查询(有时多次往返比大表上的mondo联接便宜)。

    这都是关于测量的-使用任何你能使用的工具。