Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
243
Assunto : SQL Server
Titulo: Evitar o uso do prefixo SP_ desnecessariamente

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



As procedures de sistema do SQL Server são precedidas pelo prefixo SP_ . Isso soa aos DBA's como um padrão de nomenclatura de procedure.

Em uma dica anterior mencionamos que quando uma procedure é precedida por SP_ o SQL Server busca a procedure no banco Master. Isso permite que sejam criadas procedures globais para administrar o servidor. Essas procedures podem ficar no Master e serem chamadas a partir de qualquer banco que o SQL Server as encontra.

Então por que não devemos nomear todas nossas procedures como SP_ ?

O SQL Server mantém um cache de planos de execução das procedures. Assim sendo, quando uma aplicação executa uma procedure primeiramente ele procura esta procedure no cache, se estiver lá utiliza estas informações, caso contrário terá que recompilar.

A versão 7 e superiores mantém apenas 1 cópia de cada procedure no cache de procedures. Para garantir isso o SQL Server precisa ter certeza que, recebendo 2 pedidos simultâneos para a mesma procedure, não tentará compila-la 2 vezes. Assim sendo, durante o processo de compilação o SQL Server gera um lock, chamado de compilation lock, que impede que outras aplicações compilem a procedure ao mesmo tempo.

Ocorre que o compilation lock é gerado imediatamente após a procura no cache. Ou seja : o SQL Server busca a procedure no cache, se não achar, gera o lock. E dai ?

Quando a procedure tem o prefixo SP_ ela é primeiramente procurada no Master e não no banco em que o usuário está. Quando a procedure não é encontrada no Master é gerado o compilation lock. Posteriormente, antes de compilar a procedure, o SQL Server acaba descobrindo que ela já está no cache de procedures do banco de dados do usuário e reaproveita o cache, sem recompilar a procedure. Porém TODAS as chamadas desta procedure vão estar gerando o compilation lock e prejudicando seriamente o tempo de execução da procedure.

Devido a isso, evite utilizar o prefixo SP_ nas suas procedures, utilize apenas quando necessário, para procedures administrativas.


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 3/4/2010 6:05:00 PM
nome: Vítor
email: vavelino@shcnet.com.br
comentário:
OK! Mas se a procedure começar com sp, sem o underline, como em spTabelaSelecionar, o problema é o mesmo?

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br