4

大きなテーブルにデータをインポートしているときに問題が発生し、インポートが完了するまでWebサイト全体がダウンします。これは、挿入/更新プロセスが完了するまでに最大3時間かかる場合があります。また、何らかの理由で例外がスローされた場合、アプリケーションプールが再起動されるまで、テーブルは無期限にロックされたままになります。

私は何が起こっているのか調べました。どうやら、このプロセスが終了するまで、触れられたテーブルはロックされているようです。これが直接SQLクエリの場合、問題を解決するためにクエリに「with(NOLOCK)」を追加します。ただし、FluentNHibernateに生成するクエリに追加するように指示する方法がわかりません。

また、Session Factoryを構築するときに、すべてのクエリでデフォルトで「with(NOLOCK)」をオンにする設定を入れる方法はありますか?

前もって感謝します。

4

1 に答える 1

7

セッションまたはステートレスセッションを開くときは、IsolationLevel.ReadUncomittedを使用してトランザクションを開始します。これは、そのトランザクションのすべてのステートメントにNOLOCKを指定するのと同じです。

using (var session = _sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction(IsolationLevel.ReadUncommitted))
{
    // do work

    transaction.Commit();
}
于 2012-09-26T10:21:23.290 に答える