Parameter-Sniffing (oder Spoofing) in SQL Server

Vor einiger Zeit hatte ich eine Abfrage, dass ich für einen meiner Benutzer ziemlich viel ausgeführt habe. Es wurde immer noch weiterentwickelt und optimiert, aber irgendwann wurde es stabilisiert und lief ziemlich schnell, sodass wir eine gespeicherte Prozedur daraus erstellten.

So weit, so normal.

Die gespeicherte Prozedur war jedoch hundeschwach. Kein wesentlicher Unterschied zwischen der Abfrage und dem Prozess, aber die Geschwindigkeitsänderung war massiv.

[Hintergrund, wir führen SQL Server 2005 aus.]

Ein freundlicher lokaler DBA (der hier nicht mehr arbeitet) hat sich die gespeicherte Prozedur einmal angesehen und "Parameter-Spoofing!" (Bearbeiten: obwohl es den Anschein hat, dass es möglicherweise auch als "Parameter-Sniffing" bekannt ist, was die geringe Anzahl von Google-Treffern erklären könnte, als ich versuchte, es herauszufinden

Wir haben einen Teil der gespeicherten Prozedur in eine zweite Prozedur abstrahiert und den Aufruf dieses neuen inneren Prozesses in den bereits vorhandenen äußeren, den äußeren, eingebunden, und zwar so schnell wie die ursprüngliche Abfrage.

Also, was gibt es? Kann jemand das Parameter-Spoofing erklären?

Bonusguthaben für

Hervorheben, wie man es vermeidetVorschläge, wie mögliche Ursachen erkannt werden könnenalternative Strategien diskutieren, z.B. Statistiken, Indizes, Schlüssel, um die Situation zu mildern

Antworten auf die Frage(8)

Ihre Antwort auf die Frage