相关疑难解决方法(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万
查看次数

实体框架Linq查询的麻烦:在SSMS中立即运行,在EF LINQ中运行8-10秒

我在SQL(变量名称混淆)中获得了以下查询,该查询试图获得值(Ch,Wa,Bu,Hi),从而得到Pi条目的最大数量(cnt).

select top 1 Pi.Ch, Pi.Wa, Pi.Bu, Pi.Hi, COUNT(1) as cnt 
from Product, Si, Pi
where Product.Id = Si.ProductId
and Si.Id = Pi.SiId
and Product.Code = @CodeParameter
group by Pi.Ch, Pi.Wa, Pi.Bu, Pi.Hi
order by cnt desc
Run Code Online (Sandbox Code Playgroud)

它在我们的生产数据库的SQL管理工作室中立即运行.我已经在C#LINQ和Entity Framework中成功编写了一些代码,但代码运行的方式都是8到10秒.一次尝试是以下代码(在没有打印的情况下执行此操作,因为一次调用会产生相同的性能结果):

using(var context = new MyEntities()){
    var query = context.Products
        .Where(p => p.Code == codeFromFunctionArgument)
        .Join(context.Sis, p => p.Id, s => s.ProductId, (p, s) => new { sId = s.Id })
        .Join(context.Pis, ps => ps.sId, pi => pi.SiId, (ps, pi) => new …
Run Code Online (Sandbox Code Playgroud)

c# sql linq sql-server entity-framework

10
推荐指数
1
解决办法
2630
查看次数

SQL参数减慢查询速度

我有一个查询,我通过ADO.NET与SQL Server 2008R2一起使用.当我在内联使用LIKE子句时,它在不到一秒的时间内工作,从200万返回5行.如果我在SSMS查询开始时像在.NET中那样声明参数,那就需要永远.

它是相同的查询,但参数化.

第一个(工作正常)是(工作正常):

;WITH Results_CTE AS (
    SELECT  ld.* , ROW_NUMBER() OVER (ORDER BY PK_ID) AS RowNum  
    FROM list..List_Data ld 
    WHERE Name IS NOT NULL  AND 
    Postcode LIKE 'SW14 1xx%' 
) SELECT * FROM Results_CTE 
Run Code Online (Sandbox Code Playgroud)

永远需要的第二个是:

declare @postcode varchar(10) = 'SW14 1xx'
;WITH Results_CTE AS (
    SELECT  ld.* , ROW_NUMBER() OVER (ORDER BY PK_ID) AS RowNum  
    FROM list..List_Data ld
    WHERE Name IS NOT NULL  AND 
    Postcode LIKE @postcode +'%' 
) SELECT * FROM Results_CTE 
Run Code Online (Sandbox Code Playgroud)

我相信这与SQL Server的内部工作有关,但我真的不知道.

sql sql-server ado.net parameterized sql-server-2008

5
推荐指数
2
解决办法
2580
查看次数

ADO.NET超时但在SSMS中工作正常

我正在尝试使用SQL Server 2008R2从ADO.NET运行查询.我使用的是CTE提供寻呼和增加对参数@Offset和@Limit,这都是整数.

我正在根据用户输入构建参数化查询.最终输出是这样的:

;WITH Results_CTE AS (
    SELECT  ld.* , ROW_NUMBER() OVER (ORDER BY Key_Field) AS RowNum  
    FROM list..List_Data ld 
    WHERE VALUE_2010 IS NOT NULL  
    AND  Postcode LIKE @Postcode + '%' 
) SELECT * FROM Results_CTE 
    WHERE RowNum > @Offset AND RowNum < @Offset + @Limit 
OPTION (RECOMPILE) 
Run Code Online (Sandbox Code Playgroud)

我正在使用一些类似的条款,这就是我的原因OPTION RECOMPILE.如果我通过SSMS声明参数并运行如下:

declare @postcode varchar(10) = 'SW1 1AA';
declare @Offset int = 0;
declare @Limit int = 10;
Run Code Online (Sandbox Code Playgroud)

我的响应时间非常快(不到1秒).但是,如果我尝试使用ADO.NET,它需要永远.我尝试用这两个参数添加参数:

cmd.Parameters.AddWithValue("@Offset", startRowIndex) // times out
cmd.Parameters.AddWithValue("@Limit", …
Run Code Online (Sandbox Code Playgroud)

.net sql sql-server ado.net sql-server-2008

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

高效的TSQL查询

有没有更有效的方法来编写这个SQL查询?

它在大约45秒内从一组100,000行返回大约800行.

我正在使用Sql Server 2008 R2

Select a.Div as Division
      ,a.Room as RoomLocation
      ,a.Form as Forms
      ,a.Nums as TotalNumberLocations
From AView a
Where a.Id = '1'
And a.Div = 'A'
Group By a.Div, a.Nums, a.Room, a.Form

union

Select b.Div as Division
      ,b.Room as RoomLocation
      ,b.Form as Forms
      ,b.Nums as TotalNumberLocations
From AView b
Where b.Id = '1'
And b.Div = 'G'
Group By b.Div, b.Nums, b.Room, b.Form

union

Select c.Div as Division
      ,c.Room as RoomLocation
      ,c.Form as Forms
      ,c.Nums as …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008

0
推荐指数
1
解决办法
89
查看次数

在字符串中使用带有变量的文字"@"

我正在尝试将SQL语句编写为字符串文字,其中包含两个变量,如下所示 -

String str="abc"; int val=123;
String sql=@"SELECT Column1, Column2 
             FROM Table
             WHERE Column1= '"" + str + ""' AND Column2 > "" + val + ""
             ORDER BY Column1";
Run Code Online (Sandbox Code Playgroud)

但这些变量不被视为变量.有帮助吗?

更新:添加order by子句的屏幕截图.有红色卷曲下划线. 在此输入图像描述

c#

0
推荐指数
1
解决办法
242
查看次数