c# - 等待页面的缓冲区闩锁类型 2 时如何修复 SqlException 超时 (1 :37660679), 数据库 ID 10

标签 c# asp.net sql-server-2012 sqlexception

我正在运行一个应用程序几个小时,然后突然:

SqlException 未被用户代码处理:

Time-out occurred while waiting for buffer latch type 2 for page (1:37660679), database ID 10.

查看异常的详细信息显示它是一个“数字”“845”。 ErrorCode 和 HRESULT -2146232060

问题:如何修复或调试此问题?

  • 我正在运行 ASP.NET C# .NET 4.5 和 SQL Server 2012。

  • 我运行了 chkdsk 但没有发现任何错误。

日志中没有关于 845 事件的信息。这是我在应用程序日志中发现的一些内容(对于事件 ID 847):

Timeout occurred while waiting for latch: class 'FGCB_ADD_REMOVE', id 00000004F146FBD8, type 2, Task 0x00000004F60450C8 : 0, waittime 300 seconds, flags 0x1a, owning task 0x00000004EDC38928. Continuing to wait.

有很多 847 看起来差不多。那么 event-id 为 846 的就更少了:

A time-out occurred while waiting for buffer latch -- type 2, bp 00000004F96EE880, page 1:37660679, stat 0x10b, database id: 10, allocation unit Id: 72057594048544768, task 0x00000004D502E188 : 0, waittime 300 seconds, flags 0x1a, owning task 0x00000004D5316558. Not continuing to wait.

这是 847 事件的 xml View :

- <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();

在监 window 口我可以看到:

db.GetChangeSet() {Inserts: 1, Deletes: 0, Updates: 0} System.Data.Linq.ChangeSet

谷歌搜索显示了一些来自微软的修补程序,但它们仅适用于 SQL Server 2008。

最佳答案

FGCB_ADD_REMOVE 锁存器在您的情况下可能意味着文件由于自动增长而被扩展。这会导致大量等待和 IO 负载。

或者这可能只是一般 IO 过载服务器的症状(由于负载或由于磁盘故障)。是的,这可能只是一种症状,因为您也看到其他 IO 等待超时。

确定服务器磁盘是否过载(例如使用 perfmon)并改善这种情况。

关于c# - 等待页面的缓冲区闩锁类型 2 时如何修复 SqlException 超时 (1 :37660679), 数据库 ID 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055815/

相关文章:

c# - 如何在 "jump"方法中使用 bool 值?

entity-framework - 代码优先 EF6 SqlServerMigrationSqlGenerator 中的自定义逻辑不起作用

sql - SQL Server 2012的FIRST_VALUE和LAST_VALUE的实际用途是什么(代码名: Denali) CTP 3

c# - 在 c# 中使用 openxml 进行文字处理时一行中的不同样式

c# - visual studio 中的条件引用 - 如何定义自定义变量

c# - 如何使 HTML 表格 <TD> 不可见

asp.net - 在 .NET 中动态注册控件

sql-server - SQL Server 2012 的 STRING_ESCAPE( 'SOME TEXT' , 'json' ) 替代方案

c# - 本地使用 azure 缓存时出现 InvalidOperationException

c# - 如何重用asp的列表项:DropDownList controls?