実稼働環境で長時間実行するプロセスを実行する必要があります (理由は聞かないでください)。このプロセスで ReadUncommited を使用してトランザクションを開いていますが、関連するすべてのテーブルがロックされており、テーブルでいくつかの更新を実行しています。したがって、このプロセスを実行してから、これらのテーブルのいずれかに対してクエリを実行しようとすると、ロックが原因でクエリがタイムアウトします。
私のトランザクションがテーブルをロックしないということはありますか? トランザクションを使用しない場合、テーブルはロックされません。
これが私のコードです
ISession session = sessionProvider.GetCurrentSession();
session.SetBatchSize(100);
session.BeginTransaction(IsolationLevel.ReadUncommitted);
var solrCandidateFactory = _container.GetInstance<ISolrCandidateFactory>();
int id;
while (concurrentQueue.TryDequeue(out id))
{
var cv = session.Get<Curriculum>(id,LockMode.None);
SolrCandidate fromCandidate = solrCandidateFactory.CreateFromCandidate(cv);
_candidateIndexer.Index(fromCandidate);
session
.CreateSQLQuery("update Curriculum set IndexedAt = :time where Id = :id")
.SetParameter("time", DateTime.Now)
.SetParameter("id", id)
.ExecuteUpdate();
}
session.Transaction.Commit();