“无法更新;目前锁定“使用MS-Access OleDb

时间:2017-06-09 19:54:00

标签: asp.net ms-access oledb

我已经检查了非关闭连接的代码,但我在生产中仍然遇到了这个错误:

System.Data.OleDb.OleDbException (0x80004005): Could not update; currently locked.
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
  at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
  at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
  at (my code here)

看起来像是在ExecuteNonQuery()的递归调用,我们可以在堆栈的底部看到。这是重试模式吗?有什么想法吗?

其他信息:

  • 无法在我的环境中重现错误。还试图通过负载测试重现它,但没有成功。
  • 应用程序发布后大约40分钟,我收到了来自不同客户端的这种错误(不同的客户端共享同一个数据库)之后我因为大规模死锁而被迫回滚。
  • 所有错误堆栈都有一些递归(它发生在Command.ExecuteNonQuery或Connection.Open)。
  • 通常,“当前锁定”消息提供使数据库锁定的用户的名称,但此特定消息不会。

1 个答案:

答案 0 :(得分:0)

问题是由数据提供程序中的许多慢查询,并发和错误引起的。

New Relic这次救了我的命。它是我所知道的追踪生产环境中问题的最佳工具。