Há um tempo fiz uma rotina aqui no meu trabalho onde havia a necessidade de listar as transações aberta há mais de x horas. O objetivo dessa rotina é simplesmente listar as transações não sendo necessário eliminá-las, pois para isso há a necessidade de uma análise mais detalhada do caso. Como é uma rotina nova a decisão foi não usar a sysprocesses e assim foi. Conseguimos montar essa query direitinho usando os seguintes DMO’s (Dynamic Management Objects).
- sys.dm_exec_sessions;
- sys.dm_tran_session_transactions;
- sys.dm_tran_active_transactions;
- sys.dm_exec_sql_text;
- sys.dm_exec_requests.
A partir disso eu precisava recuperar as seguintes informações:
- Id da sessão;
- Nome do servidor de banco de dados;
- Nome da aplicação;
- Quantidade de transações abertas;
- Nome do servidor de origem;
- Nome do Login;
- Status da sessão;
- Hora de início da transação;
- Query executada pela transação.
Com isso o relatório ficou com a seguinte aparência:
Com a versão beta do relatório, percebemos que o campo “Qtd Transações” o valor era sempre 1. Ops! Aqui tem algo errado!!!
Como estávamos pegando essa informação pelo campo “open_transaction_count” da DMV sys.dm_exec_requests e a sua característica é “Número de transações abertas para esta requisição.” esse valor realmente estava correto, porém não era isso que eu precisava.
Como minha versão de produção é SQL Server 2008 R2, não tive o que fazer… Fui obrigada a usar a sysprocesses recuperando esse valor do campo “open_tran” que tem a seguinte característica “Número de transações para o processo”.
Nesse último SQLSaturday (#SQLSat325) assisti uma palestra que falava justamente de DMVs e no final tive a oportunidade de questionar sobre isso, pois isso me faz ficar presa a bendita sysprocesses. A resposta foi dizer que o campo “open_transaction_count” existe na sys.dm_exec_session também.
Ao chegar em Brasília e ver mais um WebCast sobre DMVs foi comentado sobre o mesmo assunto onde foi informado que na versão do SQL Server 2008 R2 não era tão simples recuperar essa informação. Então olhando nas documentações da sys.dm_exec_session encontramos o seguinte:
Fazendo o select no 2008 R2 temos o seguinte:
Fazendo o mesmo select nas versões 2012 + temos o seguinte:
Ou seja, infelizmente ainda ficarei dependente da sysprocesses.
#Chateada
Link adicional: http://sqlblog.com/blogs/kalen_delaney/archive/2008/06/29/why-i-still-need-sysprocesses.aspx
Post direto e bem resumido Raiane, ficou bacana.
É uma pena que teremos que ficar com a sysprocesses por algum tempo.
Pelo menos não estamos sozinhos, a sp_whoisactive também usa, hehe.
[]’s
Valeu Renato! Infelizmente 😦
Hahahaha #Chateada Muito bom!
É…infelizmente ainda usaremos a sysprocesses no 2008R2.
Dependendo da aplicação, então… vou ficar no 2008R2 por muito tempo…
Mas anime-se e gogo hekaton!
GOGOGO!!
rsrsrs