웹 팜에서 호스팅되는 MVC2 + Linq2SQL + MS SQL SERVER 2008로 작성된 웹 응용 프로그램이 있습니다. 아카 마이, 요청의 86 %를 감소 - 거의 stackoverflow.com웹 팜의 ASP.NET MVC2 - 트래픽이 많은 페이지로드가 느림
처럼 우리는 외부 캐시 공급자에 의해 캐시 MS NLB
정적 컨텐츠와 균형 4 × IIS7 + 1 SQL Server 2008의 부하를 가지고있다.
각 웹 서버에는 32GB의 RAM과 4 개의 쿼드 코어 CPU가 있으므로 프런트 엔드에 64 개의 코어가 있습니다.
세션 상태를 테이블에 저장합니다.
중간 트래픽 (페이지로드 = 0.2 초)으로 완벽하게 작동하지만 회사에서 TV 광고를 게재하며이 광고 중에 트래픽이 20-30 초 내에 최대 20,000 명의 사용자에게 노출됩니다.
이 순간 페이지가 8-10 초로 느려집니다. 그러나 CPU 사용량과 메모리 사용량은 모든 시스템에서 40 %까지 도달하지 못합니다.
데이터 센터의 대역폭이 한계 값의 절반에 도달하지 않습니다.
느린 페이지는 1-2 테이블에서만 최대 10 개 레코드의 간단한 SELECT에서 데이터를 생성합니다.
분명히 어딘가에 병목이있어 어디에 있는지 파악하려고합니다.
누구나 내게 문제를 찾을 수있는 조언이 있습니까?
이 테이블에서 너무 많은 SELECT가이 병목 현상을 일으키는 것으로 생각됩니다. WHERE 절을 기반으로 테이블에 적절한 인덱스 등이 있습니까? – Ankur
나는 Ankur에 동의한다. 과도한 양의 쿼리와 같은 소리가 데이터베이스에서 실행됩니다. 인덱스, ToList(), Any() 등의 사용법을 확인하십시오. 이것들은 모두 데이터베이스를 호출하는 함수입니다. 또한 DotTrace와 같은 도구를 사용하여 응용 프로그램을 프로파일하고 어떤 일이 발생하는지 볼 수 있습니다. – Rob
모든 PK 열에 클러스터 된 인덱스가 있으며 실행 계획을 완료했습니다. 추가 색인이 부족하여 이러한 병목 현상이 발생할 것이라고 나는 생각하지 않습니다. 그것은 확실히 도움이되지만 내가 얻을 수있는 작은 비율이 될 것입니다. 나는 큰 이득을 찾고있다. 그래서 나는 또한 SQL 서버 박스의 디스크 I/O에 대해 생각하고 디스크 I/O의 동시성을 향상시키기 위해 데이터베이스를 여러 개의 다른 디스크에있는 몇 개의 서로 다른 파일들로 분리했다. http://tinyurl.com/6xfxuso에서 다음과 같이 말합니다. –