Quote:
Originally Posted by Stoned™
Sag mal, seit wann crasht den der Server wenn er Deadlocks hat?
Ich dachte immer Deadlocks wären massive Speicherprobleme.
Korrigiert mich bitte, wenn ich falsch liege.
|
Deadlocks sind "Hänger", die entstehen, wenn 2 Prozesse (das können 2 Programme oder 2 Instanzen eines Programmes sein) auf ein Datenbankobjekt zugreifen wollen - also einer Prozedur, Table, View, Function, etc...
Ist ein Deadlock in einem Node (Knotenpunkte in der Programmstruktur) vorhanden, wird ein "Victim" (also Opfer) des Deadlocks ausgesucht.
Das hängt davon ab, welche Priorität die Objekte haben - das mit der niedrigeren Priorität wird "gedropt" - also fallen gelassen, bzw zurückgesetzt und die Query wird nicht ausgeführt. Haben beide Objekte dieselbe Priorität, entscheidet SQL Server nach Speicherbedarf - der geringere hat Vorrang.
Man kann die Prioritäten in den Prozeduren einstellen (SET DEADLOCK_PRIORITY). Hilft das nicht, sollte man sich mit nem Profiler die Deadlocks genauer anschauen - dafür sind SQL Kenntnisse zwingend von Nöten.
Um es mal so zu sagen - ich weiß nicht, was dieses Hardcore/XXX/XXX System ist - SQL Server ist verdammt leistungsfähig, Deadlocks entstehen nur bei schlampigem Code. Wobei selbst bei schlechtem Code noch Deadlocks verhindert werden können. Aber spätestens bei mehreren Spielern sollte man darüber nachdenken, wie man Statistiken z.B. auf Homepages verwendet.
Und eins kann ich sagen: Die Queries direkt von der Homepage laufen zu lassen, das kann man direkt mit "das eigene Grab schaufeln" vergleichen. Am besten man baut sich eine Statistik-DB, die nur alle 10 Minuten (nur als Beispiel) aktualisiert wird - die Homepage nimmt sich dann die Infos von hier.
Das ist wesentlich weniger schädlich für den laufenden Serverbetrieb und der Offi macht das mit den Rankings im Übrigen genauso (zudem verwenden die Prozeduren und nicht direkte Queries). ;-)