Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como listar e eliminar processos do Windows utilizando o CLR (C#)

Visualizações: 2.073 views
Tempo de Leitura: 5 minutos

Olá pessoal,
Bom dia!

Neste post, vou demonstrar como listar e eliminar processos que estão executando no servidor SQL Server utilizando o CLR (C#). Esses recursos podem ser especialmente úteis para identificar rapidamente os processos de usuários que estão em execução, quais processos estão utilizando mais memória ou uso de CPU, por exemplo.

Durante o desenvolvimento de um script PowerShell, onde estava convertendo arquivos do Excel (XLSX) para PDF, os processos estavam “travando” aguardando alguma interação na tela, que como eu estava executando via linha de comando lá no servidor, não tinha como terminar essa interação. Diante disso, a cada teste, um novo processo ficava em execução no servidor aguardando essa interação.

Com isso, ficaram vários processos em execução sem fazer nada. Por este motivo, optei por desenvolver uma Stored Procedure no CLR para eliminar esses processos do servidor. Caso você queira saber mais detalhes sobre o uso da biblioteca Process, veja mais acessando o meu post SQL Server – Como executar scripts PowerShell e Prompt-DOS (MS-DOS) utilizando CLR (C#).

Como listar processos no SQL Server utilizando a lib Process

Na Stored Procedure abaixo, eu utilizo a biblioteca Process e o método GetProcesses para retornar as informações dos processos em execução no servidor em questão.

sql-server-how-to-list-and-kill-windows-process-with-clr-csharp

Como listar processos no SQL Server utilizando o binário tasklist

Desta vez, vou utilizar novamente a biblioteca Process para executar o binário tasklist, que é nativo do Windows, e exportar as informações retornadas pelo prompt do MS-DOS para CSV e tratar os dados no C#.

sql-server-how-to-list-and-kill-windows-process-with-clr-csharp-2

Como eliminar processos no SQL Server utilizando a lib Process

Para eliminar um processo do servidor onde estou atualmente conectado, podemos utilizar a biblioteca Process e o método Kill(), informando o número do processo para que ele seja finalizado no servidor onde a Stored Procedure está sendo executada.

sql-server-how-to-list-and-kill-windows-process-with-clr-csharp-3

Como eliminar processos remotamente no SQL Server utilizando o binário taskkill

Diferente da Stored Procedure acima, neste exemplo vou utilizar a biblioteca Process para executar o binário nativo do Windows, taskkill.exe, para eliminar um processo através do PID informado, remotamente, ou seja, em qualquer servidor.

sql-server-how-to-list-and-kill-windows-process-with-clr-csharp-4

Como vocês podem observar, em algumas Stored Procedures eu utilizo a classe Retorno para a exibição de mensagens de alerta e mensagens de erro no banco de dados pelo CLR. O código-fonte dessa classe está disponível no meu post SQL Server – Como enviar avisos e mensagens de erro para o banco pelo CLR (C#).

Espero que tenham gostado do post e até logo!

sql server clr c# csharp windows processo process list view listar visualizar relatório kill eliminar matar processo

sql server clr c# csharp windows processo process list view listar visualizar relatório kill eliminar matar processo