Descubra quais consultas estão causando a maior quantidade de tráfego de rede

23

Em um servidor SQL de produção, estou vendo picos enormes intermitentes no tráfego de dados. Até 200 Mbits / s, o que está causando esperas de E / S de REDE, o que, por sua vez, causa tempos limite de consulta. Como posso descobrir quais consultas estão retornando grandes conjuntos de resultados?

olle
fonte

Respostas:

18

Você pode encontrar isso nos DMVs :

SELECT session_id, num_writes, st.text AS statement_text
FROM sys.dm_exec_connections AS ec
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS st
ORDER BY num_writes DESC

Ao contrário do rastreamento, isso deve ser perfeitamente seguro para ser executado em um servidor de Produção.

Gaius
fonte
7

Eu rastreava os dados de produção usando o SQL Profiler e reunia o código / lotes que possuem maiores leituras e gravações. Filtre o rastreamento para obter apenas procedimentos e lotes com alto nível de leitura / gravação. Escolha uma amostra que combine com seus olhos: digamos mais de 1 milhão de leituras ou gravações.

Eu pegava uma amostra dessas chamadas para uma máquina de desenvolvimento / teste e as executava no Management Studio com a opção 'Incluir estatísticas do cliente' ativada (no menu Consulta - Incluir estatísticas do cliente). Você terá uma janela separada com informações estatísticas do cliente: bytes enviados do cliente, bytes recebidos do servidor.

NÃO PODE TRABALHAR EM UM DB DE PRODUÇÃO SEM FILTRAR OS DADOS !!! Filtre o máximo possível (por db, nome do host, o que quer que você acredite) e só então inicie o rastreamento. Não se esqueça de fechar o Profiler depois de :-).

PS: Lembrei-me de outra boa opção: ao longo do rastreamento por um período, você também deve salvar os dados usando o Perfmon (escolha apenas os parâmetros de IO). O Profiler tem um bom recurso de importar juntos um arquivo de rastreamento e um arquivo de dados perfmon. E você pode ver lá quando tiver os maiores picos de IO.

PS2: Concordo que a opção do Gaius é mais elegante. Mas deixo minha resposta volumosa para a posteridade! :-)

Marian
fonte
5

Se você ainda não viu, pode conferir o sp_WhoIsActive de Adam Machanic. Recentemente, ele fez uma série de postagens no blog explicando os diferentes recursos incorporados ao sp_WhoIsActive, um dos quais é @delta_interval.

Isso não apenas mostrará o que está ocupando mais CPU ou E / S em geral, mas também pode mostrar o que está ocupando mais CPU ou E / S no momento.

Confira a seguinte série de blogs para obter uma explicação completa desse recurso:

http://whoisactive.com/docs/01_background/

A seguinte postagem no blog explica como classificar a saída de sp_WhoIsActive e selecionar quais colunas exibir:

http://whoisactive.com/docs/24_output/

Esta é uma das muitas postagens disponíveis no link de atualizações a seguir, que ele configurou.

http://whoisactive.com

A versão 11.0 está disponível no momento desta resposta, portanto, se você estiver usando uma versão mais antiga, talvez seja hora de atualizar: D

Jeff
fonte