zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

server错误SQL 请求 超时 Microsoft 超过
2023-09-14 08:57:53 时间

    在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是由于什么原因没有提交或回滚事务就不得而知。这个例子完美的演示并重现了这个问题


Java程序员最容易犯的十大SQL错误,你犯过几次? Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美地将两者结合起来完全得依靠编程人员的水准: 技能:任何人都能容易学会命令式编程 模式:有些人用“模式-模式”,举个例子,模式可以应用到任何地方,而且都可以归为某一类模式 心境:首先,要写个好的面向对象程序是比命令式程序难得多,你得花费一些功夫 但当Java程序员写SQL语句时,一切都不一样了。SQL是说明性语言而非面向对象或是命令式编程语言。在SQL中要写个查询语句是很简单的。但在Java里类似的语句却不容易,因为程序员不仅要反复考虑编程范式,而且也要考虑算法的问题。 下面是Java程序员在写SQL时常犯的10个错误
sqli笔记-基于错误的SQL注入与WAF绕过 测试的是登陆功能,此功能会向数据库发送查询的请求,这里我们仔细来看一下,获取我的数据并通过 POST 请求发送。 工具使用的是Burp Suite,这里拦截了请求并将其发送到repeater:
Sql Server 报error 40连接错误该如何解决? 经常会有小伙伴反馈连接错误,今天就给大家重现一下这个错误和解决方法吧,下次如果哪个小伙伴也遇到类似问题可以直接转发这篇文章给他。好了我们开始实验。
潇湘隐者 网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业