Microsoft Dynamics AX 2012 – Qual usuário é responsável pela query em execução?

Não tão focado no desenvolvimento em si, este post tem um intuito bastante específico:

Em um banco de dados SQL Server onde o Microsoft Dynamics AX 2012 está rodando, todas as conexões tem como origem a AOS e, consequentemente, um usuário normalmente chamado de “svc.aos”. Assim, é difícil coletar de uma vez só todo o “contexto” relacionado ao banco de dados conjuntamente com o usuário responsável.

Como contexto, podemos entender coisas como: query, plano de execução e duração.

Existe uma stored procedure que, de forma sintética, é capaz de apresentar diversas informações com uma simples execução. Ela é a sp_WhoIsActive.

Porém, como ela é focada somente no SQL Server e não no Dynamics 2012 propriamente dito, construí uma alteração que pode ser conferida aqui no meu github que é responsável por adicionar uma coluna a mais que representa o usuário existente dentro da UserInfo que está vinculado à determinada sessão do banco de dados.

Exemplo de uso:

EXEC sp_WhoIsActive
        @find_block_leaders = 1,
        @get_plans = 1,
        @sort_order = '[blocked_session_count] DESC',
        @get_dax_user = 1,
        @get_dax_database = 'CONTOSO';

Resultado:

A coluna “dax” reflete o nome do usuário existente na UserInfor do database especificado no parâmetro “get_dax_database”.

Por limitação de espaço, a imagem não apresenta outras colunas importantes como o próprio plano de execução.

Mesmo assim, é possível conferir qual é o usuário que está causando, neste exemplo, um lock.