2010-11-23 3 views
32

저장 프로 시저를 디버깅하고 있으며, 지금은 어떤 순서로 실행되었는지, 어떤 매개 변수가 얼마나 빠른지, 어떤 것이 실행되었는지에 관심이 있습니다. 그 사이에 잠입하여 감속을 초래할 수 있습니다.SQL Server 프로파일 러 2008의 출력을 CSV와 유사한 파일로 덤프하는 방법

그래서 몇 분의 추적을 포착했습니다. 문제는 물건이 너무 많아서 좁혀 야한다는 것입니다. 내가 File -> Save As을 할 경우에, 나는 다음과 같은 옵션이 얻을 :

  • 추적 파일 ...
  • 추적 템플릿 ...
  • 추적 표 ...
  • 추적 XML 파일을 ...
  • 재연을위한 XML 파일 추적 ...

이제 이것들은 괜찮은 옵션이지만, 실제로 원하는 것은 표 형식입니다 (예 : CSV). 나는 SP 추적의 쉼표가 아마도 CSV 형식을 엉망으로 만들 것이라고 생각한다. 저는 기꺼이 ||과 같은 다른 것을 구분 기호로 사용합니다.

표 형식을 사용하면 grep 등을 사용하여 필터를 제거한 다음 Python으로 쉽게 처리하여 원하는 것을 볼 수 있습니다. 스크립트를 사용하여 XML 파일을 파싱하기 시작했지만 자신이 추적 파일에 XML 파일 형식으로 너무 많은 시간을 보내고 있다는 것을 발견했습니다. (전에 lxml 라이브러리를 사용하지 않았습니다.)

그래서 ... 쉬운 방법이 있습니까? 어떻게 든 Excel에 복사 할 수 있습니까?

답변

54

추적 테이블에 저장하면; SQL Server의 테이블에서 데이터를 가져 와서 마음의 내용에 맞게 조작 할 수 있습니다. 여전히 필요한 경우 CSV로 내보내는 것도 포함됩니다. 텍스트 데이터 열은 표에 완전히 나와 있습니다.


저장 -> 추적 테이블을 선택하는 경우. 테이블과 데이터베이스의 이름을 묻는 메시지가 나타납니다. 말하자면 당신은 데이터베이스 스크래치에서 ProfilerTemp이라고 부릅니다.

select * from scratch.dbo.ProfilerTemp 

표의 추적 창에 모든 항목이 표시됩니다. 방금 저장 프로 시저에 아래로 필터링하고 싶은 didnt는 경우 그냥 선택

Select textdata from [Scratch].[dbo].[ProfilerTemp] 
    where eventclass = 10 
    And textdata like 'exec %' 
    and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection' 

에있는이 비 프로 시저 호출을 필터링하고 연결이있을 수 있습니다 재설정합니다. 수행하려는 작업에 따라 필터를 추가해야 할 수도 있습니다.

텍스트 파일로 원한다면; 쿼리 - 파일 결과를 선택하고 쿼리를 실행하십시오. 그러면 파일 이름을 묻는 메시지가 표시되고 매개 변수 텍스트가 텍스트 파일로 제공됩니다.

+0

그리드를 복사하여 Excel에 붙여 넣을 수 있습니다. 하지만 당신은 왜 그것을 제안하지 않고 하나 이상의 라인을 얻을. – u07ch

+1

정답은 약 150 점을 기록 할 수 있기 때문에 요약 된 단계와 자세한 내용을 받아 들여야합니다. –

+1

나는 포인트가 stackoverflow에서 떨어지는 것 같아 - 그 같은 Boinc - 나는 14Million 포인트가 있지만 그들과 함께 아무것도 할 수 없어 그래서 왜 귀찮게. – u07ch

0

분석해야하는 교착 상태 추적 이벤트가 포함 된 SQL 프로필러 추적 파일이 많았습니다. SQL Profiler를 사용하여 단일 XML 파일로 변환 한 다음 lxmlpandas 라이브러리를 사용하여 XML 파일을 Python으로 읽는 것으로 끝 맺었습니다.

데이터가 팬더 Dataframe에서 끝나면 쉽게 CSV, Excel로 변환 할 수 있습니다 ...또는 파이썬으로 분석 할 수 있습니다 (팬더에 익숙한 경우).

스크립트는 gist으로 사용할 수 있습니다. 다른 추적을 사용할 수 없었기 때문에 교착 상태 추적 파일을 위해 특별히 작성되었습니다. 즉, 목적을 달성하기 위해 약간 조정해야 할 수도 있습니다. XML 파일이 큰 경우 (몇 백개의 MB) 걱정하지 마십시오. 스크립트는 iterparse()을 사용합니다. 즉, 파일이 메모리로 읽히지 않고 관련 요소 만 캡처됩니다. 예 : xdl ca. 220MB는 13 초 이내에 파싱되었습니다.

XML (xdl 확장자)로 추적 파일을 저장 :

Extract

당신이 옵션 하나의 파일의 모든 이벤트를 선택해야합니다.

Save

2

TL; DR은 : 다음, 수동으로 준비, 텍스트 편집기에 복사하여 Excel로 붙여 넣습니다.

나는 SQL 서버와 약간의 경험을 가지고, 그래서 이것은 다른 사람을 위해 작동하는지는 모르겠지만, 그것은 나를 위해 한 : SQL Server 프로파일 러의

  • 선택 원하는 행을. 복사하려면 Ctrl + C를 누르십시오.
  • 정규식 검색을 수행 할 수있는 일반 텍스트 편집기에 붙여 넣기 (예 : 내 경우 메모장 ++)
  • 정규식은 $1 $4 $6
    • 이 SQL 스크립트에서 모든 줄 바꿈을 지 웁니다와 (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?를 교체합니다.
    • 더 이상 결과가 없어 질 때까지 "모두 바꾸기"를 계속하십시오.
  • 은 정규식은 $1
    • 이 더 SQL 물건에서 줄 바꿈을 지 웁니다와 (Batch(Starting|Completed)[^\\]*?)\r\n를 교체합니다. 다시 결과가 없어 질 때까지 계속 교체하십시오.
  • 정규식 이것은 감사의 로그인 스크립트
당신은 더 교체 할 필요가 있습니다
  • 에서 모든 줄 바꿈을 지 웁니다 set
    • \r\nset 교체, 당신은 아이디어를 얻을.
    • "텍스트 가져 오기 마법사"를 사용하여 Excel에 붙여 넣습니다. 탭을 구분자로 사용하십시오.
    • 첫 번째 열을 기준으로 정렬하고 도움이되지 않는 행 (예 : '내 로그인 감사')을 삭제하십시오. 열을 통해 일부 데이터 (예 : 사례의 'EntityFramework'데이터)를 수동으로 이동해야 할 수도 있습니다.