Estou usando eventos estendidos do SQL Server 2012 (11.0.5058.0) e gostaria de saber o protocolo de rede usado por cada conexão (TCP/IP, memória compartilhada etc).
Sessão de evento criada para o evento de login via: -
CREATE EVENT SESSION [Login] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_app_name
,sqlserver.client_connection_id
,sqlserver.client_hostname
,sqlserver.client_pid
...
...
Eu adicionei todas as ações disponíveis para o evento de login (SELECT * FROM sys.dm_xe_objects WHERE package_guid = '655FD93F-3364-40D5-B2BA-330F7FFB6491' AND object_type = 'action' ORDER BY name), mas nenhuma parece fornecer o protocolo de rede.
Pode ser claro que Login não seja o evento correto para dar essa informação, mas não consigo ver um evento de conexão (ou similar) dentro do XE DMV .
Para confirmar, desejo uma sessão de evento estendida para expor as informações net_transport que são retornadas por dm_exec_connections : -
SELECT net_transport FROM sys.dm_exec_connections
Encontrei a resposta.
O evento de login está correto e o protocolo de rede é exposto por meio da ação options_text. options_text estava sempre em branco para mim anteriormente e isso precisa ser definido via SET collect_options_text=(1) . Uma sessão de exemplo pode ser: -
E isso preencheria options_text com algo como: -
Descobri isso por acaso criando uma sessão a partir do modelo de eventos estendidos "Rastreamento de conexão" que a Microsoft enviou.
SSMS | Gestão | Eventos Estendidos | Sessões | Clique com o botão direito | Nova sessão | Página geral | Modelo = Rastreamento de conexão.
Esse modelo inclui "SET collect_options_text=(1)" e eu não sabia que essa opção existia.
Um exemplo também é fornecido neste artigo sql-server-performance . A última captura de tela mostra o texto de opções preenchido com "protocolo de rede: LPC.." LPC é memória compartilhada .