2009-11-30 9 views
1

JMeter를 사용하여 웹 응용 프로그램을 테스트합니다. 내 테스트 사례는 데이터베이스에 레코드를 추가하는 것입니다. 그리고 "thread user의 수"를 20으로 설정하면 동시에 20 명의 사용자가 작업하는 것을 시뮬레이션한다는 것을 의미합니다. 그리고 나서 테스트 케이스를 실행합니다. 하지만 마침내 나는 시스템이 데이터베이스에 20 개의 레코드를 생성하지 않고 대신 데이터베이스에 13 개의 레코드를 생성한다는 사실을 알게되었습니다.데이터베이스에 10 개의 레코드가없는 이유는 무엇입니까?

왜 이런 일이 발생했는지 알고 싶습니다. 내 웹 응용 프로그램에서 레코드 추가 메서드 앞에 "synchronized"를 추가하지 않았기 때문에 가능합니까? 나는 두 사람이 동시에 서버에 레코드를 만들 요청을 게시하는 경우 linq를 사용했습니다. 어떻게됩니까? 그냥 레코드를 만들거나 두 레코드를 성공적으로 만들 수 있습니까?

은 다음 데이터베이스에 레코드를 생성하기위한 샘플 코드입니다 :

 public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish) 
    { 
     try 
     { 
      Entities.EventGroup db; 
      if (id == 0) 
      { 
       db = new Entities.EventGroup(); 
       db.CreatedBy = e.CreatedBy; 
       db.CreateDatetime = DateTime.Now; 
       db.Status = true; 
      } 
      else 
      { 
       db = this.GetEventGroup(id); 
      } 

      db.NameCN = e.NameCN; 
      db.NameEN = e.NameEN; 
      db.NameZH = e.NameZH; 
      db.NamePT = e.NamePT; 
      db.DisplayOrder = GetGroupMaxDisplayOrder() + 1; 

      if (setpublish == null) 
      { 
       db.PublishStatus = false; 
       db.PublishDatetime = null; 
       db.UpdateDatetime = DateTime.Now; 
       db.UpdatedBy = e.UpdatedBy; 
      } 

      if (id == 0) 
       dataContext.AddToEventGroupSet(db); 

      dataContext.SaveChanges(); 

      return db.Id; 
     } 
     catch (Exception ex) 
     { 
      log.Error(ex.Message, ex); 
      throw ex; 
     } 
    } 
+0

데이터를 데이터베이스에 삽입 할 때 실행되는 SQL 문을 게시 할 수 있습니까? –

+1

다른 드라이브 바이 게시. Helloooo, MemoryLeak. SQL 게시! –

+0

아니요, 저는 Linq 만 사용합니다. SQL이 없습니다! – MemoryLeak

답변

0

데이터베이스 자체는 ACID 준수되어야한다, 그래서 그것을 동기화에 관해서 문제가 데이터베이스와 의심. 새 레코드를 삽입하고 해당 레코드가 자동 증가 정수와 같은 키를 입력하면 새 레코드를 삽입하는 대신 해당 ID로 업데이트하도록 지시하지 않으면 데이터베이스가 해당 레코드를 스톰하지 않습니다. 그러나 당신이 SQL을 작성하지 않기 때문에 누가 데이터베이스에 지시하는지 정확히 알 수 있습니다.

방정식에서 linq을 제거하고 수동으로 작성하는 것이 좋습니다. 당신이 테스트하고있는 것은 매우 간단한 "upsert"작업 인 것처럼 보입니다.

+0

그래, 내가 수동으로 이러한 테스트 케이스를 운영한다면, 모든 것은 OK이고, 이것에 대한 해결책을 찾고 싶다. – MemoryLeak

+0

당신은 sql teh linq 비트가 생성되는 것을 볼 필요가있는 것처럼 들린다 – Messy

+0

OK, 시험 – MemoryLeak