Sql 无死锁地执行存储过程,无死锁地执行应用程序

Sql 无死锁地执行存储过程,无死锁地执行应用程序,sql,sql-server,stored-procedures,amazon-rds,Sql,Sql Server,Stored Procedures,Amazon Rds,我正在执行一个存储过程,该过程必须在服务器时间的12.01 am定期更新作业调度程序,而不会出现死锁或任何干扰 该过程将评估15000条记录周围的完整行以进行计算,必须对其进行更新,完成执行需要2分钟 SELECT L.request_session_id AS SPID, DB_NAME(L.resource_database_id) AS DatabaseName, O.Name AS LockedObjectName, P.object_id AS Locke

我正在执行一个存储过程,该过程必须在服务器时间的12.01 am定期更新作业调度程序,而不会出现死锁或任何干扰

该过程将评估15000条记录周围的完整行以进行计算,必须对其进行更新,完成执行需要2分钟

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()
所以我在下面添加了这段代码,以避免在执行这个过程时出现死锁,直到它完成为止

SET DEADLOCK_PRIORITY HIGH

exec [ProcedureName]

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

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


谢谢

如果您为一个
存储的进程选择查询提示
,那么任何并行进程都有可能发生死锁

您可能不会注意到性能没有受到影响,因为其他查询可能会暂停
sp_who2
。在执行过程中跟踪任何阻塞的进程是一个好主意

    SELECT * FROM dbo.sysprocesses WHERE spid IN 
     (SELECT blocked FROM dbo.sysprocesses where blocked <> 0)
值得一看perfmon计数器和执行时运行缓慢的查询。 争论的问题是为什么我们要使用
设置死锁\u优先级高
,您是否查看了数据库上设置的事务隔离级别。 切换到
读取提交的快照隔离级别
将真正减少使用这些查询提示的需要。请参阅

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

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

如果为一个
存储过程选择查询提示
,则任何并行进程都有可能发生死锁

您可能不会注意到性能没有受到影响,因为其他查询可能会暂停
sp_who2
。在执行过程中跟踪任何阻塞的进程是一个好主意

    SELECT * FROM dbo.sysprocesses WHERE spid IN 
     (SELECT blocked FROM dbo.sysprocesses where blocked <> 0)
值得一看perfmon计数器和执行时运行缓慢的查询。 争论的问题是为什么我们要使用
设置死锁\u优先级高
,您是否查看了数据库上设置的事务隔离级别。 切换到
读取提交的快照隔离级别
将真正减少使用这些查询提示的需要。请参阅

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

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

>>>检查执行时是否存在死锁:……我在实际场景中遇到了相同的问题,我已设置电子邮件警报并进行监控。Ofcos我们所有人都知道SQL会自行修复死锁,我相信找到死锁、表命中等的受害者是很重要的。任何死锁都会在您甚至点击F5执行代码之前得到解决。很明显,当它们作为死锁的受害者被挂起时,并行进程如何。我们是否查看跟踪标志1204和1222?。很高兴获得您的输入伙伴>>>当它们作为死锁的受害者被挂起时,并行进程如何>>检查执行时是否存在死锁:……我在真实场景中遇到了相同的问题,我已设置电子邮件警报并进行监视。Ofcos我们所有人都知道SQL会自行修复死锁,我相信找到死锁、表命中等的受害者是很重要的。任何死锁都会在您甚至点击F5执行代码之前得到解决。很明显,当它们作为死锁的受害者被挂起时,并行进程如何。我们是否查看跟踪标志1204和1222?。很高兴得到您的输入伴侣>>>当它们作为死锁的牺牲品被挂起时,并行进程如何