Frage

Lesen Sie einfach diesen interessanten Artikel von Omar in seinem Blog Linq to SQL löst Transaktion Deadlock und Query Timeout Problem mit ungebundenem liest und am Ende Javed Hasan begann mit ihm über seine Lösung für die nolock Situation auf einer hohen Volumen Website zu streiten.

Hier ist das Problem zu lösen versuchen, aus dem SQL Sinne wir Select-Anweisungen mit NOLOCK oder Verwendung SET TRANSACTION LEVEL READ UNCOMMITTED, sonst bei hohen Lautstärke Reihen in DB verwenden müssen, werden Fehler gesperrt und führt. Die Technologie Omar verwendete Linq2Sql, so ist die Frage, wie bekommen wir diese in Ihrem C # Datenzugriffscode erreicht, so wird die oben nicht passieren?

Im Grunde genommen in der Post, kommt Omar zu seiner Lösung durch Arbeiten und Tests auf realer Welt Website und mit Werkzeugen wie SQLProfiler, während Javed Hasan mit MSDN Dokumenten zu seiner Lösung kommt und Scott Hanselman Blog-Post, etc.

Omar schlägt vor, mit dem folgenden

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

während Javed Hasan schlägt

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

Ich bin sehr daran interessiert zu wissen, was ihr da zu diesem speziellen Thema tun out auf einer hohen Volumen Website wie die StatckOverflow oder was haben Jeff und ihre Jungs in dieser Hinsicht tun?

Bearbeiten . Nach dem ersten Beitrag zu lesen, mag ich ein paar Dinge in Omars Post darauf hin,

  1. er hat in Verbindung Problem mit seinem Ansatz laufen, aber er löste es, seinen Posten sehen.
  2. was noch wichtiger ist er erwähnte er die Verwendung von ADO.NET Transaktion Art und Weise versucht, und versuchte sogar, was Scott Hanselman schrieb in seinem Blog, aber es ist nicht für hochvolumige Baustelle arbeiten, es verschlechtert sich die Leistung ziemlich viel. Omar sagte dieser „System.Transactions erheblichen Aufwand hat. Ich habe nie in der Lage gewesen, es auf einer hohen Volumen Website zu nutzen, ohne die CPU zu 100% und Req / s kommt bis zu 1 / 10tel gehen zu machen. Es ist für Enterprise-Anwendungen gemacht hat, nicht für Hoch Volumen-Websites. "

Andere Tipps

{Mein (schlecht) Ruf hindert mich, Kommentare zu veröffentlichen, so habe ich dies als eine Antwort}

Wenn Sie Isolation über System.Transactions verwenden und erstellen Sie einen neuen Linq Kontext innerhalb des Transaktionsblock, SQL Server endet versucht DTC zu rufen, die Transaktion zu koordinieren. Das geschah nur mir und war ganz unerwartet.

Für Transaktionen in .Net und (irgendwie überraschend) Nebeneffekt des DTC, dieses Dokument Einführung System.Transactions in .NET Framework 2.0 von Juval Löwy erklärt die Dinge sehr gut und ist immer noch voll gültig (.Net4). Lesenswert. (Ich würde auch einen Kommentar haben veröffentlichen ... wenn ich könnte.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top