Ich habe eine Datenbank in SQL Azure, die zwischen 15 und 30 Minuten dauert, um ein einfaches zu tun:
%Vor%Die Datenbank hat ca. 3,3 GB und die Anzahl ist ca. 2.000.000, aber ich habe es lokal ausprobiert und es dauert weniger als 5 Sekunden!
Ich habe auch ein:
ausgeführt %Vor%Auf allen Tabellen in der Datenbank.
Würde mich freuen, wenn mich jemand auf einige Dinge hinweisen könnte, um zu versuchen, dies zu diagnostizieren / zu beheben.
(Bitte springen Sie zu UPDATE 3 unten, da ich jetzt denke, dass dies das Problem ist, aber ich verstehe es immer noch nicht).
UPDATE 1: Es scheint 99% der Zeit in einem gruppierten Index-Scan zu dauern, wie das Bild unten zeigt. Ich habe
UPDATE 2: Und so kommen die Statistik-Nachrichten zurück wie bei mir:
%Vor%Statistiken:
%Vor%UPDATE 3: OK - Ich habe jetzt eine andere Theorie. Das Azure-Portal schlägt vor, jedes Mal, wenn ich das teste, einfach eine Abfrage auszuwählen, die meinen DTU-Prozentsatz auf fast 100% ausschöpft. Ich verwende eine Standard Azure SQL-Instanz mit der Leistungsstufe S1 (20 DTUs). Ist es möglich, dass diese einfache Abfrage durch mein DTU-Limit verlangsamt wird?
Vorschlag: Versuchen Sie stattdessen select count(*)
: Es könnte die Antwortzeit verbessern:
Haben Sie auch einen "Erklärungs-Plan" gemacht?
============ UPDATE =============
Danke, dass Sie die Statistiken bekommen haben.
Sie machen einen vollständigen Tabellenscan von 2M Zeilen - nicht gut: (
MÖGLICHES PROBLEM: Abfrage der Systemtabelle row_count
stattdessen:
Ich weiß, das ist alt, aber ich hatte das gleiche Problem. Ich hatte eine Tabelle mit 2,5 Millionen Zeilen , die ich aus einer On-Prem-Datenbank in Azure SQL importiert und auf S3-Ebene ausgeführt habe. Select Count(0) from Table
führte zu einer Ausführungszeit von 5-7 Minuten im Vergleich zu Vor-Ort-Millisekunden.
In Azure scheinen Index- und Tabellen-Scans erheblich an Leistung zu benachteiligen. Daher wurde ein 'unbrauchbares' WHERE
zu der Abfrage hinzugefügt, die es erzwingt, eine Indexsuche für den Clustered-Index durchzuführen.
In meinem Fall ergab dies fast identische Select count(0) from Table where id > 0
, was zu einer Leistung führte, die der On-Premise-Abfrage entsprach.
Tags und Links azure azure-sql-database sqlperformance