gpt4 book ai didi

c# - linq 和并行性 - SQL Server

转载 作者:行者123 更新时间:2023-11-30 13:01:55 24 4
gpt4 key购买 nike

我遇到了 LINQ To Entities 的问题。

如果我运行我的 LINQ 查询,那么它会在导致大量 CXPACKET 等待的执行计划中使用Parallelism(Gather Streams and Reparation Stream)

但是如果我将 LINQ 转换查询(我通过 ToTraceString 函数获得)直接运行到我的 sql server,那么执行计划不包含并行性。

为什么通过 LINQ 与 SQL 查询本身运行 SQL 时,在并行性方面存在差异?

我该如何克服这个问题?我希望我的 LINQ 查询的运行方式与我直接运行其 SQL 时的方式相同。

执行计划示例:

使用 LINQ: using linq

直接使用SQL:

without linq - sql directly

我可以发布我的 SQL 查询,但我认为它在这里没有帮助...

最佳答案

CXPACKET 等待真的是一个问题吗?

当 SQL Server 收到一个查询时,它会对其进行优化。如果查询的估计成本大于并行度的成本阈值,它将考虑并行查询。如果并行化的查询过多,则始终可以提高此阈值。

我想知道 Entity Framework 查询和您的查询之间是否存在任何可能推高估计成本的差异。

无论哪种方式,CXPATCKET 等待都不是问题。它们是任何并行查询的自然组成部分,我们不会为具有多线程的四核服务器支付额外费用,因此我们可以在一个系列中运行所有内容。另一件要检查的事情是网络。

当通过网络流式传输 IO 时,如果您要返回一堆结果,这可能会花费更多时间。这就是为什么在 SQL Server Management studio 中运行查询可以快速返回,但从另一台服务器进行的查询可能需要一段时间。

关于c# - linq 和并行性 - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com