2012-03-06 2 views
-1

NHibernate로 전환 한 후 다른 사람이 CPU 스파이크를 겪었습니까?Asp.net 업그레이드 후 NHibernate CPU 성능

약 2 년 전에 NHibernate로 전환했습니다. 그 이후로 우리는 60-80 근처의 CPU를 사용하여 서버를 실행하는 데 문제가있었습니다. 또한 메모리가 부족한 서버 문제도있었습니다.

Weve는 지속적으로 쿼리를 최적화하라는 메시지를 전했습니다. 우리는 제한된 성공만으로 그랬습니다. 최근에 NHibernate 2.1에서 3.2로 업그레이드 할 때까지는 CPU가 개선되는 것을 보았습니다. 그것은 평균 60 %에서 약 30 %로 떨어졌습니다. 나는 놀랐다. 나는 많은 사람들에게 NHibernate를 업그레이드하는 것이 제한된 개선만을 생산할 것이라는 전문가들의 의견을 들었다.

내 질문은 ... NHibernate와 CPU 스파이크를 눈치 채셨습니까? 그들은 주 버전 업그레이드를 한 후에 개선 된 것을 보았습니까? 그리고 마지막으로 왜 새 버전의 성능이 향상 되었습니까? 나는 NHibernate 3이 linq에 대한 더 나은 지원을하고 있고, 나의 쿼리의 약 70 %가 Linq을 사용하고 있다는 것을 알고있다. 그래서 나는 더 나은 performace를보고있는 이유의 일부일지도 모른다.

또한 누구나 내가 이미 완료 한 dll 업그레이드 이외의 더 나은 CPU 성능을 생산하는 NHibernate 낙천적 인 수있는 아이디어가 있습니다.

현재 NHibernate 3.2를 실행 중이며 유창한 NHibernate 1.2는 각각 2.1과 1.0에서 업그레이드되었습니다.

+0

DB와 웹 사이트가 동일한 서버에 있습니까? – Rippo

+0

또한이 SQL 서버입니까? – Rippo

+0

Windows Server 2003, 별도의 서버에있는 DB, SQL Server 2005. DB 서버는 비교적 안정적이며 CPU가 급증하지 않습니다. – matwonk

답변

3

내가 추천하려고하는 것과 똑같은 말을하는 것으로 의심되지만, 모든 가능성을 살펴보고 할인 할 것을 권합니다.

Weve consistently been told to optimize our query - 항상 ORM에 의해 생성 된 SQL 또는 DB가 쿼리를 실행하는 데 걸리는 시간이 의심됩니다. 이것은 건전한 조언이며 다음과 같은 방법을 사용하여이를 반증해야합니다.

먼저 일주일 동안 실행되는 실제 데이터베이스 서버에 trace을 설정합니다. 이 작업이 완료되면 인덱스 또는 SQL 관련 문제에 대한 제안을 얻을 수 있습니다.

둘째로 나는 내 개발 상자에서 NHProf을 실행하고, 많이 사용 된 페이지 나 NHibernate가있는 곳에서 무슨 일이 일어나는지 보려고 많은 데이터베이스 트립이있는 페이지들에 대한 스트레스 테스트를 실행했다. NHProf는 다음과 같은 다양한 문제에 대한 조언을 제공합니다. n + 1, 무제한 결과, 많은 수의 행 반환, 조인이 너무 많은 쿼리 등을 선택합니다.이 도구는 SQL Server와 코드 간 격차를 해소하는 데 매우 유용합니다.

이 연습을 마치면 특정 문제를 해결하고 캐싱을 소개하는 방법에 대한 아이디어를 얻을 수 있습니다. 주소가없는 항목이 있으면 NHUser 그룹에 게시 할 수있는 소중한 피드백을 줄 수 있습니다.

결국 수만명의 사용자가 NHibernate를 사용한다고 생각한다면. 몇 년 동안 NHibernate를 직접 사용해 왔고 NHusers 그룹에 가입했고 이전에 CPU 스파이크 문제를 보지 못했습니다. 항상 그 중 하나 인 것으로 밝혀졌습니다. 생성 된 SQL, 데이터베이스가 수압 상태 인 압력 또는 대형 레코드 집합 아래에 있음

+0

정보를 제공해 주셔서 감사합니다. 나는 프로파일 러와 SQL 추적을 점검 할 것이다. 우리가 호스팅하는 다른 서버에서 CPU 스파이크 문제가 발생하지 않았습니다.이 서버와 다른 서버 사이의 차이점은 다른 사이트에는 NHyrbinate를 사용하는 약 20 개의 사이트가 있다는 것입니다.이 사이트는 NHybrinate를 사용하는 약 510 개의 사이트를 가지고 있습니다 (모두 공유 코드를 사용합니다). 기본적으로 동일한 코드, 각 사이트마다 다른 디자인. – matwonk

+0

Rippo, 여러 Ajax 요청을 동시에 실행하는 중에 문제가 발생합니다. 이들 각각에 대해 생성 된 세션이 있습니다. 이 나쁜 습관인가? 그렇다면 솔루션을 추천 해 주시겠습니까? (나는 여기에 게시 된 질문을 가지고있다 : http://stackoverflow.com/questions/14615216/moving-from-ef-to-fluent-nhibernate-memory-leaks-architecture – Chazt3n

관련 문제