Qual é a melhor maneira de monitorar consultas de execução longa no SQL Server?

10

Eu tenho que executar algumas consultas de longa duração (reconstruindo índices, atualizando grandes conjuntos de dados) para o meu banco de dados. Existe uma alternativa para executar a consulta no SQL Server Management Studio e verificá-la a cada hora? Gostaria de receber um email ou enviar uma mensagem quando terminar, mas não conheço a melhor ferramenta para isso.

Michael Hedgpeth
fonte

Respostas:

4

Após a publicação no Gaius: Você pode criar um script .SQL que faça o que você precisa com o uso de db na frente do script -> criar um trabalho do SQL Agent do tipo Sistema operacional que chama o script:

sqlcmd -E -S SERVERNAME -i "c: \ YOURSCRIPT.sql" -o "C: \ YOURSCRIPT_LOG.log"

Adicione uma nova etapa e use o procedimento msdb.dbo.sp_send_dbmail para enviar email. Esse recurso pode ser personalizado para exibir no correio uma consulta específica das tabelas SQL para confirmar a execução do script ... por exemplo, dbcc showcontig dos seus índices de reconstrução.

yrushka
fonte
1

Você tem a opção de usar tarefas SQL? Você pode fazer notificações e coisas assim por lá. Tanto quanto receber notificações intermitentes, isso exigiria algum código dentro dos procedimentos armazenados, etc.

jcolebrand
fonte
1

Sim, basta usar xp_sendmail . Você pode enviar uma mensagem predefinida ou os resultados de uma instrução SQL com a mesma facilidade. Esse recurso está disponível desde o SQL Server 6.5, mas deve ser obsoleto no Denali - se isso for uma parte permanente da sua operação, use o Database Mail, que é muito mais "corporativo".

Gaius
fonte
1

Eu sempre escrevo mensagens em uma tabela "EventLog". Ao processar grandes quantidades de dados, gerencio os dados em partes e escrevo atualizações de status no EventLog após cada parte.

Quando quero verificar o andamento do processo de longa execução, basta consultar a tabela EventLog.

Exemplo de saída:

-------------------
- Minha grande atualização -
-------------------
Início: 2011-05-03 10:00:00

Registros a serem processados: 1.000.000
Pedaços: 200

--- Pedaço 1 ---
Tentando atualizar MyTable
Registros atualizados: 5000
Registros restantes: 995.000
Rendimento: 4210 registros por segundo

--- Pedaço 2--
Tentando atualizar MyTable
Registros atualizados: 5000
Registros restantes: 990.000
Rendimento: 3555 registros por segundo

--- Pedaço 3--
etc.

Também tenho colunas na tabela EventLog para rastrear quando a mensagem foi gravada, qual processo a gravou etc. Desculpe por não incluir essas informações no meu exemplo.

datagod
fonte