Gespeicherte SQL-Prozedur temporäre Tabelle Speicher problem

Wir haben die folgenden einfache Gespeicherte Prozedur, die ausgeführt wird als eine über-Nacht-SQL server-agent-Auftrag. In der Regel läuft es in 20 Minuten, aber in letzter Zeit MatchEvent und MatchResult-Tabellen wird mittlerweile auf über 9 Millionen Zeilen jeweils. Dies führte in der Prozedur speichern unter über 2 Stunden zu laufen, mit allen 8 GB Speicher auf unseren SQL-box verwendet wird. Das macht die Datenbank nicht verfügbar ist, um die regelmäßige Abfrage, die versuchen, darauf zuzugreifen.

Ich nehme an, das problem ist, dass die temp-Tabelle ist zu groß und verursacht die Speicher-und Datenbank-unavailablity Probleme.

Wie kann ich schreiben Sie die gespeicherte Prozedur, um es effizienter und weniger speicherintensiv?

Hinweis: ich bearbeitet die SQL zu zeigen, dass es kommen Krankheit, die die erste SELECT-Anweisung. Ich hatte vorher Links das für die Einfachheit. Auch, wenn die Abfrage ausgeführt wird die CPU-Auslastung ist bei 1-2%, aber memoery, wie bereits erwähnt, ist ausgereizt


CREATE TABLE #tempMatchResult
(
    matchId VARCHAR(50)
)

 

INSERT INTO #tempMatchResult SELECT MatchId FROM MatchResult WHERE SOME_CONDITION

 

DELETE FROM MatchEvent WHERE
MatchId IN (SELECT MatchId FROM #tempMatchResult)

 

DELETE FROM MatchResult WHERE MatchId In (SELECT MatchId FROM #tempMatchResult)

 

DROP TABLE #tempMatchResult

 

InformationsquelleAutor Robin Weston | 2008-10-23

Schreibe einen Kommentar