2013-02-04 6 views
22

MVC MiniProfiler의 결과를 SQL Server 데이터베이스에 저장하려고합니다. 높은 부하의 mvc4 페이지에서 테스트 또는 개발 시스템에서 재현 할 수없는 까다로운 성능 문제를 발견하고 프로덕션 서버에서만 산발적으로 발생합니다.MVC MiniProfiler 결과를 저장하는 방법

미니 프로파일 러에 연결하는 가장 좋은 방법은 무엇입니까? 거기에 기존 확장 기능이 있습니까?

+0

미니 프로파일 러 소스에서 IStorage 인터페이스를 찾았지만 문서화가 잘되어 있지 않은 것으로 보입니다. – NickD

답변

35

결과를 SQL Azure에 저장하기 위해 MiniProfiler을 설정 했으므로 매우 쉽습니다. 우리는 MiniProfiler.MVC3을 사용하여 모든 배선을 설명합니다 (here).

테이블 작성 스크립트는 SqlServerStorage.TableCreationScript 정적 필드가있는 어셈블리에 포함되어 있으므로이를 사용할 수 있지만 코드를 파고 들자 마자 최신 개발 분기에서 일부 인덱스를 추가하여 스크립트를 약간 향상 시켰습니다. 테이블 구조는 변경되지 않으므로 nuget에서 사용할 수있는 최신 패키지로 계속 작동합니다.

최신 테이블 작성 스크립트 here is direct link 작성시.

후 당신이해야 할 유일한 것은 설정 MiniProfiler의 코드 한 줄 SQL을 사용하는 것입니다 : 당신이 SQL 애저를 사용하지 않는 경우

MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>"); 

, 그거야,하지만 난 하나를 발견 Azure에서 사용할 때 문제가 발생합니다.

System.Data.SqlClient.SqlException에게

테이블을 클러스터 된 인덱스없이이 버전의 SQL Server에서 지원되지 않습니다 저장하려고 프로파일 링 할 때 나는 다음과 같은 예외를받은 (당신에게 ELMAH 감사합니다). 클러스터 된 색인을 생성하고 다시 시도하십시오.

이 문제를 해결하기 위해 추가 (사용되지 않은) 열을 MiniProfilers 테이블에 추가해야했습니다.

create table MiniProfilers 
(
    RowId integer not null identity constraint PK_MiniProfilers primary key clustered, -- Need a clustered primary key for SQL azure 
    Id uniqueidentifier not null, 
    Name nvarchar(200) not null, 

그리고 가이 드 ID 열이 더 이상 기본 키 된 이후

, 나는 확인하기 위해 추가 인덱스를 추가 조회 여전히 빠르다 :

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id) 
여기에 문제의 테이블을 만드는 스크립트의 시작입니다

도움이 되길 바랍니다.


업데이트

SQL 애저를 지원하는 변화는 Pull Request로 제공 받아 들여졌다. 감사합니다 Jarrod.

+0

우수 답변! –

+1

감사합니다 !!! btw. 프로필러 표시를 비활성화 할 수 있습니까? – NickD

+1

@Snoopy 예, 어제는 [프로파일 러 결과 숨기기] (https://github.com/SamSaffron/MiniProfiler/commit/85609b6226eff71ac21dfa990dd1fa54aace237f) 기능이 확인되었습니다. 나는 너겟 업데이트를하지 않았지만, 최신 소스를 얻고 거기에서 빌드 할 수 있습니다. –

관련 문제