Eliminarea din cache-ul procedural a anumitor planuri de interogare,

În această scurtă notă, vreau să împărtășesc cum să eliminați planurile de interogări specifice din memoria cache procedurală. Când poate apărea o astfel de nevoie? De exemplu, a fost executată o procedură stocată cu un parametru care a dus la un plan de interogare suboptimal pentru procedura stocată. Și, mai presus de toate, pentru acest caz particular este cel mai bun plan, dar cel mai adesea această procedură este folosită cu destul de diferiți parametri, pentru care planul nu va mai fi optimă. Desigur, este necesar să se lucreze la o astfel de procedură, și îi cere să se asigure că astfel de incidente să nu se repete, dar în momentul în care avem nevoie pentru a elimina planul de interogare din cache-ul pentru a începe o nouă procedură stocată a condus la elaborarea și formarea planului dorit. Desigur, în acest caz, nu vrem să afecteze alte planuri în cache-ul, astfel încât să nu provoace recompilarea în masă a întrebărilor și tulpina inutile.













Opțiunea unu, puteți schimba procedura memorată în sine. Cum ar fi Explorer Object pentru a selecta o procedură stocată pentru a face Script Procedură păstra ca -> MODIFICA la -> New Query Window și executa ceea ce avem.

Eliminarea din cache-ul procedural a anumitor planuri de interogare,

Procedura stocată în script

Acest lucru va determina următoarea pornire a procedurii memorate, o va recompila. Metoda este foarte simplu și rapid, dar are un dezavantaj: aceasta duce la o schimbare în reprezentare sistemul de teren modify_date sys.objects, cu toate că, de fapt, orice modificări care le-am făcut.

Varianta a doua, mai complexe, pentru a face o anchetă la sistemul de sys.dm_exec_cached_plans de repaus, pentru a obține mânerul dorit (sau mânerele) planurile suboptime și le elimină din cache-ul de DBCC FREEPROCCACHE. De exemplu, în baza de date de testare voi face o astfel de cerere și voi obține valoarea câmpului plan_handle.







Trimiteți-le prietenilor: