Fui encarregado de registrar toda a execução do SP para todos os bancos de dados em todos os servidores. Meu plano é criar um pacote SSIS que executará uma consulta e adicionará um conjunto de resultados de todos os servidores a uma tabela.
A consulta que encontrei disponível em muitos fóruns é a seguinte. Que dá resultado do banco de dados ativo do servidor. Eu uso EXEC sp_MSforeachdb
para executá-lo em todos os bancos de dados.
DECLARE @command varchar(1000)
SELECT @command = 'USE ? ;
SELECT Db_name(database_id) databaes_name,
p.name proc_name,
p.type proc_type,
execution_count,
CONVERT(date, getdate()) as ForDate
FROM sys.procedures p
JOIN sys.dm_exec_procedure_stats d
ON p.object_id = d.object_id
WHERE d.database_id = Db_id() order by execution_count desc'
EXEC sp_MSforeachdb @command
O que dá o resultado da maneira abaixo.
|databaes_name | proc_name | proc_type | execution_count |ForDate |
.....................................................................
|MyDB | procedure1|P | 12354 |2016-12-02|
|MyDB | procedure1|P | 13254 |2016-12-02|
|databaes_name | proc_name | proc_type | execution_count |ForDate |
.....................................................................
|MyDB2 | proc1 |P | 1254 |2016-12-02|
O que eu quero na minha consulta é que ela conte toda a execução de todos os SPs e me dê o resultado conforme a tabela abaixo.
|databaes_name | proc_type | execution_count|ForDate |
.........................................................
|MyDB | P | 256088 |2016-12-02|
|MyDB2 | P | 1254 |2016-12-02|
Reutilizando a consulta da pergunta para obter o somatório da contagem de execução.
Observe que a consulta acima é gerada com base em uma suposição que
sys.procedures p INNER JOIN sys.dm_exec_procedure_stats d ON p.object_id = d.object_id
funciona para você, conforme mencionado na pergunta.Conforme mencionado na edição, se você deseja que sua saída seja gerada por sp_MSforeachdb, pode usar a abordagem abaixo para primeiro reunir os dados na tabela temporária ou variável de tabela (prefiro variável de tabela em vez de tabela temporária).
Certifique-se de definir a coluna nas variáveis da tabela de acordo com sua saída. Além disso, sinta-se à vontade para alterar a lógica da
GROUP BY
declaração, se necessário.Se você deseja agrupar seu resultado por dia, talvez seja necessário converter a
Execution_Date
parte do dia usandoCONVERT
ou qualquer outro método.