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 n
Zeilen 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, MAX
ist 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.