Suggerimento sulle prestazioni Evitare l'utilizzo del prefisso SP_ nelle stored procedure

Gli sviluppatori di database spesso nominano stored procedure con SP_ prefisso in SQL Server. Il prefisso SP_ aiuta gli altri sviluppatori a identificare rapidamente un oggetto come stored procedure. Sebbene ci siano stati molti dibattiti sull'opportunità o meno che gli oggetti creati dall'utente debbano essere denominati con il prefisso sp_ che segue gli standard della convenzione di denominazione, non dovremmo nominare le nostre stored procedure in SQL Server con il prefisso SP_. Questo tutorial di Tech-Recipes spiega perché dovremmo evitare di utilizzare il prefisso SP_ nelle stored procedure in SQL Server.

1. Se creiamo una stored procedure con il prefisso SP_, SQL Server la considera come una stored procedure di sistema e effettua una ricerca nel database del supervisore per prima cosa per verificare se la stored procedure esiste lì. Più tardi nel database degli utenti, questo aggiunge un po 'di overhead nelle prestazioni.

2. Le stored procedure con prefisso SP_ sono considerate stored procedure speciali del sistema, che sono memorizzate nel database master.

3. L'aggiunta del prefisso SP_ durante la creazione di una stored procedure nei database utente potrebbe entrare in conflitto con le stored procedure di sistema disponibili nel database master.

4. C'è un motivo in più per evitare l'uso del prefisso sp_ nelle stored procedure dalla documentazione in linea di Microsoft:

Evitare l'uso del prefisso sp_ durante le procedure di denominazione. Questo prefisso viene utilizzato da SQL Server per designare le procedure di sistema. L'utilizzo del prefisso può causare l'interruzione del codice dell'applicazione se esiste una procedura di sistema con lo stesso nome.

La procedura sp_help è una procedura integrata che è archiviata nel database master. Se si crea in modo imprevisto una procedura in un database utente con lo stesso nome, la procedura dal database master verrà comunque eseguita, ignorando la procedura memorizzata. Di seguito è un esempio.

Creare una stored procedure con nome sp_help in tempdb.

Utilizzare tempdb GO CREATE PROCEDURE sp_help COME INIZIARE STAMPA 'Ho bisogno di aiuto immediato, sono in tempdb'; FINE 

Eseguiamo la stored procedure da tempdb.

Usa tempdb GO EXEC sp_help - L'output previsto è "Ho bisogno di aiuto immediato, sono in tempdb" 

Successivamente, otteniamo un output imprevisto perché sp_help è una stored procedure di sistema che esiste nel database master. Pertanto, SQL Server ha eseguito la procedura memorizzata dal master invece di eseguire SP creato dall'utente, "sp_help" da tempdb perché ha la prima preferenza.

Vediamo utilizzando SQL Server Profiler come si verifica un evento CacheMiss quando proviamo a eseguire una stored procedure esistente nel database master e anche nel database tempdb.

CacheMiss: Nella figura seguente, è possibile vedere che si è verificato un evento CacheMiss durante l'esecuzione di Sp_help EXEC procedura da tempdb. Ciò indica che SQL Server ha tentato di trovare il piano di esecuzione per SP_help SP in tempdb, ma non lo ha trovato nella cache di piano. Pertanto, si è verificato un evento CacheMiss che potrebbe comportare anche un calo delle prestazioni.

Sommario: Uso SP_ come prefisso per stored procedure in SQL Server ha un impatto sulle prestazioni considerando che SQL Server deve eseguire la prima ricerca nel database master per verificare. Inoltre, un evento CacheMiss indica che il server SQL cerca il piano di esecuzione nel database utente, ma non lo trova.