Wie interagiert OPTION (FAST 1) tatsächlich mit einem Client?


7

Dies ist Frage 1 von 2 im Zusammenhang mit OPTION (FAST 1);

Wir haben gerade unsere ERP-Datenbank von SQL 2000 EE auf 2008 R2 EE aktualisiert und festgestellt, dass die Datenbank zunehmend blockiert ist. Ich habe es auf das eingegrenzt, was meiner Meinung nach die beleidigende Aussage im Code des Anbieters ist:

SELECT MAX(column)
FROM [table] 
WHERE <condition> 
OPTION (FAST 1);

Der Spid hinterlässt eine offene Transaktion und sperrt den Tisch, wodurch alle anderen Clients blockiert werden. Der aufrufende Client scheint jedoch nicht mehr mit dem Server zu interagieren, um dem Server mitzuteilen, dass er die Daten zum Beenden der Sitzung erhalten hat.

Beim Lesen der Dokumentation zu Abfragehinweisen habe ich diese Aussage gesehen

SCHNELLE number_rows

Gibt an, dass die Abfrage für das schnelle Abrufen der ersten number_rows optimiert ist. Dies ist eine nichtnegative Ganzzahl. Nachdem die ersten number_rows zurückgegeben wurden, setzt die Abfrage die Ausführung fort und erzeugt ihre vollständige Ergebnismenge.

Ich frage mich daher, ob der Client die Kommunikation irgendwie unterbrochen hat. Würde der Server die Transaktion offen halten und die vollständige Ergebnismenge verarbeiten, nachdem die ersten nZeilen zurückgegeben wurden, und die Transaktion offen lassen? Der Prozess ist ein interner Prozess, daher kann ich einem Endbenutzer nicht wirklich zusehen, wie er die Sitzung ausführt, und dies geschieht nicht jedes Mal, wenn der interne Prozess stattfindet. Es wird jedoch immer nur vom internen Prozess verwendet.

Nachdem ich Remus 'Antwort auf SO gelesen habe, scheint es für die Einfachheit der Abfrage übertrieben zu sein. Wenn sie sich die Abfrage ansehen und mehr als ein Ergebnis von einer nicht gruppierten Person erhalten, MAXist etwas sehr faul .

Als ich mich auf die Zusammenarbeit mit dem Anbieter vorbereitete, fragte ich mich, ob ich anfangen könnte, unsere Blockierungsprobleme genau auf die Tatsache abzustimmen, dass dieser Abfragehinweis verwendet wird.

Bitte zögern Sie nicht, Änderungen zu bearbeiten / anzufordern, da ich weiß, dass dies möglicherweise unklar ist.

Antworten:


6

Wenn es sich um eine Abfrage handelte, die mehr als eine Zeile zurückgab, würde ich spekulieren, dass jemand beim Anbieter (vor langer Zeit, angesichts der Version von SQL Server) auf den Abfrageoptimierer gestoßen ist, der einen bevorzugten Plan erstellt hat, als dies FASTals Hinweis angegeben wurde.

Da es nur eine Zeile zurückgibt, hat die Erklärung wahrscheinlich mehr mit dem unendlichen Affensatz zu tun als mit einem begründeten Urteil. Ein Junior sah einen Hinweis darauf FASTund entschied, dass dies seiner nicht schnellen Anfrage vorzuziehen war.

Ich frage mich daher, ob der Client die Kommunikation irgendwie unterbrochen hat. Würde der Server die Transaktion offen halten und die vollständige Ergebnismenge verarbeiten, nachdem die ersten n Zeilen zurückgegeben wurden, und die Transaktion offen lassen?

Die Abfrage gibt 1 Zeile zurück, sodass keine weitere Ergebnismenge verarbeitet werden muss. Ich bin geneigt zu vermuten, dass es weiter oben im Stapel anderen Code gibt, der das Problem verursacht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.