2016-12-14 17 views
1

私たちのC#アプリケーションでは、分離レベルを設定していないので、デフォルトの分離レベルはRead Committedとしています。しかし、デッドロックの間に、我々は、アプリケーションのLOCKMODEがデータベーストランザクション中に分離レベルが変更されますか?

のIsolationLevelそれは、シリアライズ(4)の意味は何= "直列化可能(4)"

で見ることができましたか?また、分離レベルはトランザクション中に別のものに自動変換されますか?

+0

デッドロック中にアプリケーションでトランザクション分離レベルをどのように表示していますか? –

+0

いいえ、分離レベルはそれ自身では変更されません。はい、明示的な 'SET TRANSACTION ISOLATION LEVEL'または' FROM'節にテーブルヒントを適用することで、トランザクション内の分離レベルを変更することができます。しかし予期せぬ分離レベルの可能性が高い原因は、以前は直列化可能なトランザクションを持つプールされた接続を取得することです。[分離レベルはリセットされません](https://connect.microsoft.com/SQLServer/feedback/details/243527/sp -reset-connection-doesnt-reset-isolation-level)を指定します。確かめたい場合は、常に明示的に設定してください。 –

+0

@RossBush、デッドロックのプロセスとリソースのリストを持つDBAからデッドロックログを取得しました – Antoops

答えて

1

他人を援助するために、私が見つけた解決策を掲載しています。我々はTransactionScopeの助けを借りて、そのトランザクションをデフォルトのコンストラクタとともに使用していました。そのデフォルトの分離レベルはシリアライズ可能であり、混乱しています。 Read Committedを分離レベルとして明示的に使用するように修正しました。

関連する問題