"Anzahl (ID) aus Tabelle auswählen" dauert in SQL Azure bis zu 30 Minuten

8

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?

    
chrisb 14.09.2014, 07:47
quelle

2 Antworten

1

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:

Ссылка

%Vor%     
FoggyDay 14.09.2014 07:59
quelle
1

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.

    
Lando 10.02.2016 20:02
quelle