我一直在sql错误日志中找到奇怪的错误消息:
Bocss:同样的僵局每小时都会发生-需要调查
此外,其他SPID的错误日志中也列出了许多重新编译的内容,如下所示:
09/04/2015 14:30:10,未知,检测到SQLHANDLE 0x0200000059631A288882589E0C54B76404CAE1B97E08D3680000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000000000000000000000启动偏移量1038结束偏移量2600可能无限重编译。最后一次重新编译的原因是2.09/04/2015 14:30:10,未知的spid150,对SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A0000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000启动偏移量998结束偏移量2520检测到无限重编译。最后一次重新编译的原因是2.09/04/2015 14:30:09,未知的spid67,对SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000启动偏移量1064结束偏移量2652检测到无限重编译。最后一次重新编译的原因是2.09/04/2015 14:30:09,未知的spid163,对SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle 0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000启动偏移量1028结束偏移量2580检测到无限重编译。最后一次重新编译的原因是2。
是什么导致了这一切?
看来我已经没有计划了。

遵循这篇文章的建议,http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx
然后,作为安全措施禁用全文目录,这并没有什么不同,所以我完全回滚更改(删除新对象等)。这也没有什么区别,最后唯一似乎停止的是重新启动SQL实例,这立即解决了这个问题。
这也解决了我的问题,然而,我还是要找出到底是什么导致了这场混乱?
发布于 2015-09-07 16:59:51
根据&上的错误日志中的无限重编译消息,当批处理中的语句在一行中重新编译100次时,将触发此消息。
此消息不一定意味着存在问题;它的存在是为了帮助排除那些可能经常重新编译的语句(例如,由于统计数据的快速变化),以及真正的无限编译循环(在极端情况下是罕见的)。
您应该首先从所提供的信息中标识触发语句,并在数字代码上下文中对其进行评估,给出重新编译的原因。在联机丛书中的几个地方都有这些代码及其含义的表格,包括在SP:重新编译事件类下面。
在在Server 2012中计划缓存和重新编译中有更多的信息可用。

发布于 2021-04-10 10:12:46
在遇到这个剧本之前,我也找不到该计划,它找到了引发该警告的确切的sql语句:
Declare @ErrorLog Table (LogID int identity(1, 1) not null primary key,
LogDate datetime null,
ProcessInfo nvarchar(100) null,
LogText nvarchar(4000) null);
Insert Into @ErrorLog (LogDate, ProcessInfo, LogText)
Exec master..xp_readerrorlog;
With Recompiles
As (Select LogID, LogDate,
SPID = Replace(ProcessInfo, 'spid', ''),
SQLHandle = Convert(varbinary(64),
SUBSTRING(LogText, CHARINDEX('SQLHANDLE', LogText) + 10,
CharIndex(',', LogText) - CHARINDEX('SQLHANDLE', LogText) - 10), 1),
PlanHandle = Convert(varbinary(64),
SUBSTRING(LogText, CHARINDEX('PLANHANDLE', LogText) + 11,
CharIndex(',', LogText, CHARINDEX('PLANHANDLE', LogText)) -
CHARINDEX('PLANHANDLE', LogText) - 11), 1),
StartingOffset = Convert(int,
SUBSTRING(LogText, CHARINDEX('starting offset', LogText) + 16,
CharIndex(',', LogText, CHARINDEX('starting offset', LogText)) -
CHARINDEX('starting offset', LogText) - 16)),
EndingOffset = Convert(int,
SUBSTRING(LogText, CHARINDEX('ending offset', LogText) + 14,
CharIndex('.', LogText, CHARINDEX('ending offset', LogText)) -
CHARINDEX('ending offset', LogText) - 14)),
LastRecompileReason = SUBSTRING(LogText, CHARINDEX('last recompile reason was', LogText) + 26,
CharIndex('.', LogText, CHARINDEX('last recompile reason was', LogText)) -
CHARINDEX('last recompile reason was', LogText) - 26)
From @ErrorLog
Where CharIndex('A possible infinite recompile was detected for SQLHANDLE', LogText) > 0)
Select R.SPID, R.LogDate,
LastRecompileReason = Case R.LastRecompileReason When 1 Then 'Schema changed'
When 2 Then 'Statistics changed (' + R.LastRecompileReason + ')'
When 3 Then 'Deferred compile (' + R.LastRecompileReason + ')'
When 4 Then 'Set option changed (' + R.LastRecompileReason + ')'
When 5 Then 'Temp table changed (' + R.LastRecompileReason + ')'
When 6 Then 'Remote rowset changed (' + R.LastRecompileReason + ')'
When 7 Then 'For Browse permissions changed (' + R.LastRecompileReason + ')'
When 8 Then 'Query notification environment changed (' + R.LastRecompileReason + ')'
When 9 Then 'Partition view changed (' + R.LastRecompileReason + ')'
When 10 Then 'Cursor options changed (' + R.LastRecompileReason + ')'
When 11 Then 'Option (recompile) requested (' + R.LastRecompileReason + ')'
Else 'Unknown (' + R.LastRecompileReason + ')'
End,
DBName = DB_NAME(ST.dbid),
ObjectName = IsNull(OBJECT_SCHEMA_NAME(ST.objectid, ST.dbid) + N'.', '') +
IsNull(OBJECT_NAME(ST.objectid, ST.dbid), N'ad hoc or prepared'),
Command = SUBSTRING(ST.TEXT,
R.StartingOffset / 2 + 1,
((Case R.EndingOffset When -1 THEN DATALENGTH(ST.text)
Else R.EndingOffset
End) - R.StartingOffset) / 2 + 1),
QueryPlan = QP.query_plan,
FullSQLText = ST.text
From Recompiles As R
Outer Apply sys.dm_exec_sql_text(R.SQLHandle) As ST
Outer Apply sys.dm_exec_query_plan(R.PlanHandle) As QP
Order By R.LogID Desc;https://dba.stackexchange.com/questions/114354
复制相似问题