SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

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

    在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到“Lock Request time out period exceeded.(Microsoft SQL Server, 错误1222)”,对应的中文错误提示为“已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)”,如下截图所示,不管是用一般权限的账号还是具有sysadmin角色的登录名都是如此。

clipboard

clipboard[1]

这个错误有点奇怪,检查该数据库服务器上监控阻塞的告警邮件,发现有Blocking告警,我用下面SQL语句查看,如下截图所示

clipboard[2]

如上所示,会话ID为65的语句执行 TRUNCATE TABLE [ESQ_ITEM_PRICE_FOR_DCA],它阻塞了会话ID为60的会话,而会话ID为60的会话是YourSQLDba正在更新统计信息

set nocount on   ;With     TableSizeStats as   (   select      object_schema_name(Ps.object_id, db_id('ODS')) as scn --collate Chinese_PRC_CI_AS   , object_name(Ps.object_id, db_id('ODS')) as tb --collate Chinese_PRC_CI_AS   , Sum(Ps.Page_count) as Pg  From    sys.dm_db_index_physical_stats (db_id('ODS'), NULL, NULL, NULL, 'LIMITED') Ps  Group by     Ps.object_id    )  Insert into #tableNames (scn, tb, seq, sampling)  Select     scn  , tb  , row_number() over (order by scn, tb) as seq  , Case       When pg > 200001 Then '10'      When Pg between 50001 and 200000 Then '20'      When Pg between 5001 and 50000 Then '30'      else '100'    End    From     TableSizeStats  where (abs(checksum(tb)) % 1) = 0  

它阻塞了会话ID为68的会话

SELECT COUNT(1) FROM [ESQ_ITEM_PRICE_FOR_DCA]

上面这个案例,有两个比较迷惑的地方:

    一:会话ID为65的进程处于Sleeping状态,而且该会话在执行TRUNCATE语句,照理说TRUNCATE应该非常快就执行完了。很是奇怪的是 一个TRUNCATE会话处于Sleeping状态,这个会话是从Linux服务器Talend应用程序发出的请求。那么只有一种可能就是该TRUNCATE语句位于事务里面,而该事务由于逻辑原因等一直没有提交或回滚。

    二:SQL阻塞语句居然导致了上面“Lock Request time out period exceeded.(Microsoft SQL Server, 错误1222)”。

clipboard[3]

关于上面两个问题,我们可以构造一个案例来看看,在测试数据库TEST里面的按下面步骤就能重新这个错误:

会话语句1:

BEGIN TRAN

  TRUNCATE TABLE TEST;

  --ROLLBACK;

 

会话语句2:

UPDATE STATISTICS dbo.TEST;

 

会话语句3:

 

image 

 

image

 

如上所示,会话52处于sleeping状态了。然后你去SSMS里面查看表,就会遇到这个“已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)”错误。至于实际应用程序Talend是由于什么原因没有提交或回滚事务就不得而知。这个例子完美的演示并重现了这个问题

相关实践学习
使用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
相关文章
|
13天前
|
SQL
简单练习Microsoft SQL Server MERGE同步两个表
【10月更文挑战第13天】本文介绍了在Microsoft SQL Server中使用`MERGE`语句同步两个表的步骤。首先创建源表`SourceTable`和目标表`TargetTable`并分别插入数据,然后通过`MERGE`语句根据ID匹配行,实现更新、插入和删除操作,最后验证同步结果。此方法可根据需求调整以适应不同场景。
|
3月前
|
SQL 存储 关系型数据库
关系型数据库SQLserver基本 SQL 操作
【7月更文挑战第28天】
34 4
|
16天前
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
83 0
|
2月前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
227 3
|
2月前
|
SQL 运维 监控
SQL Server 运维常用sql语句(二)
SQL Server 运维常用sql语句(二)
29 3
|
2月前
|
SQL XML 运维
SQL Server 运维常用sql语句(三)
SQL Server 运维常用sql语句(三)
19 1
|
2月前
|
SQL 关系型数据库 MySQL
SQL数据库和 SQLserver数据库
【8月更文挑战第19天】SQL数据库和 SQLserver数据库
51 2
|
2月前
|
Java 应用服务中间件 Maven
从零到英雄:一步步构建你的首个 JSF 应用程序,揭开 JavaServer Faces 的神秘面纱
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的 Java EE 标准,用于构建企业级 Web 应用。它提供了丰富的组件库和声明式页面描述语言 Facelets,便于开发者快速开发功能完善且易于维护的 Web 应用。本文将指导你从零开始构建一个简单的 JSF 应用,包括环境搭建、依赖配置、Managed Bean 编写及 Facelets 页面设计。
83 0
|
2月前
|
SQL 关系型数据库 MySQL
【超全整理】SQL日期与时间函数大汇总会:MySQL与SQL Server双轨对比教学,助你轻松搞定时间数据处理难题!
【8月更文挑战第31天】本文介绍了在不同SQL数据库系统(如MySQL、SQL Server、Oracle)中常用的日期与时间函数,包括DATE、NOW()、EXTRACT()、DATE_ADD()、TIMESTAMPDIFF()及日期格式化等,并提供了具体示例。通过对比这些函数在各系统中的使用方法,帮助开发者更高效地处理日期时间数据,满足多种应用场景需求。
180 0
|
2月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
228 0