检测到SQLHANDLE的可能的无限重新编译


10

我一直在sql错误日志中发现奇怪的错误消息:

Bocss:每小时都会发生同样的僵局–需要调查

此外,按照以下示例,错误日志中还列出了许多其他SPID的重新编译内容:

2015年9月4日14:30:10,spid64,未知,为SQLHANDLE检测到可能的无限重新编译0x0200000059631A288882589E0C54B76404CAE1B97E08D368000000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000600最后一次补偿是10:30/04/04:10:04/04 /结尾,spid150,未知,已检测到SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A000000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000的可能无限重新编译,起始偏移量998Uncompute 09,20 09:09结束,偏移量2020是:0909结束时的偏移量2020:20,09:09结束,偏移量2030:0检测到可能无限的重新编译为SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000起始偏移1064结束偏移2652是2. 2015年9月4日14最后重新编译原因:30:09,spid163,未知,是为SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle探测到一个可能无限的重新编译0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000000000起始偏移量1028终止偏移量2580.上次重新编译的原因是2。

是什么原因造成的?

看来我已经没有计划在缓存中了。 在此处输入图片说明

按照这篇文章的建议 http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx

然后作为一项安全措施禁用了全文目录,这没有什么区别,因此我完全回滚了更改(删除了新对象等)。这也没有什么不同,最终似乎唯一阻止它的是重启SQL实例,这立即解决了问题。

这样也可以解决我的问题,但是,我仍然首先要找出是什么原因造成了这种混乱?


2
您的错误消息并不表示该计划不再在缓存中。我相信您错误地复制了计划句柄,它要么是一个值太长,要么是太短。我可以运行SELECTdm_exec_sql_text使用手柄也就是在您的错误信息,没有得到一个错误
马克Sinkinson

+ 1处位置很好
Marcello Miorelli 2015年

Answers:


11

根据SQL可编程性和API开发团队博客上错误日志中的Infinite recompile消息,当批处理中的一条语句连续重新编译100次时,将触发此消息。

此消息不一定表示存在问题;它的存在是为了帮助解决可能经常合法地重新编译的语句(例如,由于统计数据的快速变化)以及真正的无限编译循环(在极端情况下很少见)的故障。

您应该首先从提供的信息中识别触发语句,然后在给出重新编译原因的数字代码的上下文中对其进行评估。在联机丛书中的多个位置(包括SP:Recompile事件类下)都有这些代码及其含义的表。

SQL Server 2012中的计划缓存和重新编译中提供了更多信息。

值表

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.