如何确定实体框架是否在等待来自连接池的连接?

时间:2013-07-23 17:00:09

标签: sql-server entity-framework-5

我看到一些间歇性的减速\ sql超时错误,我无法确定原因。我已经拼凑了一些线索,但我需要一些帮助来确定可能的后续步骤。

问题

我们有一个包含超过100万条记录的表,我们从Web应用程序运行异步计数。该表经常写入。偶尔计数需要2分钟,有时它会超时,有时它会在同一生成的sql中返回一秒钟。

我有一个理论认为连接池中的所有连接都很忙,所以它在等待...但我不知道如何证明它。

我们的设置

  • SQL 2012,Entity Framework 5.0和MVC Web API。

线索信息

  • 在慢响应时间内,我可以通过sql运行相同的sql 管理工作室,并在一秒钟内返回。
  • 在慢响应期间,该网站的所有其他功能 表现良好,慢度仅限于这个区域。
  • 仅在生产数据库上出现问题。我试图在没有运气的情况下重新开发它。

到目前为止我尝试了什么

  • 我们遇到了一个问题,即计数锁定了表格和时间
    出。因为桌子被锁了这么长时间才导致了 破坏了我们的应用程序。我们将范围改为“读取” 没有承诺“这似乎有固定的锁定问题,但没有 超时。

  • 描述了实体框架

  • 生成的查询

详情

在这里查看SQL事件探查器是运行查询。

-- network protocol: LPC
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read uncommitted



 exec sp_executesql N'SELECT 
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT 
        COUNT(1) AS [A1]
        FROM [dbo].[CampaignSendResults] AS [Extent1]
        WHERE ([Extent1].[CampaignId] = @p__linq__0) AND (0 =  CAST( [Extent1].[ResultType] AS int))
    )  AS [GroupBy1]',N'@p__linq__0 uniqueidentifier',@p__linq__0='0BACD499-A665-4721-902A-37EAB49A8A8C'


exec sp_executesql N'SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[CampaignSendResults] AS [Extent1]
    WHERE ([Extent1].[CampaignId] = @p__linq__0) AND (0 =  CAST( [Extent1].[ResultType] AS int)) AND ( CAST( [Extent1].[SendDate] AS datetime2) >= @p__linq__1)
)  AS [GroupBy1]',N'@p__linq__0 uniqueidentifier,@p__linq__1 datetime2(7)',@p__linq__0='0BACD499-A665-4721-902A-37EAB49A8A8C',@p__linq__1='2013-07-23 00:35:12.6930000'

1 个答案:

答案 0 :(得分:0)

问题可能是

set arithabort off

应该是

set arithabort on