A questão são as procedures, sobre as quais o DBA certamente terá muita dificuldade de manter o controle. É no momento de implantação das procedures no ambiente de qualidade que o DBA deve checa-las. Mas a questão é : Como checar 100 ou mais procedures que o sistema pode possuir ?
Um truque que auxilia esta tarefa é utilizar querys sobre a tabela syscomments para identificar problemas mais graves relativos ao descumprimento de padrões de desenvolvimento. Veja alguns exemplos :
Identificando a falta de Set NoCount On
O Set Nocount on é uma instrução que, quando utilizada nas procedures, garante uma melhor otimização das procedures, pois evita que a contagem de registros afetados, aquela que normalmente é mostrada pelo query analyzer, seja gerada e transmitida pela rede. Portanto o DBA deve identificar procedures que estejam sem o Set NoCount On. Claro que ele não poderá olhar uma por uma, serão muitas. Para resolver isso podemos realizar querys sobre a tabela syscomments, que contém o código fonte de todas as procedures geradas. Eis a instrução SQL para fazer isso :
SELECT name FROM syscomments a,sysobjects b WHERE a.id=b.id and b.xtype=’P’ AND NOT EXISTS (SELECT id FROM syscomments WHERE text LIKE ‘%set%nocount%on%’ AND id=a.id) ORDER BY name
Identificar procedures que utilizam cursores
Cursores geram grande prejuizo para a performance. O DBA precisa identificar procedures que fazem uso de cursores e analisa-las para garantir que não existe nenhuma forma alternativa de escrevê-las.Eis a instrução SQL para fazer isso:
SELECT a.id,b.name FROM syscomments a,sysobjects b WHERE a.id=b.id AND a.text LIKE ‘%open %’
Identificar procedures que utilizam tabelas temporárias
As tabelas temporárias geram grande consumo de performance, podem gerar problemas quando utilizadas em ambientes que realizam poolings de conexão. Desta forma cabe ao DBA analisar procedures desenvolvidas com tabelas temporárias e verificar se não existem formas alternativas de codifica-las. Eis a instrução SQL para identificar tais procedures:
SELECT a.id,b.name FROM syscomments a,sysobjects b WHERE a.id=b.id AND a.text LIKE ‘%#%’
Identificar procedures que estejam utilizando UNION sem ALL
A falta do ALL no UNION dificulta o uso de índices e prejudica a performance da aplicação. O DBA precisa identificar procedures que estejam utilizando UNION sem ALL e corrigir o problema. Veja o script para identificar tais procedures :
SELECT a.id,b.name FROM syscomments a,sysobjects b WHERE a.id=b.id AND a.text NOT LIKE ‘% UNION ALL%’ AND a.text LIKE ‘% UNION %’ AND b.xtype=’P’
Identificar procedures que estejam fazendo montagem e execução de strings
A montagem e execução de strings é extremamente prejudicial para a performance, pois o SQL Server só é capaz de determinar como a execução será feita em run-time. Quando existe alternativa, é preferível evitar isso. Mais uma vez cabe ao DBA identificar e corrigir este problema. Veja a instrução utilizada para identificar isso:
SELECT a.id,b.name FROM syscomments a,sysobjects b WHERE a.id=b.id AND (a.text LIKE ‘%EXEC(%’ OR a.text LIKE ‘%execute(%’)
Fonte: Búfalo

