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

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

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

如上所示,会话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)”。

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

会话语句1:

BEGIN TRAN

  TRUNCATE TABLE TEST;

  --ROLLBACK;

 

会话语句2:

UPDATE STATISTICS dbo.TEST;

 

会话语句3:

 

 

 

 

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

时间: 2024-12-30 01:15:17

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

wcf 报内部错误,无法处理该请求。怀疑是sql的问题

问题描述 wcf 报内部错误,无法处理该请求.怀疑是sql的问题 用.net 4.0 + mysql写WCF的事务处理例子. 不加sql相关的东西都没问题. 加上就报内部错误,而且没有详细错误,也不知道为什么,我在配置文件开了debug,并且都加try了,还是没有详细信息. 测试了好几次,就怀疑是SQL的这部分有问题,但是我还看不出哪里的问题.请教. [OperationBehavior(TransactionScopeRequired=true)] public void intoMoney(

把Oracle数据库移植到Microsoft SQL Server 7.0

oracle|server|数据|数据库  把Oracle数据库移植到Microsoft SQL Server 7.0 摘要:本文是为那些想把自己的Oracle应用程序转换为Microsoft SQL Server应用程序的开发人员编写的.本文描述了一个成功的转换所需要的工具.过程和技术.同时强调了建立高性能.高度并行的SQL Server应用程序的基本的设计要素. 本文的读者应该具有: Oracle关系型数据管理系统(RDBMS)的坚实基础. 普通数据库管理知识. 熟悉Oracle SQL和P

sql server 解密-请问Microsoft SQL Server 2005数据库中加密记录解密方法

问题描述 请问Microsoft SQL Server 2005数据库中加密记录解密方法 请问Microsoft SQL Server 2005数据库中类似 0MHCkgK7c4E= 的记录(共12位)是使用什么算法加密得到的?能否提供解密的方式或网址,谢谢! 解决方案 有些用到了base64来加密

SQL Server 磁盘请求超时的833错误原因及解决方法

最近遇到一个SQL Server服务器响应极度缓慢,并且出现客户端请求报错的情况,在数据库中的errorlog中出现磁盘请求超过15s才完成的error消息. 对于此类问题,到底是存储系统或者磁盘的故障,还是SQL Server 自己的问题,亦或是应用程序引发的呢?又要如何解决? 本文将对引起此问题的某一方面的因素进行简单的分析,但是无法涵盖所有潜在的可能性,因此遇到类似问题还要做具体的分析. SQL Server中的磁盘请求超时 该错误的英文版的错误信息如下: SQL Server has e

数据库xxx已打开,并且一次只能有一个用户访问。 (Microsoft SQL Server,错误: 924)

操作数据库失败,提示如下错误: 数据库xxx已打开,并且一次只能有一个用户访问. (Microsoft SQL Server,错误: 924) 重启数据库问题仍然存在.可执行以下sql解决: USE master; GODECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM master..sysprocesses WHERE dbid=DB_ID('库名'); EXEC(@SQL);

SQL Server的隔离模式和锁深入分析(一)

server 最近在论坛上,看到很多SQL Server的锁定模式和工作原理的讨论.看来有必要总结一下.       SQL Server有4中隔离模式,和多种锁.我就简单地整理一下心得体会,如有错误,敬请指正. 前言            隔离模式和锁有差别,大家千万不要搞混.隔离模式是规范了并发控制行为,而锁是控制锁定的粒度.但是两者都会对你应用系统的并发法产生重大影响.缺省是read committed隔离模式和行级锁(ROWLOCK).       不同数据库间,在这方面,有很多差别,也

SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

原文:SQL Server自动化运维系列--监控磁盘剩余空间及SQL Server错误日志(Power Shell) 需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测.作为一个高效的DBA不可能每天都要上生产机上查看磁盘剩余或者直到磁盘无剩余空间报错后才采取扩容措施. 当然,作为微软的服务器有着自己的监控软件:SCCM(System Center

无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53) .

标题: 连接到服务器 ------------------------------ 无法连接到 MSSQLSERVER. ------------------------------ 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft

SQL Server和Oracle中的锁和死锁

1.锁的作用 ORACLE : 锁是一种机制,当某个数据库对象正被其他进程或用户修改时,这种机制可以保护它不被修改. 为了防止对象被两个不同的用户同时修改,数据库系统创建了锁这种复杂的数据结构,来实现锁定机制,这种机制使用在oracle中称为排队的队列结构,以串行的方式执行锁. 锁的作用如下: 1) 他们坚持一致性和完整性,在事务处理期间,数据和对象保证它们的一致性和完整性. 2) 但对象不是立即可用时,它们提供一种队列结构,这种结构允许所有会话都加入到等候对象的队列中, 3) 自动处理锁机制