自定义锁超时

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

转载自:https://technet.microsoft.com/zh-cn/library/ms177413(v=sql.105).aspx


如果 Microsoft SQL Server 数据库引擎实例由于其他事务已拥有资源的冲突锁而无法将锁授予给某个事务,则该事务被阻塞,等待现有锁被释放。默认情况下,没有强制的超时期限,并且除了 尝试访问数据(有可能被无限期阻塞)外,没有其他方法可以测试某个资源是否在锁定之前已被锁定。


注意:在 SQL Server 中,可以使用 sys.dm_os_waiting_tasks 动态管理视图确定某个进程是否被阻塞以及被谁阻塞。在早期版本的 SQL Server 中,可以使用 sp_who 系统存储过程。


LOCK_TIMEOUT 设置允许应用程序设置语句等待阻塞资源的最长时间。如果某个语句等待的时间超过 LOCK_TIMEOUT 的设置时间,则被阻塞的语句自动取消,并会有错误消息 1222 (Lock request time-out period exceeded) 返回给应用程序。但是,SQL Server 不会回滚或取消任何包含语句的事务。因此,应用程序必须具有可以捕获错误消息 1222 的错误处理程序。如果应用程序不能捕获错误,则会在不知道事务中已有个别语句被取消的情况下继续运行,由于事务中后面的语句可能依赖于从未执行过的语句, 因此会出现错误。


实现捕获错误消息 1222 的错误处理程序后,应用程序可以处理超时情况,并采取补救措施,例如:自动重新提交被阻塞的语句或回滚整个事务。


若要确定当前 LOCK_TIMEOUT 设置,请执行 @@LOCK_TIMEOUT 函数:

1
2
SELECT  @@lock_timeout;
GO


相关文章:
http://www.sqlservergeeks.com/sql-server-error-1222-lock-request-time-out/

















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1790401 ,如需转载请自行联系原作者












相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
8月前
|
缓存 数据库
并发修改同一记录时需要加锁
并发修改同一记录时需要加锁
|
2月前
|
存储 Java 数据库
如何处理线程池关闭时未完成的任务?
总之,处理线程池关闭时未完成的任务需要综合考虑多种因素,并根据实际情况选择合适的处理方式。通过合理的处理,可以最大程度地减少任务丢失和数据不一致等问题,确保系统的稳定运行和业务的顺利开展。
144 64
|
5月前
|
监控 Java
ThreadPoolExecutor 线程执行超时,释放线程
ThreadPoolExecutor 线程执行超时,释放线程
193 1
|
8月前
|
数据库连接 数据库
多线程事务失效的原因
【5月更文挑战第16天】多线程事务失效的原因
447 0
|
Java 测试技术
高并发编程-自定义带有超时功能的锁
高并发编程-自定义带有超时功能的锁
80 0
|
SQL XML Java
事务超时
本文概览:介绍了超时有关的概念:@Transaction的timeout、mybatis的timeout、mysql的innodb_lock_wait_timeout。
843 0
事务超时
C#中开启线程的四种方法
C#中开启线程的四种方法
C#编程-146:最简单的开启线程
C#编程-146:最简单的开启线程
129 0
C#编程-146:最简单的开启线程
向线程池提交任务和关闭线程池
向线程池提交任务和关闭线程池
634 0