2012-02-18 25 views
1

私は、常に更新される多くの行を持つ大きなSQL Server 2008 R2データベースを持っています。更新は、ストアドプロシージャを呼び出すバックエンドサービスアプリケーションによって行われます。これらのストアドプロシージャの1つに、データを再計算して更新するSQLカーソルがあります。これはすべて正常に動作します。ロック要求のタイムアウト時間を超えました - Telerik OpenAccess ORM

しかし、私たちのフロントエンドのWebアプリケーションは、これらの行を検索する必要があり、この検索は時々タイムアウト期間を超え

ロック要求時間になります。 Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeQuery()..

でいくつかの研究を行った後、私は問題なく実行するには、このクエリを作るための最善の方法はそれを実行して行うことであることを見出しました"コミットされていない分離レベルを読み込む"。この設定はTelerik OpenAccessの設定で行うことができますが、これはデータベースORMプロジェクト全体に影響する設定です。それは私が望むものではありません!私はこのクエリのためだけにこのレベルをします。

この特定のLINQクエリをこのコミットされていない分離レベルで実行する方法はありますか? または、WITH NOLOCKヒントを使用するこの1つのクエリを作成できますか?

+0

これらのロックエラーを防止するために更新バックエンドアプリケーションをヒントする方法がある場合は、それも面白いでしょう。最も重要なことは、フロントエンドが高速検索を実行できることです。速度もデータの一貫性よりも重要です。 – Tys

+2

クエリを直接編集できる場合は、次のステートメントを使用して現在のセッションの隔離を設定することができます: 'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED' –

+1

カーソルベースのソリューションをセットベースのソリューションに置き換えると、あなたのロックの問題とおそらくより良い実行します。 –

答えて

2

クエリの初めに使用

SET LOCK_TIMEOUT -1 

read uncommitted分離レベル(およびNOLOCKヒントを使用して)内のクエリは、多くの奇妙な問題を引き起こす可能性がありますreference manual

Runnungを参照してください、あなたはこれを行うのですか、それはあなたのデータフロー

に干渉する可能性がどのように理由を明確に理解する必要があります
+0

私は起こるかもしれない「奇妙な問題」についてすべてを知っているので、なぜ私はこれらの「リスク」を監督し、喜んでいるのか明確に述べました。あなたはリスクが何であるかを知っているなら、それ以上はそれほど大きくありません:) – Tys

関連する問題