Porque qualificar o owner na chamada de stored-procedures

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Veja neste artigo o porque qualificar o owner na chamada de stored-procedures.

Ao referenciar uma stored-procedure no SQL Server 2000, NÃO estamos acostumados a especificar o owner do objeto como parte do comando. Optamos por utilizar...

exec stp_teste

... no lugar de

exec dbo.stp_teste

A procedure stp_teste poderia conviver pacificamente com uma procedure de mesmo nome, criada no mesmo database por outro usuário. Isso não é uma prática comum, mas pode acontecer. Como fazer então para executar uma procedure de mesmo nome, criada por usuários diferentes ?

... para executar a procedure stp_teste cujo owner é dbo :

exec dbo.stp_teste

... para executar a procedure stp_teste criada pelo usuário usersqlmag :

exec usersqlmag.stp_teste

Pois bem, vimos que o owner  é parte integrante do nome da procedure e é fundamental para que o SQL Server 2000 consiga identificar corretamente o objeto. Agora o que aconteceria se NÃO especificássemos  o owner da sp no momento da chamada? Vamos a um exemplo prático: no script a seguir serão criadas duas procedures: a primeira com owner dbo e a segunda com usersqlmag:

create procedure usersqlmag.stp_teste
as print 'Procedure stp_teste criada pelo usuario UserSQLMag'
go
create procedure dbo.stp_teste
as print 'Procedure stp_teste criada pelo usuario DBO'
go


Vejamos o que acontece quando usuários diferentes executam a mesma sp sem qualificar o owner:

... resultado da execução da stored-procedure por UseSQLMag

exec stp_teste

--------------------------------------------------------------------------------------------------------------------------------------------

Procedure stp_teste criada pelo usuário UserSQLMag

... resultado da execução da stored-procedure pela usuária Maria:

exec stp_teste

--------------------------------------------------------------------------------------------------------------------------------------------

Procedure stp_teste criada pelo usuário DBO

Pode-se concluir que ao acionar uma stored-procedure sem qualificar seu owner,  os seguintes eventos acontecerão nessa ordem:

1.      O SQL Server 2000 irá procurar por um objeto cujo owner seja o mesmo daquele que está em vigor na sessão. Se a busca for bem sucedida, a stored-procedure desse owner em particular será executada.

2.      Se não encontrar o objeto para o usuário que está em vigor na sessão, o SQL Server 2000 irá procurar por um owner padrão (=DBO). Se a busca for  bem sucedida, a stored-procedure cujo owner é DBO será executada.

3.      Se não encontrar o objeto para o owner ativo na sessão nem para o usuário DBO será emitida uma mensagem de erro.

Agora vamos entender porque qualificar o owner no momento da chamada da sp é um ajuste fino de tuning: ao acionar uma sp, o plano de execução gerado na compilação da procedure será carregado em memória. Novas execuções aproveitam-se desse plano, otimizando performance. Quando um plano é localizado em memória, o evento SP:CacheHit pode ser identificado no Profiler. Da mesma maneira quando um plano não for encontrado, o evento SP:CacheMiss será sinalizado. No exemplo a seguir, o usuário usersqlmag irá executar a procedure stp_teste2, criada pelo usuário sa. Como o usuário sa possui auto-mapeamento para dbo (isso acontece para todos os usuários membros do server role SysAdmin ou do database role db_Owner), o nome qualificado da sp será dbo.stp_teste2. Vamos supor também que a procedure stp_teste2 foi executada inúmeras vezes no último segundo, portanto seu plano estará residente em memória.

 09-08pic01.JPG

 O que podemos observar:

·        Na primeira execução – exec stp_teste2 – são necessárias duas tentativas (1) e (2) para localizar o plano em memória. A primeira tentativa falha porque a procedure usersqlmag.stp_teste2 não existe ;

·        Na segunda execução – exec dbo.stp_teste2 – o plano de execução foi localizado na primeira tentativa (3)

O que podemos concluir?

Em sistemas de produção, submetidos a execução de centenas de stored-procedures em poucos segundos, a localização imediata do plano de execução em memória é um aspecto de tuning que pode fazer a diferença. Portanto, sempre que executar uma stored-procedure NÃO SE ESQUEÇA DE QUALIFICAR O OWNER !

Nota Importante

Procure padronizar o nome de criação e chamadas para stored-procedures. Uma sp criada como dbo.stp_Teste e chamada como dbo.STP_TESTE irá causar um SP:CacheMiss. Os nomes de sp´s armazenadas na Procedure Cache são case-sensitive e independem do collation e/ou sort order adotado para o database.

Por hoje é só.

 

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?