Sitio de alto volumen con ADO.NET TransactionScope vs ExecuteCommand en NOLOCK, ¿LEER NO COMPROMETIDO directamente?

Solo lea este interesante artículo de Omar en su blogLinq to SQL resuelve el punto muerto de la transacción y el problema del tiempo de espera de la consulta utilizando lecturas no confirmadasy al final Javed Hasan comenzó a discutir con él sobre su solución a la situación de nolock en un sitio de gran volumen.

Aquí, el problema que trata de resolver es que, desde el sentido de sql, necesitamos usar sentencias Select con NOLOCK o usar SET TRANSACTION LEVEL READ UNCOMMITTED, de lo contrario, las filas de alto volumen en DB se bloquearán y causarán errores. La tecnología que utilizó Omar es Linq2Sql, por lo que la pregunta es ¿cómo logramos esto en su código de acceso a datos C # para que no ocurra lo anterior?

ásicamente en la publicación, Omar llega a su solución trabajando y probando en sitios del mundo real y con herramientas como SqlProfiler, mientras que Javed Hasan llega a su solución con documentos de MSDN y la publicación de blog de Scott Hanselman, et

Omar sugiere usar la siguiente

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();
}

mientras Javed Hasan sugiere

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

Estoy muy interesado en saber qué hacen ustedes sobre este tema en particular en un sitio de gran volumen como StatckOverflow, o ¿qué hicieron Jeff y sus muchachos al respecto?

Edita: Después de leer la primera publicación, quiero señalar algunas cosas en la publicación de Omar.

encontró un problema de conexión con su enfoque, pero lo resolvió, vea su publicación.ás importante aún, mencionó que intentó usar la forma de transacción ADO.NET e incluso intentó lo que Scott Hanselman escribió en su blog, pero no funciona para sitios de gran volumen, degrada bastante el rendimiento. Omar dijo que "System.Transactions tiene una sobrecarga significativa. Nunca he podido usarlo en un sitio web de gran volumen sin hacer que la CPU funcione al 100% y Req / seg se reduzca a 1/10. Está hecho para aplicaciones empresariales, no para grandes sitios web de volumen ".

Respuestas a la pregunta(4)

Su respuesta a la pregunta