执行没有死锁和应用程序的存储过程而不会挂起

时间:2017-11-24 09:51:06

标签: sql sql-server stored-procedures amazon-rds

我正在执行一个存储过程,它必须在服务器时间的上午12点01分定期更新作业调度程序,而不会出现任何死锁或任何干扰。

程序将评估大约15000条记录的完整行以进行计算,并且必须进行更新,并且需要2分钟才能完成执行。

所以我在下面的代码中添加了这个代码,以避免在执行此过程时出现死锁,直到它完成。

SET DEADLOCK_PRIORITY HIGH

exec [ProcedureName]

SET DEADLOCK_PRIORITY LOW

此代码是否会导致数据库操作或应用程序性能出现问题?

注意:我测试了多个人,以便在我执行查询的同时访问应用程序网格。它不影响性能,我的要求也解决了。但仍想了解更多关于DB的依赖关系。请建议

由于

1 个答案:

答案 0 :(得分:0)

如果您选择一个stored proc的查询提示,则任何并行进程都可能发生死锁。

您可能没有注意到性能损失,因为其他查询可能会被暂停。 sp_who2。在执行proc

时跟踪任何被阻止的进程是个好主意
    SELECT * FROM dbo.sysprocesses WHERE spid IN 
     (SELECT blocked FROM dbo.sysprocesses where blocked <> 0)

如果您没有看到任何阻止的进程,请在执行时检查是否存在死锁。

SELECT  L.request_session_id AS SPID, 
    DB_NAME(L.resource_database_id) AS DatabaseName,
    O.Name AS LockedObjectName, 
    P.object_id AS LockedObjectId, 
    L.resource_type AS LockedResource, 
    L.request_mode AS LockType,
    ST.text AS SqlStatementText,        
    ES.login_name AS LoginName,
    ES.host_name AS HostName,
    TST.is_user_transaction as IsUserTransaction,
    AT.name as TransactionName,
    CN.auth_scheme as AuthenticationMethod
FROM    sys.dm_tran_locks L
    JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
    JOIN sys.objects O ON O.object_id = P.object_id
    JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
    JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
    JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
    JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
    CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
WHERE   resource_database_id = db_id()

值得查看perfmon计数器和执行时运行缓慢的查询。 讨论的问题是我们想要使用SET DEADLOCK_PRIORITY HIGH的原因,您是否查看了数据库上设置的事务隔离级别。 切换到read committed snapshot isolation level将真正减少使用这些查询提示的需要。请参阅https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server

此查询将告诉您数据库中隔离级别的状态。

select name
        , s.snapshot_isolation_state
        , snapshot_isolation_state_desc
        , is_read_committed_snapshot_on
        , recovery_model
        , recovery_model_desc
        , collation_name
    from sys.databases s