가장 많은 양의 네트워크 트래픽을 유발하는 쿼리 확인


23

프로덕션 SQL 서버에서 데이터 트래픽이 간헐적으로 급증하고 있습니다. 최대 200Mbit / s로 NETWORK IO 대기가 발생하여 쿼리 시간 초과가 발생합니다. 큰 결과 집합을 반환하는 쿼리를 어떻게 알 수 있습니까?

답변:


18

DMV 에서 이것을 찾을 수 있습니다 :

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

추적과 달리 이것은 프로덕션 서버에서 실행하기에 완벽하게 안전해야합니다.


7

SQL Profiler를 사용하여 프로덕션 데이터를 추적하고 가장 큰 읽기 및 쓰기가있는 코드 / 배치를 수집합니다. 읽기 / 쓰기가 많은 프로 시저 및 배치 만 가져 오도록 추적을 필터링하십시오. 당신의 눈에 맞는 샘플을 선택하십시오 : 백만 개 이상의 읽기 또는 쓰기를 가정 해 봅시다.

개발자 / 테스트 시스템에 대한 호출 샘플을 가져 와서 '클라이언트 통계 포함'옵션 (조회-클라이언트 통계 포함) 옵션이 활성화 된 Management Studio에서 실행합니다. 그러면 클라이언트 통계 정보가있는 별도의 창이 나타납니다. 클라이언트에서 보낸 바이트, 서버에서받은 바이트.

데이터를 필터링하지 않고 프로덕션 DB에서 트레이싱을 활성화하지 마십시오 !!! 가능한 가장 많이 (db, 호스트 이름, 생각한대로) 필터링 한 다음 추적 만 시작하십시오. :-) 다음에 프로파일 러를 닫는 것을 잊지 마십시오.

추신 : 또 다른 좋은 옵션을 기억했습니다. 기간 동안 추적을 따라 Perfmon을 사용하여 데이터를 저장해야합니다 (IO 매개 변수 만 선택). 프로파일 러에는 추적 파일과 perfmon 데이터 파일을 함께 가져 오는 멋진 기능이 있습니다. IO 스파이크가 가장 클 때 볼 수 있습니다.

PS2 : Gaius의 옵션이 더 우아하다는 데 동의합니다. 그러나 나는 후손에 대한 부피가 큰 대답을 남깁니다! :-)


5

아직 보지 않았다면 Adam Machanic의 sp_WhoIsActive를 확인하십시오. 그는 최근 sp_WhoIsActive에 내장 된 다양한 기능을 설명하는 일련의 블로그 게시물을 작성했습니다. 그 중 하나는 @delta_interval입니다.

이것은 전체 CPU 또는 I / O를 가장 많이 차지하는 것을 보여줄뿐만 아니라 지금 가장 많은 CPU 또는 I / O를 차지하는 것을 보여줄 수 있습니다.

이 기능에 대한 자세한 설명은 다음 블로그 시리즈를 확인하십시오.

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

다음 블로그 게시물에서는 sp_WhoIsActive의 출력을 정렬하고 표시 할 열을 선택하는 방법에 대해 설명합니다.

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

이것은 그가 설정 한 다음 업데이트 링크에서 사용할 수있는 많은 게시물 중 하나입니다.

http://whoisactive.com

이 답변 시점에 버전 11.0을 사용할 수 있으므로 이전 버전을 사용하는 경우 업그레이드해야 할 시간이 있습니다 .D

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.