2008-09-24 1 views
4

ASP.NET 응용 프로그램에서 실행되는 몇 가지 쿼리의 프로파일 링 방법은 무엇입니까? 데이터베이스가 너무 느려서 작동하는 일부 소프트웨어가 있습니다 (필자 생각). 테이블에는 인덱스가 있지만 너무 많은 데이터로 작업하기 때문에 여전히 끌고 있습니다. 어떻게하면 더 빠른 속도 향상을 가져올 수있는 몇 가지 사소한 개선을 할 수있는 곳을 알아볼 수 있습니까?SQL 서버 및/또는 ASP.NET 프로파일 링

편집 : 웹 서버가 이러한 긴 쿼리 중에 시간 초과를하는 것을 추가하고 싶습니다.

+0

나는 웹 서버가이 긴 쿼리 동안 시간 제한을 좋아하는 것을 추가하고 싶습니다 :

다음은이 통계 명령에 대한 MSDN에 대한 링크입니다. –

답변

5

Sql Server에는 이러한 상황을 해결할 수있는 유용한 도구가 있습니다. 이러한 도구는 Management Studio (Enterprise Manager + Query Analyzer라고도 함)에 내장되어 있습니다.

SQL 프로필러를 사용하면 웹 응용 프로그램에서 제공되는 실제 쿼리를 볼 수 있습니다.

문제가되는 쿼리를 모두 (CPU 시간이나 IO를 많이 먹는) 밖으로 복사하십시오. "실제 실행 계획 표시"를 사용하여 쿼리를 실행하십시오. 다행히도 분명한 색인이 누락 된 것을 볼 수 있기를 바랍니다.

또한 튜닝 마법사를 실행할 수 있습니다 (버튼. 그것은 쿼리를 실행하고 제안을 할 것입니다 바로 옆에 "디스플레이 실제 실행 계획"에 있습니다.

일반적으로, 이미 인덱스와 쿼리가 여전히 실행되고있는 경우 천천히, 다른 방법으로 쿼리를 다시 작성해야합니다.

이 작업 훨씬 저장 프로 시저에 모든 쿼리를하게 유지 쉽다.

4

SQL Server를 프로필하려면 SQL Profiler을 사용하십시오.

그리고 Red Gate의 ANTS Profiler을 사용하여 코드를 프로파일 링 할 수 있습니다.

+0

SQL 프로파일 러는 대개 나를 위해 트릭을 수행합니다! – mattruma

+0

관리자가 아니더라도 사용할 수 있습니까? –

+0

실제로 ANTS Profiler의 최신 버전을 사용하여 SQL 및 I/O 사용을 추적 할 수 있습니다. –

2

을 난 당신이 프로필을 할 필요가 대답을 믿습니다 그러나 쿼리는 성능 측면에서 가장 쉬운 부분입니다. 튜닝. 쿼리가 아니라 네트워크 나 앱이 아니라는 것을 알게되면 어떻게 문제를 찾아서 수정합니까?

성능 튜닝은 복잡한 작업입니다. 그러나 처음에는 어떤 곳을 보았습니다. 당신은 많은 양의 데이터를 반환한다고합니까? 필요한 것보다 더 많은 데이터를 반환합니까? 정말로 필요한 열과 레코드 만 반환하고 있습니까? select *를 사용하여 100 개의 열을 반환하면 실제로 사용하고있는 5 개의 열을 반환하는 것보다 훨씬 느려질 수 있습니다.

색인 및 통계를 최신으로 유지합니까? 잠시 후에 통계를 업데이트하고 BOL에서 색인을 다시 생성하는 방법을 찾으십시오. 모든 조인 필드에 인덱스가 있습니까? where 절의 필드는 어떻습니까?

커서를 사용 했습니까? 하위 쿼리를 사용 했습니까? 노조는 어떻습니까? 노조를 사용하고 있다면 유니온으로 변경할 수 있습니까?

은 쿼리하여이 그룹을 사용할 수있을 때

는 별개 사용하고 (이 용어에 익숙하지 않은 경우 구글.) 스 SARGable 있습니까?

자물쇠가 있습니까?

이것들을 살펴 보는 많은 다른 것들이 단지 출발점 일뿐입니다.

+0

좋고 간결한 제안. –

3

ASP.NET에서 잘 동작하는 또 다른 .NET 프로필러는 dotTrace입니다.나는 그것을 개인적으로 사용했고 코드에서 많은 병목 현상을 발견했다.

1

I 조정하려는 특정 쿼리 또는 저장 프로 시저가 있다면, 나는 매우 유용 할 쿼리하기 전에 통계를 켜기 발견 :

SET STATISTICS TIME ON 
SET STATISTICS IO ON 

당신이 통계 쿼리 분석기에서 통계를 켭니다 결과 창의 메시지 탭에 표시됩니다.

IO 통계는 인덱스가 필요할 수도 있다는 것을 알려주기 때문에 특히 유용합니다. IO 통계에서 높은 읽기 수를 볼 경우 영향을받는 테이블에 다른 인덱스를 추가 할 수 있습니다. 인덱스를 시도 할 때 쿼리를 다시 실행하여 읽기 횟수가 감소했는지 확인합니다. 몇 차례 반복 한 후에는 일반적으로 관련 테이블에 대한 최상의 인덱스를 찾을 수 있습니다.

SET STATISTICS TIME

SET STATISTICS IO