Site de alto volume usando ADO.NET TransactionScope vs ExecuteCommand em NOLOCK, LER NÃO COMPROMISSO diretamente?

Basta ler este artigo interessante de Omar em seu blog @Linq to SQL resolve o problema de conflito de transação e tempo limite da consulta usando leituras não confirmadase no final Javed Hasan começou a discutir com ele sobre sua solução para a situação nolock em um site de alto volum

Aqui, o problema que está tentando resolver é que, no sentido do sql, precisamos usar as instruções Select com NOLOCK ou usar SET TRANSACTION LEVEL LEAD UNCOMMITTED, caso contrário, as linhas de alto volume no DB serão bloqueadas e causarão erros. A tecnologia usada pelo Omar é o Linq2Sql. Portanto, a questão é como conseguimos isso em seu código de acesso a dados C # para que o acima não aconteça?

Basicamente no post, Omar chega à sua solução trabalhando e testando no site do mundo real e com ferramentas como SqlProfiler, enquanto Javed Hasan chega à sua solução com documentos do MSDN e a postagem de blog de Scott Hanselman, etc.

Omar sugere usar o seguinte

using (var db = new DropthingsDataContext2())
{
  db.Connection.Open();
  db.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");

  var user = db.aspnet_Users.First();
  var pages = user.Pages.ToList();
}

aved Hasan sugere

using (new TransactionScope(TransactionScopeOption.Required, 
  new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
 //Your db Operation
}

Estou muito interessado em saber o que vocês fazem por aí sobre esse assunto em particular em um site de grande volume como o StatckOverflow, ou o que Jeff e seus colegas fizeram a esse respeit

Edita: Depois de ler o primeiro post, quero destacar algumas coisas no post de Omar.

Ele teve um problema de conexão com sua abordagem, mas ele resolveu, veja seu post.ais importante ainda, ele mencionou que tentou usar o ADO.NET Transaction e até tentou o que Scott Hanselman escreveu em seu blog, mas não está funcionando para sites de alto volume, mas prejudica bastante o desempenho. Omar disse que "o System.Transactions possui uma sobrecarga significativa. Eu nunca fui capaz de usá-lo em um site de alto volume sem fazer a CPU subir 100% e o Req / s diminuir para 1/10. Ele é feito para aplicativos corporativos, não para alto sites de volume ".

questionAnswers(4)

yourAnswerToTheQuestion