1

アプリで断続的に、SQL CE からスローされる LockTimeoutExceptions に遭遇します。最近、3.5 SP 1 にアップグレードしました。それらの多くはなくなったようですが、まだ時々見られます。私たちのコード (マルチスレッド) のバグであることは確かですが、正確に突き止めることはできませんでした。この問題をデバッグするための良いテクニックはありますか? 例外は次のように記録されます (これらの例外のスタック トレースはありません)。

SQL Server Compact がロックの待機中にタイムアウトしました。デフォルトのロック時間は、デバイスで 2000 ミリ秒、デスクトップで 5000 ミリ秒です。デフォルトのロック タイムアウトは、接続文字列で ssce: default lock timeout プロパティを使用して増やすことができます。[セッション ID = 6、スレッド ID = 7856、プロセス ID = 10116、テーブル名 = 製品、競合タイプ = s ロック (x ブロック)、リソース = DDL]

私たちのデータベースは読み取り負荷が高いですが、書き込みはほとんどありません。必要な場所はすべて保護されていると思います。

編集: SQL CE は既に自動的に NOLOCK を使用していますhttp://msdn.microsoft.com/en-us/library/ms172398(sql.90).aspx

4

2 に答える 2

1

他の誰かがこのページに出くわした場合に備えて、これが発生する別の理由を発見しました. さまざまなステートメントをラップするために SqlCeTransaction を作成しましたが、ステートメントの 1 つでそのトランザクションを誤って使用しませんでした。それが原因で、ロック タイムアウト メッセージが表示されました。

于 2010-04-25T22:02:05.147 に答える
1

3.5 SP1 には、特定できる例外に新しい情報が含まれていることに気付きました。

SQL Server Compact がロックの待機中にタイムアウトしました。デフォルトのロック時間は、デバイスで 2000 ミリ秒、デスクトップで 5000 ミリ秒です。デフォルトのロック タイムアウトは、接続文字列で ssce: default lock timeout プロパティを使用して増やすことができます。[セッション ID = 6、スレッド ID = 7856、プロセス ID = 10116、テーブル名 = 製品、競合タイプ = s ロック (x ブロック)、リソース = DDL ]

開いている接続が必要な既存のテーブルを削除しようとしたときに、それが発生していることを特定できました。

于 2008-09-18T18:31:15.950 に答える