OVH Cloud OVH Cloud

PS commençant par "sp_"

4 réponses
Avatar
Vuillermet Jacques
A une époque, "on disait" qu'une procédure stockée ayant un nom commençant
par "sp_" était d'abord recherchée par SQL Server dans la base MASTER, puis
dans la base courante (d'où perte de performance inutile....).
Il m'a même semblé le lire dans un article de Microsoft.

Je voulais faire cette "leçon" à des développeurs... mais avant, je l'ai
testée par acquis de conscience.

Bien m'en a pris !
SQL Server 2000 SP3 recherche une telle PS d'abord dans la base courante
PUIS dans la base MASTER.

Deux solutions :
- je n'ai rien compris (toujours possible, c'est un risque pour un donneur
de leçon ;-) ;
- à partir d'une certaine version de SQL Server les choses ont changé.

Votre avis ? (N'hésitez pas si c'est la première solution !)

Jacques.

4 réponses

Avatar
lionelp
Bonjour,

Voici 2 liens :

http://support.microsoft.com/default.aspx?kbid&3889
...
NOTE: If your stored procedure name begins with the "sp_" prefix and is not
in the master database, you see SP:CacheMiss before the cache hit for each
execution even if you owner-qualify the stored procedure. This is because
the sp_ prefix tells SQL Server that the stored procedure is a system stored
procedure, and system stored procedures have different name resolution rules
(the "preferred" location is in the master database). The names of
user-created stored procedures should not begin with "sp_."
...

http://www.microsoft.com/technet/treeview/default.asp?url=/technet/itcommunity/chats/trans/sql/sql0724.asp
...
Host Guest_PeterCarlin_MS
Q:(Sajal) : Could someone explain the mechanics of how a sp_ proc in a user
database is handled by the optimizer?

A: Procs that start with sp_ are treated specially by SQL. SQL first looks
in the user database and if the proc is not found there looks in master.
Procs without sp_ are only looked for in the user database. Does this answer
your question?
...

Cordialement,
LionelP

"Vuillermet Jacques" wrote in message
news:

A une époque, "on disait" qu'une procédure stockée ayant un nom commençant
par "sp_" était d'abord recherchée par SQL Server dans la base MASTER,


puis
dans la base courante (d'où perte de performance inutile....).
Il m'a même semblé le lire dans un article de Microsoft.

Je voulais faire cette "leçon" à des développeurs... mais avant, je l'ai
testée par acquis de conscience.

Bien m'en a pris !
SQL Server 2000 SP3 recherche une telle PS d'abord dans la base courante
PUIS dans la base MASTER.

Deux solutions :
- je n'ai rien compris (toujours possible, c'est un risque pour un donneur
de leçon ;-) ;
- à partir d'une certaine version de SQL Server les choses ont changé.

Votre avis ? (N'hésitez pas si c'est la première solution !)

Jacques.





Avatar
Vuillermet Jacques
Merci !

Tu n'as pas osé le dire mais c'était la première solution !

Jacques.


"lionelp" a écrit dans le message de news:
4017f2b5$
Bonjour,

Voici 2 liens :

http://support.microsoft.com/default.aspx?kbid&3889
...
NOTE: If your stored procedure name begins with the "sp_" prefix and is


not
in the master database, you see SP:CacheMiss before the cache hit for each
execution even if you owner-qualify the stored procedure. This is because
the sp_ prefix tells SQL Server that the stored procedure is a system


stored
procedure, and system stored procedures have different name resolution


rules
(the "preferred" location is in the master database). The names of
user-created stored procedures should not begin with "sp_."
...




http://www.microsoft.com/technet/treeview/default.asp?url=/technet/itcommuni
ty/chats/trans/sql/sql0724.asp
...
Host Guest_PeterCarlin_MS
Q:(Sajal) : Could someone explain the mechanics of how a sp_ proc in a


user
database is handled by the optimizer?

A: Procs that start with sp_ are treated specially by SQL. SQL first looks
in the user database and if the proc is not found there looks in master.
Procs without sp_ are only looked for in the user database. Does this


answer
your question?
...

Cordialement,
LionelP

"Vuillermet Jacques" wrote in message
news:
>
> A une époque, "on disait" qu'une procédure stockée ayant un nom


commençant
> par "sp_" était d'abord recherchée par SQL Server dans la base MASTER,
puis
> dans la base courante (d'où perte de performance inutile....).
> Il m'a même semblé le lire dans un article de Microsoft.
>
> Je voulais faire cette "leçon" à des développeurs... mais avant, je l'ai
> testée par acquis de conscience.
>
> Bien m'en a pris !
> SQL Server 2000 SP3 recherche une telle PS d'abord dans la base courante
> PUIS dans la base MASTER.
>
> Deux solutions :
> - je n'ai rien compris (toujours possible, c'est un risque pour un


donneur
> de leçon ;-) ;
> - à partir d'une certaine version de SQL Server les choses ont changé.
>
> Votre avis ? (N'hésitez pas si c'est la première solution !)
>
> Jacques.
>
>
>




Avatar
Med Bouchenafa
Je crois que le changement a lieu avec le passage à la version 7.
Aujourd'hui, seules les procédures systèmes sont recherchées sans Master en priorité.

Nous avions déjà eu un débat sur le même sujet :
http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&oe=UTF-8&threadm=u4tMCmUSCHA.2412%40tkmsftngp13&rnum=3&prev=/groups%3Fhl%3Dfr%26ie%3DUTF-8%26oe%3DUTF-8%26q%3Dsp_%2Bprocedure%2B%2522sql%2Bserver%2522%2B%26sa%3DN%26tab%3Dwg%26meta%3D

En fait le débat n'était pas vraiment clos car je me viens de me rendre compte de faits assez
intéressants
Si l'on crée le script suivant, on a vraiment le comportement documenté.
Use Master
GO
CREATE PROC sp_test
AS SELECT 'Je suis dans Master'
GO
Use Northwind
GO
CREATE PROC sp_test
AS SELECT 'je suis dans Northwind'
GO

Si l'on se met dans Northwind, SQL/Server exécute la procédure de Northwind
Si l'on se met sur tout autre base, il exécute celle de Master
Le profiler montre bien qu'il y a un événement SP:CacheMiss dans le cas de Northwind
Contrairement au document cité par Lionel, je m'explique plus cet événement par un héritage du passé
où 6.5 allait chercher dans Master en priorité...

Le deuxième phénomène que je viens de découvrir et que je n'arrive pas à expliquer est le suivant.
Comme SQL/Server recherche en priorité dans Master que les procédures système, j'ai transformé la
procédure sp_test de Master en procédure système avec la procédure (non documentée mais largement
diffusée) sp_MS_marksystemobject
Use Master
GO
sp_MS_marksystemobject sp_test

Là, je remarque au bout d'un temps aléatoire que sp_test prend le comportement attendu à savoir
qu'elle prend systématiquement le pas sur celle dans Northwind.
Ce que je n'arrive pas à comprendre, c'est le temps aléatoire que met SQL/Server à le faire.
En vidant le cache, cela marche mais pas à tous les coups.

Bizarre !!!

Med


"Vuillermet Jacques" a écrit dans le message de news:


A une époque, "on disait" qu'une procédure stockée ayant un nom commençant
par "sp_" était d'abord recherchée par SQL Server dans la base MASTER, puis
dans la base courante (d'où perte de performance inutile....).
Il m'a même semblé le lire dans un article de Microsoft.

Je voulais faire cette "leçon" à des développeurs... mais avant, je l'ai
testée par acquis de conscience.

Bien m'en a pris !
SQL Server 2000 SP3 recherche une telle PS d'abord dans la base courante
PUIS dans la base MASTER.

Deux solutions :
- je n'ai rien compris (toujours possible, c'est un risque pour un donneur
de leçon ;-) ;
- à partir d'une certaine version de SQL Server les choses ont changé.

Votre avis ? (N'hésitez pas si c'est la première solution !)

Jacques.





Avatar
lionelp
je ne suis pas mauvais esprit comme ça !;)

C ordialement,
LionelP

"Vuillermet Jacques" wrote in message
news:%

Merci !

Tu n'as pas osé le dire mais c'était la première solution !

Jacques.


"lionelp" a écrit dans le message de news:
4017f2b5$
> Bonjour,
>
> Voici 2 liens :
>
> http://support.microsoft.com/default.aspx?kbid&3889
> ...
> NOTE: If your stored procedure name begins with the "sp_" prefix and is
not
> in the master database, you see SP:CacheMiss before the cache hit for


each
> execution even if you owner-qualify the stored procedure. This is


because
> the sp_ prefix tells SQL Server that the stored procedure is a system
stored
> procedure, and system stored procedures have different name resolution
rules
> (the "preferred" location is in the master database). The names of
> user-created stored procedures should not begin with "sp_."
> ...
>
>



http://www.microsoft.com/technet/treeview/default.asp?url=/technet/itcommuni
ty/chats/trans/sql/sql0724.asp
> ...
> Host Guest_PeterCarlin_MS
> Q:(Sajal) : Could someone explain the mechanics of how a sp_ proc in a
user
> database is handled by the optimizer?
>
> A: Procs that start with sp_ are treated specially by SQL. SQL first


looks
> in the user database and if the proc is not found there looks in master.
> Procs without sp_ are only looked for in the user database. Does this
answer
> your question?
> ...
>
> Cordialement,
> LionelP
>
> "Vuillermet Jacques" wrote in message
> news:
> >
> > A une époque, "on disait" qu'une procédure stockée ayant un nom
commençant
> > par "sp_" était d'abord recherchée par SQL Server dans la base MASTER,
> puis
> > dans la base courante (d'où perte de performance inutile....).
> > Il m'a même semblé le lire dans un article de Microsoft.
> >
> > Je voulais faire cette "leçon" à des développeurs... mais avant, je


l'ai
> > testée par acquis de conscience.
> >
> > Bien m'en a pris !
> > SQL Server 2000 SP3 recherche une telle PS d'abord dans la base


courante
> > PUIS dans la base MASTER.
> >
> > Deux solutions :
> > - je n'ai rien compris (toujours possible, c'est un risque pour un
donneur
> > de leçon ;-) ;
> > - à partir d'une certaine version de SQL Server les choses ont changé.
> >
> > Votre avis ? (N'hésitez pas si c'est la première solution !)
> >
> > Jacques.
> >
> >
> >
>
>