相关疑难解决方法(0)

使用NOLOCK的实体框架

如何NOLOCK在Entity Framework上使用该功能?XML是唯一的方法吗?

c# ado.net entity-framework

136
推荐指数
7
解决办法
7万
查看次数

实体框架4.2 exec sp_executesql不使用索引(参数嗅探)

对于针对SQL Server 2008 R2运行的实体框架(4.2)生成的简单SQL查询,我遇到了一些主要的性能问题.在某些情况下(但不是全部),EF使用以下语法:

exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE', @param1...
Run Code Online (Sandbox Code Playgroud)

在其他情况下,只需执行原始SQL,并将提供的参数烘焙到查询中.我遇到的问题是使用sp_executesql执行的查询忽略了目标表上的所有索引,导致执行查询极差(通过检查SSMS中的执行计划来确认).

经过一些研究,听起来这个问题可能是由"参数嗅探"造成的.如果我附加OPTION(RECOMPILE)查询提示,如下所示:

exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE OPTION(RECOMPILE)', @param1...
Run Code Online (Sandbox Code Playgroud)

使用目标表上的索引,并且查询执行速度非常快.我还尝试在数据库实例(http://support.microsoft.com/kb/980653)上切换用于禁用参数嗅探(4136)的跟踪标志,但是这似乎没有任何效果.

这给我留下了一些问题:

  1. 无论如何将OPTION(RECOMPILE)查询提示附加到Entity Framework生成的SQL?
  2. 反正有没有阻止Entity Framework使用exec sp_executesql,而只是运行原始SQL?
  3. 还有其他人遇到这个问题吗?还有其他提示/提示吗?

附加信息:

  1. 我确实通过SSMS重启了数据库实例,但是,我将尝试从服务管理控制台重新启动服务.
  2. 参数化设置为SIMPLE(is_parameterization_forced:0)
  3. 针对特殊工作负载进行优化具有以下设置
    • 值:0
    • 最小值:0
    • 最大值:1
    • value_in_use:0
    • is_dynamic:1
    • is_advanced:1

我还要提一下,如果我通过服务管理控制台重新启动SQL Server服务,在使用下面的脚本启用跟踪标志4136后,实际上似乎清除了跟踪标志...也许我应该以不同的方式这样做......

DBCC TRACEON(4136,-1)
Run Code Online (Sandbox Code Playgroud)

entity-framework parameter-sniffing sql-server-2008-r2 sp-executesql

24
推荐指数
2
解决办法
4448
查看次数

调用表值函数时添加查询提示

我正在从实体框架调用一个表值函数,并且需要能够添加option (recompile)它,因为它拾取的执行计划不是最佳的.在SQL Server Management Studio中运行查询,它看起来像这样:

select 
       * 
from dbo.fDE_myquery(0, 0, 3309, '7/1/2013', '7/1/2014', 0, 0)
option (recompile)
Run Code Online (Sandbox Code Playgroud)

来自EF,没有办法添加这个提示,AFAIK.EF部分看起来像:

var query = from f in ctx.fDE_myQuery(aBool, anotherBool, StartDate, 
            EndDate, someInt, moreBool)
            select f;
Run Code Online (Sandbox Code Playgroud)

我看到了这个问题:

如何在实体框架中控制参数嗅探和/或查询提示?

但它已经过时了,所接受的解决方案并没有提供足够的信息来说明如何使用实体框架实际实施建议的解决方案(使用计划指南).如果这是唯一的解决方案,那么如何让实体框架使用计划指南呢?

entity-framework sql-server-2012

21
推荐指数
1
解决办法
5801
查看次数

如何在Entity Framework中指定索引提示?

SQL

select * from table1 with(index=IX_table1_1)
Run Code Online (Sandbox Code Playgroud)

Linq to sql使用ado.net实体想写上面的代码.我特别找不到实体,使用索引.

LINQ

var querysample = from a in db.table1
select a;
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server entity-framework c#-4.0

9
推荐指数
4
解决办法
6014
查看次数

在EF4中使用NOLOCK提示?

我们正在评估EF4,我的DBA说我们必须在所有SELECT语句中使用NOLOCK提示.所以我正在研究如何在使用EF4时实现这一点.

我已经阅读了关于如何在EF4中实现这一点的不同想法,但所有这些似乎都是一种解决方案而不是微软或EF4批准的.在使用LINQ-to-SQL/LINQ-to-Entities和EF4时,希望他们的SELECT语句包含NOLOCK提示的人的"官方Microsoft"响应是什么?

顺便说一下,我发现的绝对最好的信息就在这里,我鼓励每个对这个主题感兴趣的人阅读这个主题.

谢谢.

linq sql-server entity-framework nolock isolation-level

8
推荐指数
4
解决办法
1万
查看次数

SQL Server查询突然变慢

我有一个SQL数据库查询的问题突然(但通常大约每三周)变得缓慢.

安装程序如下:

  • Windows Server 2008(不是R2)64位,8 GB RAM
  • SQL Server Express 2008 R2
  • 数据库的大小为6 GB(文件大小为mdf)
  • Orders查询主要选择的表()有大约24000条记录,其他五条连接表小(100条或更少)
  • 该表Orders有一个包含二进制数据(PDF文档)的varbinary(MAX)Report,平均大小约为200到300 kB(但有时可能高达2 MB).这24000个订单中超过90%的列填充了此列,其他的则是NULL,即6 GB数据库大小的90%以上是二进制数据.

有问题的查询具有以下结构:

SELECT TOP (30) [Project2].[OrderID] AS [OrderID]
                -- around 20 columns more
FROM ( SELECT [Project2].[OrderID] AS [OrderID],
              -- around 20 columns more
              row_number() OVER (ORDER BY [Project2].[OrderID] ASC) AS [row_number]
       FROM ( SELECT [Filter1].[OrderID] AS [OrderID]
              -- around 20 columns more
              FROM ( SELECT [Extent1].[OrderID] AS [OrderID]
                     -- around …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-express sql-server-2008-r2

6
推荐指数
1
解决办法
6859
查看次数