代码之家  ›  专栏  ›  技术社区  ›  Bob King

SQL Compact Edition 3.5 SP 1-LockTimeoutException-如何调试?

  •  1
  • Bob King  · 技术社区  · 16 年前

    在我们的应用程序中,偶尔会遇到LockTimeoutExceptions被从SQL CE抛出。我们最近升级到了3.5sp 1,其中一些似乎已经消失了,但我们仍然偶尔看到它们。我确信这是我们的代码中的一个错误(多线程),但我还不能精确地将其锁定。有没有人有调试这个问题的好技术?异常日志如下(这些异常从来没有堆栈跟踪):

    SQL Server Compact在等待锁定时超时。设备的默认锁定时间为2000毫秒,台式机的默认锁定时间为5000毫秒。可以使用ssce:default lock timeout属性在连接字符串中增加默认锁超时。[会话ID=6,线程ID=7856,进程ID=10116,表名=product,冲突类型=s锁(x块),资源=ddl]

    我们的数据库读起来很重,但很少写,我 认为 我把一切都保护好了。

    编辑:SQL CE已自动使用nolock http://msdn.microsoft.com/en-us/library/ms172398(sql.90).aspx

    2 回复  |  直到 16 年前
        1
  •  1
  •   Bob King    16 年前

    我刚刚意识到3.5sp1中包含了一些新的信息,这让我可以确认一下。

    SQL Server Compact在等待锁定时超时。设备的默认锁定时间为2000毫秒,台式机的默认锁定时间为5000毫秒。可以使用ssce:default lock timeout属性在连接字符串中增加默认锁超时。[会话ID=6,线程ID=7856,进程ID=10116, 表名=产品 ,冲突类型=S锁(X块), 资源= DDL ]

    当我试图删除一个必须与之有打开连接的现有表时,我能够识别出它正在发生。

        2
  •  1
  •   David Cater    14 年前

    如果其他人看到这个页面,我发现了另一个可能发生这种情况的原因。我创建了一个sqlcetransaction来包装各种语句,但我不小心在其中一个语句上使用了该事务。这导致了我的锁超时消息。