La procédure stockée SQL de la table temporaire problème de mémoire

Nous avons le simple suivant une Procédure Stockée qui s'exécute comme une nuit de travail SQL server agent. Habituellement, il s'exécute en 20 minutes, mais récemment, le MatchEvent et le résultat du match, les tableaux ont augmenté de plus de 9 millions de lignes chacune. Cela a abouti à la boutique de la procédure de la prise de plus de 2 heures de course, avec tous les 8GO de mémoire sur notre SQL zone utilisée. Ce qui rend la base de données est indisponible pour l'ordinaire des requêtes qui tentent d'y accéder.

Je suppose que le problème est que la table temporaire est trop grand et est à l'origine de la mémoire et de la base de données unavailablity questions.

Comment puis-je réécrire la procédure stockée pour le rendre plus efficace et moins gourmande en mémoire?

Note: j'ai édité le SQL pour indiquer qu'il est venu condition affectant la première instruction SELECT. J'avais déjà quitté ce pour des raisons de simplicité. Aussi, lors de l'exécution de la requête d'utilisation de l'UC est à 1-2%, mais memoery, comme indiqué précédemment, est maxed


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

OriginalL'auteur Robin Weston | 2008-10-23