2011-04-05 73 views
2

问候, 我一直在分析删除存储过程的问题。该过程只是执行某个实体的级联删除。作为SP执行时,SQL挂起,但是SQL正如SQL

当我在查询编辑器中将SP分解成SQL时, 7秒,但是,当通过EXEC SP执行SP时,需要1分钟才能执行。

我都试过,没有运气以下:

  • 掉落的SP,然后重新创建它使用WITH RECOMPILE
  • 读取未提交新增SET事务隔离级别

  • 的SQL运行在编辑器与许多并发连接没有问题。

  • 的EXEC过程有或无并发连接

挂过程类似于:

ALTER PROCEDURE [dbo].[DELETE_Something] 
    (
     @SomethingID INT, 
     @Result INT OUT, 
     @ResultMessage NVARCHAR(1000) OUT 
    )--WITH RECOMPILE--!!!DEBUGGING 
    AS 

    --SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED--!!!DEBUGGING 

    SET @Result=1 
    BEGIN TRANSACTION 
    BEGIN TRY 

     DELETE FROM XXXXX --APPROX. 34 Records 
     DELETE FROM XXXX --APPROX. 227 Records   
     DELETE FROM XXX --APPROX. 58 Records 
     DELETE FROM XX --APPROX. 24 Records  
     DELETE FROM X  --APPROX. 14 Records 

     DELETE FROM A -- 1 Record 
     DELETE FROM B -- 1 Record 
     DELETE FROM C -- 1 Record 

     DELETE FROM D --APROX. 3400 Records !!!HANGS FOR OVER ONE MINUTE TRACING THROUGH SP BUT NOT SQL 

     GOTO COMMIT_TRANS 

    END TRY 
    BEGIN CATCH 
     GOTO ROLLBACK_TRANS 
    END CATCH  

    COMMIT_TRANS: 
     SET @Result=1 
     COMMIT TRANSACTION 
     RETURN 

    ROLLBACK_TRANS: 
     SET @Result=0 
     SET @ResultMessage=CAST(ERROR_MESSAGE() AS NVARCHAR(1000)) 
     ROLLBACK TRANSACTION 
     RETURN 

回答

2

确保您的统计信息是最新的。假设DELETE语句有一定参考参数获得通过,你可以尝试OPTIMIZE FOR UNKNOWN选项,如果你使用的是SQL 2008

+1

感谢您的回复。我用sp的优化选项对一个有很多索引的表中的语句,问题就解决了!那么什么解决了这个问题?与重建,优化或其组合。不幸的是,我在使用OPTIMIZE选项的同时重新编译。 当我退回到原始SP时,问题已消失。 – 2011-04-06 00:54:50

1

这更多的是一个参数嗅探(或欺骗)的问题。这是一个很少使用的SP。使用OPTION(OPTIMIZE FOR UNKNOWN)作为针对使用参数的语句对比较大的表格显然解决了该问题。谢谢SqlACID的提示。

DELETE FROM 
    ProblemTableWithManyIndexes 
WHERE         
    [email protected] 
OPTION (OPTIMIZE FOR UNKNOWN) 
1

与任何性能问题,你需要测量为什么它挂起“。猜测会让你无处可逃。使用方法学方法,如Waits and Queues。最简单的做法是在执行sp时执行请求exec wait_typewait_timewait_resourcesys.dm_exec_requests。根据实际造成堵塞的情况,您可以采取适当的措施。

+0

感谢您的回复......我已经花了半天时间从这方面分析问题。该进程始终在没有等待类型的运行状态下执行。当我启动并发会话时,它们在命令持续时间(未被阻止)按预期被阻塞。 我切换到另一台服务器,并有同样的问题。 – 2011-04-06 00:44:28