2013-03-27 2 views
1

linq을 사용하여 SQL 클래스에 사용자 정보를 가져 오는 방법이 있습니다. 이 메서드는 기존 저장된 procs를 호출하는 linq 문을 사용하여 세 개의 쿼리를 실행합니다. 여기에 어떻게 내 linq 문을 레이아웃 오전 예입니다.Linq to Sql TImeout 문제

  using (var db = new TestDataContext(connection))) 
      { 
       var user = db.proc_UserInfo(userId); 

       foreach (var x in user) 
       { 
        string FullName = x.FirstName + " " + x.LastName; 
        string Address = x.Addr1; 
        string City = x.City;       
       } 
      } 

이 메서드는 jquery ajax 요청에서 시작되는 웹 API 컨트롤러를 통해 호출됩니다. 그것은 잘 작동하지만 내가 급하게 DB에가는 쿼리의 일괄 처리가 취소 된 것처럼 보입니다 및 전화를 충분히 빨리 할 수있는 경우 아약스 요청을 만드는 사용자 전체 드롭 다운 목록을 급하게 변경하여 일부로드 할 때 다음 쿼리가 시간 초과되어 null 객체를 반환하면 몇 분 동안 일시 중지됩니다. 이러한 쿼리를 기록하는 것은 데이터를 반환하는 것이 아니라 몇 줄의 데이터를 반환하는 것입니다. 나는 아직도 무슨 일이 일어나고 있는지 알기 위해 노력하고 있으며 제안은 열려 있습니다. 미리 감사드립니다.

+1

수동으로 exexute 할 때 proc_UserInfo가 실행되기까지 얼마나 걸립니까? 그리고 실행 계획은 어떤가? 그것은 단지 몇 행을 반환 할 수 있습니다하지만 당신은 그 행을 얻기 위해 테이블을 쓰레기 아니에요? 또한 각 Ajax 요청으로 인해 IIS에 다른 작업자 스레드가 생성되어 sql 클라이언트 (SQL 서버라고 가정) 연결 풀을 질식시킬 수 있다고 생각하십시오. 또한 아약스 요청 바로 전에 드롭 다운 목록을 사용하지 않도록 설정하여 문제를 피할 수 있으며 아약스가 완료 될 때까지 다시 활성화하지 않아도됩니다. –

+0

내가 게시 한 이후로 감사드립니다. 다시 그것을 깨고 주사위를 끊어야합니다. 요청을 1 초 이내에 반환했습니다. 두 번째 예방책으로 드롭 다운을 비활성화하고 웹 서비스 테스트를로드 해 봅니다. Stephen에게 감사드립니다. – vikingben

답변

1

처음에는 사람들이 조금 더 많은 정보가 필요하다고 생각합니다. 데이터베이스 유형 SQL Server라고 가정하지만 아직 버전을 나열하지 않았습니다. 어쨌든 그것은 몇 가지 일 수 있습니다. AJAX 호출은 http 요청/게시로 실행되므로 IIS 시간 초과 또는 기타 다양한 IIS 제한이있을 수 있습니다. 또한 비동기 호출 등이 있습니다. Jquery에는 확인하려는 설정이 있습니다. 테이블 잠금은 SQL Server에서도 가능합니다. 또한 브라우저 램/w3wp 사용량을 확인하여 자원이 부족하지 않은지 확인하십시오.

먼저 SQL 프로파일 러를 실행하여 진행 상황을 확인한 다음 해당 쿼리의 실행 계획을 확인하는 것이 좋습니다. 많은 양의 데이터를 처리하는 경우 색인이 필요할 수 있습니다.

+0

Andrew에게 응답 해 주셔서 감사합니다. 우리는 SQL 2008 서버를 실행하고 있습니다. SQL 프로파일 러에 대한 제안에 감사 드리며 쿼리를 확인해야합니다. – vikingben