我正在运行一个应用程序几个小时然后突然:
用户代码未处理SqlException:
等待页面的缓冲区锁存器类型2时发生超时 (1:37660679),数据库ID 10。
查看异常的详细信息显示它是“数字”“845”。 ErrorCode和HRESULT -2146232060
问题:如何解决此问题或调试此问题?
我正在运行ASP.NET C#.NET 4.5和SQL Server 2012。
我跑了chkdsk但没有发现任何错误。
日志中没有845事件。以下是我在应用程序日志中找到的一些内容(对于event-id 847):
等待latch时发生超时:class'FGCB_ADD_REMOVE',id 00000004F146FBD8,类型2,任务0x00000004F60450C8:0,等待时间300 秒,标志0x1a,拥有任务0x00000004EDC38928。继续 等待。
有很多847看起来大致相同。然后使用event-id 846更少:
等待缓冲区锁存时发生超时 - 类型2,bp 00000004F96EE880,第1页:37660679,stat 0x10b,数据库ID:10, 分配单元Id:72057594048544768,任务0x00000004D502E188:0, 等待时间300秒,标志0x1a,拥有任务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
谷歌搜索显示了一些来自微软的修补程序,但它们仅适用于SQL Server 2008。
答案 0 :(得分:3)
FGCB_ADD_REMOVE
锁定可能意味着在您的情况下由于自动增长而扩展了文件。这会导致大量的等待和IO负载。
或许这只是一般IO过载服务器的症状(由于加载或由于磁盘故障)。是的,它可能只是一种症状,因为你也看到其他IO等待超时。
确定服务器磁盘是否过载(例如使用perfmon)并改善情况。
答案 1 :(得分:1)
我建议检查/更改受影响的数据库以及可能的tempdb的自动增长设置。右键单击,属性,文件到达那里。然后,如果您只有默认设置(数据上的自动增长为1mb,日志为10%),则将其更改为10mb和10mb。你可能也希望用tempdb做类似的事情。通常将它们设置为适合数据库大小和使用的值。随着时间的推移,你会比我更了解这一点。
如果您知道&#34;正确尺寸&#34;然后,您的数据库应直接在文件属性页面中设置该大小,并抢占任何相关的文件扩展错误。我的意思是,例如,如果您的数据库当前为10GB,并且您预计在接下来的几周内您将向其添加另外3或4 GB的数据,那么只需将初始大小设置为15GB。在估算可能的文件增长时,不要忘记索引占用空间。
一些更普遍的&#34;良好的家务管理&#34;想法 -
确保定期进行碎片整理。
根据CPU数量考虑几个数据文件。如果可能,将数据文件和日志文件放在不同的磁盘上。