O que o SQL Server Query definirá contador de desempenho "Tempo de execução de transação mais longo" 0

2

Estou tentando decidir se vale a pena monitorar esse contador de desempenho: \\ SERVER \ MSSQL: Transactions \ Longest Transaction Running Time.

Assim, durante os testes, tentei criar algumas transações de longa duração, mas parece que não consigo fazer com que esse contador leia algo maior que zero.

Mas não consigo encontrar uma transação ou consulta que faça isso. Como ponto de partida, usei a consulta de exemplo (uma inserção em uma transação) na ajuda para DBCC OPENTRAN sem sorte.

Existe uma consulta que afeta este contador?

    
por Michael J Swart 29.07.2010 / 15:25

3 respostas

1

Pouco atrasado para a festa. Acredito que a documentação foi atualizada para explicar a resposta para isso nos últimos seis anos, mas, por meu teste, não está completamente correto.

Em Books Online : "O período de tempo (em segundos) desde o início do a transação que esteve ativa por mais tempo que qualquer outra transação atual.Este contador mostra apenas a atividade quando o banco de dados está em nível de isolamento de instantâneo confirmado de leitura.Ele não registra nenhuma atividade se o banco de dados estiver em qualquer outro nível de isolamento "

Por meu teste, isso não está correto. Se o RCSI não estiver ativado, mas você estiver permitindo o instantâneo, ele mostrará o tempo de transação mais longo para as consultas SNAPSHOT.

O outro truque é que o contador só atualiza a cada 60 segundos.

Basicamente, é muito útil para monitorar se algo vai bloquear a limpeza do armazenamento de versão quando você estiver usando snapshot ou RCSI.

    
por 28.01.2016 / 00:32
3

Esse contador parece ser um pouco lento e imprevisível na atualização, e eu não estou totalmente convencido de que ele está fazendo exatamente o que sua explicação sugere, no entanto eu parecia ter mais sucesso fazendo um select em (uma tabela grande) em uma transação aberta.

Curiosamente, a emissão de uma reversão pareceu fazer com que o contador fosse atualizado imediatamente, o commit era menos efetivo e, às vezes, seria atualizado sem qualquer um deles. Como eu digo, eu não acho que esse contador é exatamente o que pensamos, e pode ser apenas uma aproximação / média.

Atenciosamente, Marca @retracement

    
por 29.07.2010 / 17:33
1

Isso deve lhe dar um valor nesse contador. Você obviamente terá que pará-lo manualmente.

SELECT '1' AS field1 INTO #tmp
BEGIN TRANSACTION
WHILE 1=1
BEGIN
    UPDATE #tmp SET field1=1
END
COMMIT TRANSACTION
DROP TABLE #tmp
    
por 29.07.2010 / 15:47