【问题标题】:LINQ and SQL Server performance tuning the SQL Server 2008 database best practice?LINQ 和 SQL Server 性能调优 SQL Server 2008 数据库最佳实践?
【发布时间】:2009-12-30 03:15:27
【问题描述】:

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

现在我在 SQL Server 2008 数据库中有一些销售数据,我会显示这些数据(MAT、每年、不同细分市场、细分市场增长、市场增长百分比、、、、) 在使用 LINQ for SQL 的 ASP.NET 应用程序中的图表中构造执行的 Iquerable 表达式

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

现在我运行一些单元测试并手动测试应用程序并使用数据库引擎优化顾问创建什么索引等......

【问题讨论】:

    标签: c# linq-to-sql sql-server-2008 iqueryable


    【解决方案1】:

    除此之外,我通常将 SQL 分析器和 CLR 分析器与一些模拟用户一起用于大型数据集,并通过数据上下文(其中可能意味着在幕后发生的多次往返)。我个人的偏好也是默认禁用所有数据上下文的延迟加载和对象跟踪,因此在大多数情况下我必须选择加入多次往返。虽然您不能直接影响生成的 SQL,但您可以小心使用 LoadWith/AssociateWith 并确保您没有获取非常大/低效的结果集,并分解具有大量昂贵连接的查询(有时是多轮-trips 比大桌子上的 mondo joins 便宜)。

    这一切都与测量有关 - 使用任何你能掌握的工具。

    【讨论】:

      【解决方案2】:

      分析,分析,分析。 :)

      不仅要测量时序,还要注意 I/O。由于缓存的原因,频繁执行的 I/O 密集型查询可以快速执行,但反过来又会对整体 db-server 性能产生负面影响,因为可供其他查询使用的资源会更少。

      正如您所说,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 doc-cmets 添加到实体类和成员属性来完成的;然后该信息会显示在 VS 代码编辑器的工具提示中:

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

      【讨论】:

      • 谢谢,我会看看你的工具。我对 LINQ-> SQL 的自发感觉是,与过去相比,您可以编写的代码以及在较小的部分中折射问题的可能性非常好,但是在理解什么/如何调整我认为可以给问题。如果 linq2SQL 实现将来会更改生成的代码会发生什么,那么您将在数据库中拥有另一种访问模式..
      • 虽然未来的一些变化会影响生成的SQL的可能性是存在的,但我认为这不是太担心的事情。 .net 4.0 中对 L2S 的更改至少对生成的 SQL 没有任何大的影响。您的数据库中的更改(涉及的各种表中的数据量)、SQL Server 本身的更改等更有可能产生影响,无论 SQL 是如何生成的,这两者都会影响您的应用程序。
      • 至于调整什么/如何调整,我想这有点“习惯”,就像使用原始 SQL 一样。 L2S 和原始 SQL 中的“可调整”区域或多或少相同,因此您只需要注意可能导致不必要 I/O 的因素并尝试消除这些因素。
      • 有什么好书/网络推荐吗?!?!我有“内部 Microsoft SQL Server 2005 查询调整和优化”当我查看生成的 SQL 时,它是疯狂的 440 行......
      • 440 行中的大部分可能是您可以忽略的内容。查看 where 子句谓词和连接条件。您要确保有索引涵盖了您用来消除行的任何内容,并且没有任何内容阻止使用这些索引。如果您可以共享您的查询(必要时匿名)部分,则更容易提出可能出现的问题。这实际上取决于查询的性质。不幸的是,我没有从书本上学到东西,所以我没有好的书推荐 - 这些年来我只是通过“艰难的方式”学习查询优化...... :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多