我运行了一个应用程序几个小时,然后突然:
SqlException 未被用户代码处理:
等待页面 (1:37660679)、数据库 ID 10 的缓冲区锁存器类型 2 时发生超时。
查看异常的详细信息显示它是“数字”“845”。错误代码和 HRESULT -2146232060
问题:如何解决或调试此问题?
我正在运行 ASP.NET C# .NET 4.5 和 SQL Server 2012。
我运行了 chkdsk 但没有发现任何错误。
日志中没有关于 845 事件的信息。这是我在应用程序日志中找到的一些内容(对于事件 ID 847):
等待闩锁时发生超时:类 'FGCB_ADD_REMOVE',id 00000004F146FBD8,类型 2,任务 0x00000004F60450C8:0,等待时间 300 秒,标志 0x1a,拥有任务 0x00000004EDC38928。继续等待。
有很多 847 看起来差不多。然后事件 id 为 846 的情况要少得多:
等待缓冲区锁存器时发生超时——类型 2,bp 00000004F96EE880,页面 1:37660679,stat 0x10b,数据库 ID:10,分配单元 ID:72057594048544768,任务 0x00000004D502E188:0,等待时间,300 秒,标志拥有 01任务 0x00000004D5316558。没有继续等待。
这是 847 事件的 xml 视图:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="MSSQLSERVER" />
<EventID Qualifiers="16384">847</EventID>
<Level>4</Level>
<Task>2</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2013-02-24T19:21:54.000000000Z" />
<EventRecordID>281870</EventRecordID>
<Channel>Application</Channel>
<Computer>xyz-PC</Computer>
<Security UserID="S-1-and-so-on" />
</System>
- <EventData>
<Data>FGCB_ADD_REMOVE</Data>
<Data>00000004F146FBD8</Data>
<Data>2</Data>
<Data>00000004D5316188</Data>
<Data>0</Data>
<Data>1200</Data>
<Data>1a</Data>
<Data>00000004EDC38928</Data>
<Binary>4F0300000A00000006000000540053002D005000430000000800000053006300680061006200650072000000</Binary>
</EventData>
</Event>
错误发生在一行
db.SubmitChanges();
在监视窗口中,我可以看到:
db.GetChangeSet() {Inserts: 1, Deletes: 0, Updates: 0} System.Data.Linq.ChangeSet
谷歌搜索显示了一些来自 microsoft 的修补程序,但它们仅适用于 SQL server 2008。