Olá pessoal,
Boa tarde!
Neste post, vou compartilhar com vocês um aprendizado que tive essa semana. Na empresa onde eu trabalho, foi atualizada recentemente a versão do RedGate SQL Monitor e com isso, foram criados vários alertas para monitoramento de instâncias.
Um desses monitoramentos, é o de long running queries, que identifica sessões que estão executando uma instrução há mais de X minutos. Configuramos esse tempo em 3 minutos, então qualquer sessão que execute um comando que ultrapasse esse tempo de execução na produção, será alertada a equipe de DBA analisar.
O problema é que identificamos que existia uma sessão que sempre era alertada e acabava disparando várias a várias vezes esse alerta, todos os dias, gerando SPAM no nosso e-mail e fazendo com que esse alerta perca a sua importância.
Analisando o alerta, podemos observar que essa sessão era do Database Mail, um utilitário do próprio SQL Server, que executava o comando sp_readrequest, conforme o alerta nos mostra abaixo:

A stored procedure sp_readrequest é uma procedure de sistema, que basicamente lê as solicitações de mensagens da fila e retorna seu conteúdo. Esse processo fica ativo na instância por um tempo mínimo, determinado pelo parâmetro “DatabaseMailExeMinimumLifeTime”, cujo tempo padrão é de 600 segundos. Ou seja, sempre que esse processo for iniciado (e ele é iniciado constantemente), ele ficará executando por no mínimo, 600 segundos, e por isso, o alerta sempre era disparado.
Para resolver esse problema, de modo que eu não precise alterar ou desativar meu alerta, basta alterar esse tempo mínimo padrão:
Utilizando a inferface do SQL Server Management Studio
Para alterar esse parâmetro pelo SQL Server Management Studio, basta acessar a sessão “Management” > “Database Mail”

Agora, marque a opção “View or change system parameters” e clique em “Next”

Nesta tela é possível visualizar o valor atual e definir um novo valor do parâmetro “Database Mail Executable Minimium Lifetime (seconds)”.

Utilizando Transact-SQL
Para visualizar o valor padrão do parâmetro “” utilizando comandos Transact-SQL (TSQL), basta utilizar a query abaixo:
select *
from msdb.dbo.sysmail_configuration
WHERE paramname = 'DatabaseMailExeMinimumLifeTime'

E se você quiser alterar o valor do parâmetro, basta realizar um UPDATE na tabela msdb.dbo.sysmail_configuration:
UPDATE msdb.dbo.sysmail_configuration
SET paramvalue = 60 -- 60 segundos
WHERE paramname = 'DatabaseMailExeMinimumLifeTime'
ou executar a stored procedure sysmail_configure_sp:
EXECUTE msdb.dbo.sysmail_configure_sp 'DatabaseMailExeMinimumLifeTime', '60'
Um ponto importante que deve ser levado em consideração, é que esse parâmetro serve para limitar o tempo mínimo que o processo do DatabaseMail irá executar a cada conexão.
Com um tempo mínimo muito alto, o processo ficará ativo na instância, mesmo que não tenha nenhuma mensagem para entregar.
Se você definir um tempo mínimo muito baixo, o processo irá ficar ativo na instância por menos tempo, mas também irá gerar mais conexões e desconexões na instância para processar essa atividade, causando um pequeno overhead por conta disso. Caso sua instância tenha sempre muitas e muitas mensagens no Database Mail para entregar, considere aumentar esse tempo mínimo para diminuir esse overhead de conexões.
Espero que vocês tenham gostado do post e até a próxima!
Abraço.
SQL Server Sessão executando há muito tempo com o comando sp_readrequest (DatabaseMail) Why a Session With sp_readrequest Takes so Long to Execute Red Gate SQL Monitor alert long-running query
SQL Server Sessão executando há muito tempo com o comando sp_readrequest (DatabaseMail) Why a Session With sp_readrequest Takes so Long to Execute Red Gate SQL Monitor alert long-running query
Comentários (0)
Carregando comentários…