Unsere SQL Azure-Datenbank enthält eine umfangreiche SELECT
Anweisung, die etwa einmal pro Tag ausgeführt wird. Die schwere SELECT
Anweisung enthält keine Sperrhinweise. Kürzlich haben wir einige Stände in der Produktion beobachtet und hier ist, was sys.dm_exec_requests
für diesen Zeitraum gezeigt wurde ... Die am längsten laufende Abfrage war die schwere, SELECT
die PAGEIOLATCH_SH
Wartezeit hatte. Als nächstes folgten andere Abfragen - meistens INSERT
Anweisungen mit PAGEIOLATCH_EX
Wartezeit, die alle Dutzende von Sekunden lang ausgeführt wurden, anstatt sofort ausgeführt zu werden. Im Grunde genommen SELECT
stört so schwer allein andere Abfragen.
Wie löse ich das? Ich bin damit einverstanden, dass schwer SELECT
langsam läuft, aber andere Abfragen sollten nicht gestört werden.
quelle
Antworten:
Ihre Hauptoptionen sind:
SELECT
Abfrage so, dass weniger E / A-Ressourcen verwendet werden.Randnotiz: In dieser Antwort wird die Verwendung von Isolationsstufen wie RCSI oder SI nicht erwähnt . Diese gelten für das Sperren von Sperren , und die Frage enthält keinen Hinweis darauf:
PAGEIOLATCH_XX
Wartezeiten sind mit Wartezeiten auf physische E / A verbunden .* Diese Funktion ist in der Azure SQL-Datenbank möglicherweise nicht verfügbar.
quelle