相关疑难解决方法(0)

从Web上调用存储过程很慢,快速从Management Studio调用

我有一个存储过程,每次从Web应用程序调用它都会疯狂地超时.

我启动了Sql Profiler并跟踪了那些超时的调用,最后找到了这些东西:

  1. 当从MS SQL Management Studio中执行语句时,使用相同的参数(实际上,我从sql profile trace复制了过程调用并运行它):它以5~6秒的平均值完成.
  2. 但是当从Web应用程序调用时,它需要超过30秒(在跟踪中),因此我的网页实际上超时了.

除此之外,我的web应用程序都有自己的用户事实上,每一件事情是相同的(相同的数据库,连接,服务器等),我也试过直接与Web应用程序的用户的工作室运行查询,并没有花费超过6秒.

我怎样才能知道发生了什么?

我假设它与我们使用BLL> DAL图层或表适配器这一事实无关,因为跟踪清楚地显示了延迟在实际过程中.这就是我所能想到的.

编辑我在这个链接中发现ADO.NET设置ARITHABORT为true - 这在大多数情况下是好的,但有时会发生这种情况,建议的解决方法是向with recompile存储过程添加选项.在我的情况下,它不起作用,但我怀疑它与此非常相似.任何人都知道ADO.NET做了什么或者我在哪里可以找到规范?

asp.net stored-procedures sql-server-2008

94
推荐指数
4
解决办法
6万
查看次数

实体框架查询性能与原始SQL执行的extrem不同

我有一个关于Entity Framework查询执行性能的问题.

架构:

我有这样的表结构:

CREATE TABLE [dbo].[DataLogger]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [ProjectID] [bigint] NULL,
    CONSTRAINT [PrimaryKey1] PRIMARY KEY CLUSTERED ( [ID] ASC )
)

CREATE TABLE [dbo].[DCDistributionBox]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [DataLoggerID] [bigint] NOT NULL,
    CONSTRAINT [PrimaryKey2] PRIMARY KEY CLUSTERED ( [ID] ASC )
)

ALTER TABLE [dbo].[DCDistributionBox]
    ADD CONSTRAINT [FK_DCDistributionBox_DataLogger] 
    FOREIGN KEY([DataLoggerID]) REFERENCES [dbo].[DataLogger] ([ID])

CREATE TABLE [dbo].[DCString] 
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [DCDistributionBoxID] [bigint] NOT NULL,
    [CurrentMPP] [decimal](18, 2) NULL,
    CONSTRAINT [PrimaryKey3] …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework sql-server-2008 entity-framework-6

22
推荐指数
1
解决办法
9358
查看次数

在linq查询上优化dateTime

嗨,大家好,我正面临性能问题.
当我在查询中声明的dateTime运行此查询时

var temp = (from p in db.BEM_EVT_FULL
                      where (p.date_reception > new DateTime(2015,01,01))
                      group p by p.mc_object into g
                      orderby g.Count() descending
                      select new StringIntType
                      {
                          str = g.Key,
                          nbr = g.Count()}).Take(50).ToList();
Run Code Online (Sandbox Code Playgroud)

在sql server profiler中,它被转换为该查询

SELECT TOP (50) 
[Project1].[C3] AS [C1], 
[Project1].[mc_object] AS [mc_object], 
[Project1].[C2] AS [C2]
FROM ( SELECT 
    [GroupBy1].[A1] AS [C1], 
    [GroupBy1].[A2] AS [C2], 
    [GroupBy1].[K1] AS [mc_object], 
    1 AS [C3]
    FROM ( SELECT 
        [Extent1].[mc_object] AS [K1], 
        COUNT(1) AS [A1], 
        COUNT(1) AS [A2]
        FROM [dbo].[BEM_EVT_FULL] AS [Extent1]
        WHERE …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server asp.net entity-framework

9
推荐指数
1
解决办法
481
查看次数

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

更新:我已经创建了一个建议,以便在EF的未来版本中实现提示控制.去这里投票吧.

我有一个问题,我的一个实体框架(EF)查询在Sql Server中执行需要很长时间,但是当我将生成的TSQL复制并粘贴到Sql Server Management Studio(SSMS)时,它运行得非常快.经过一些调查后,我发现我遇到了参数嗅探问题,正确的解决方法是插入许多查询提示之一(OPTIMIZE FOR,RECOMPILE等).如何将这些提示插入到我的EF查询中?

从不同角度出现的相关问题在这里,这里这里.

sql-server entity-framework query-hints parameter-sniffing

7
推荐指数
1
解决办法
4501
查看次数

实体框架缓存查询计划性能随着不同参数而降低

我有以下问题.

背景

我正在尝试使用MVC3,EF4和jquery在450万条记录的表上实现自动完成选择器.

这是表:

CREATE TABLE [dbo].[CONSTA] (
  [afpCUIT] nvarchar(11) COLLATE Modern_Spanish_CI_AS NOT NULL,
  [afpNombre] nvarchar(30) COLLATE Modern_Spanish_CI_AS NULL,
  [afpGanancias] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  [afpIVA] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  [afpMonot] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  [afpIntSoc] varchar(1) COLLATE Modern_Spanish_CI_AS NULL,
  [afpEmpl] varchar(1) COLLATE Modern_Spanish_CI_AS NULL,
  [afpAct] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  CONSTRAINT [CONSTA_pk] PRIMARY KEY CLUSTERED ([afpCUIT])
)
ON [PRIMARY]
GO

CREATE NONCLUSTERED INDEX [CONSTA_Nombre_idx] ON [dbo].[CONSTA]
  ([afpNombre])
WITH (
  PAD_INDEX = OFF,
  DROP_EXISTING = OFF,
  STATISTICS_NORECOMPUTE = OFF,
  SORT_IN_TEMPDB = OFF, …
Run Code Online (Sandbox Code Playgroud)

sql-server performance entity-framework-4 sql-execution-plan sql-server-2008r2-express

5
推荐指数
1
解决办法
4339
查看次数

相同的查询 - 查询存储中的不同查询

问题:

我们使用实体框架(6.21)作为我们的 ORM 管理器。我们的数据库是Azure Sql 数据库。

因为某些参数化查询(在我们的应用程序中经常使用)在某些输入上运行速度很慢(在某些输入上运行 60 秒,在其他输入上运行 0.4 秒)

我们开始使用 MS SQL Management Studio 中的 QueryStore 和 QueryStore 资源管理器(MSSMS -> 对象资源管理器 -> 查询存储)调查这些查询。

我们发现,QueryStore 将两个相同的(相同的 sql 查询但不同的参数 - 参数甚至没有存储)查询存储为不同的查询(具有不同的query_id)。通过不同的查询,我的意思是表中的不同行 sys.query_store_query)。

我通过查看 QueryStore 表来检查这一点:

    SELECT 
     qStore.query_id,
     qStore.query_text_id,
     queryTextStore.query_sql_text
     ROW_NUMBER() OVER(PARTITION BY query_sql_text ORDER BY query_sql_text ASC) AS rn 
    FROM 
    sys.query_store_query qStore
    INNER JOIN 
    sys.query_store_query_text queryTextStore 
    ON qStore.query_text_id = queryTextStore.query_text_id
Run Code Online (Sandbox Code Playgroud)

截图来自MSSSM

我无法在 MSSMS 中轻松比较这些查询的计划,因为每个查询都有其自己的关联计划。

预期行为: 我假设每次后续运行具有不同参数的相同查询都会导致:

1/ 重新使用现有计划或

2/根据传递的参数值创建另一个计划......

例子:

查询看起来像这样(实际上查询要复杂得多,因为它们是由 EntityFramework 生成的):

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server entity-framework azure-sql-database sql-query-store

5
推荐指数
1
解决办法
1393
查看次数