Zwei Server, Entwicklung und Live. Der Live-Server ist eine Amazon RDS SQL Server-Webinstanz. Beide Server haben identisches Schema und identische Daten. Es gibt einen guten räumlichen Index für die Geometriespalte. Auf meinem Entwicklungsserver wird die Abfrage in <30 Millisekunden ausgeführt. Auf dem Live-Server dauert die Abfrage> 20 Minuten.
Die Prüfung der Ausführungspläne zeigt, dass sie sich drastisch unterscheiden. Zum einen ist die Abfrage in meiner Entwicklungsumgebung parallelisiert, auf dem Live-Server jedoch nicht.
- Ich habe die Indizes neu erstellt und die Statistiken neu generiert.
- Ich kann die massive Diskrepanz nicht erklären.
- Der DOP der Server ist der gleiche.
- Die CPU des Live-Servers wird während der Ausführung der Abfrage zu 100% gehämmert.
Ich würde mich über Einblicke in die Ursache oder darüber freuen, wie das Problem am besten diagnostiziert werden kann.
DECLARE @geoBoundary geometry;
SET @geoBoundary = geometry::STGeomFromText('POLYGON((407439.5 108792.25, 408022.5 108792.25, 408022.5 108575.75, 407439.5 108575.75, 407439.5 108792.25))', '0');
SELECT
ogr_geometry.ToString() AS strGeometry
,ogr_geometry
FROM inspire as geo
WHERE geo.ogr_fid IN
(
SELECT
geo.ogr_fid
FROM .inspire as geo
WHERE
(
(@geoBoundary.STContains(geo.ogr_geometry) = 1)
)
UNION
SELECT
geo.ogr_fid
FROM .inspire as geo
WHERE
(
(@geoBoundary.STOverlaps(geo.ogr_geometry) = 1)
)
)
- Die
cost threshold for parallelism
auf beiden Servern ist 5 (die Standardeinstellung). - Die Entwicklungsinstanz hat 4 physische Kerne, 8 logische; Die Live-Instanz verfügt über 8 virtuelle Kerne.
max server memory
ist bei beiden gleich.- Entwicklungsinstanz ist SQL Server 12.0.4100.1; Live ist SQL Server Web 12.0.2100.60
- Es gibt große Unterschiede zwischen tatsächlichen und erwarteten Zeilen. Dies blieb jedoch nach dem Wiederaufbau der Statistik bestehen.
- Ich habe den Plan-Cache geleert. Es wird immer der gleiche Plan erstellt.
- Ausführungspläne können hier heruntergeladen werden .
EXEC sys.sp_configure N'max degree';
? Möglicherweise haben Sie keinen Zugriff darauf, aber Sie sollten auch das Kleingedruckte in Ihrem Vertrag überprüfen. Amazon beschränkt Sie möglicherweise zu Recht auf einen Kern, basierend auf Ihrer Serviceebene. Alles in allem sollte es keinen Unterschied zwischen Sekunden und 20 Minuten geben, es sei denn, es sind andere Dinge im Gange (Blockieren, übermäßige Wartezeiten für externe Ressourcen usw.).