Proceduri stocate cu prefixul sp_ și performanța

Proceduri stocate cu prefixul sp_ și performanța
Există multe opinii despre utilizarea / nu folosirea prefixului sp_ pentru procedurile stocate. În favoarea nefolositului, este de obicei argumentat că sp_ este un prefix pentru procedurile stocate în sistem și pot apărea confuzii. Și în favoarea folosirii acelei confuzii nu apare, pentru că Ce proceduri pot fi procedurile stocate în baza de date a utilizatorilor. Eroarea atât a primului, cât și a celui de-al doilea este că folosirea / utilizarea sp_ nu este o chestiune de denumire a stilului. Aceasta este o chestiune de productivitate.
Problema principală este că folosirea prefixului sp_ în alte baze de date decât cele de bază conduce la următoarea problemă. Dacă optimizatorul întâlnește o procedură stocată cu prefixul sp_ de la primele verificări pentru a vedea dacă există un astfel de sistem și dacă îl găsește, acesta ignoră pe dvs., dar ia un sistem. Aceasta duce la două probleme:

  • Verificarea excesului necesită costuri suplimentare
  • Există o probabilitate destul de mare ca planul dvs. pentru o astfel de procedură stocată să nu fie stocat în cache.

Să analizăm în detaliu:

Tipuri de obiecte de sistem

Obiectele de sistem vin cu o instalare SQL Server, sunt situate în bazele de date ale sistemului, dar pot fi accesate din orice bază de date. În versiunile curente, toate obiectele de sistem sunt marcate ca furnizate de Microsoft, dar în versiunile viitoare totul se poate schimba.
Există doar 4:

Metoda de recunoaștere

Deci, de ce este nevoie de o metodă specială de recunoaștere.

Principalul motiv este că obiectele de sistem trebuie să fie vizibile din baza de date a utilizatorilor, dar acestea sunt stocate fizic în baza de date sistem și nu sunt copiate în baza de date a utilizatorilor atunci când sunt create. O abordare destul de logică, pentru că în caz contrar, nu este posibil să se controleze aceste obiecte foarte sistemice. Adică, nu le puteți proteja de utilizator și există și probleme cu actualizarea serverului de baze de date, care uneori afectează obiectele de sistem.

De asemenea, merită menționat faptul că numele complet al obiectului bazei de date este alcătuit din 4 părți:

Dar fiecare regulă are excepții, deoarece nu este bine să forțați un utilizator să scrie master.dbo.sp_who, și nu doar sp_who.

Următoarele reguli sunt folosite pentru a recunoaște obiectele sistemului.

Anydb.dbo.sp_ * este recunoscut ca master.dbo.sp_, dar este executat în contextul anydb.

Aceasta este, dacă executăm următorul cod:

Mesajul 195, nivelul 15, starea 10, linia 1

"My_fn" nu este un nume de funcție încorporat.
  • Vizualizările de sistem din INFO_SCHEMA sau sys trebuie să fie apelate cu schemele specificate.

    Ele sunt situate în baza de date master, dar compilația rulează în fiecare bază de date specifică.
  • Toate celelalte obiecte de sistem furnizate de Microsoft sunt supuse regulilor uzuale de recunoaștere a numelui.
  • Conectați-vă cu:

    Nu există evenimente viitoare în perioada de timp specificată.

    Evenimente (eng)

    Proceduri stocate cu prefixul sp_ și performanța

    Articole similare