문제

JMeter를 사용하여 웹 응용 프로그램을 테스트합니다. 내 테스트 사례는 데이터베이스에 레코드를 추가하는 것입니다. 그런 다음 "스레드 사용자 수"를 20으로 설정하면 20 명의 사용자가 동시에 작업을 시뮬레이션합니다. 그런 다음 테스트 케이스를 실행합니다. 그러나 마지막으로 시스템이 데이터베이스에서 20 개의 레코드를 생성하지 않고 데이터베이스에서 13 개의 레코드를 생성했습니다.

왜 이런 일이 일어 났는지 알고 싶어요? 내 웹 애플리케이션에서 ADD 레코드 방법 앞에서 "동기화 된"을 추가하지 않았기 때문에 가능합니까? 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;
        }
    }
도움이 되었습니까?

해결책

데이터베이스 자체는 산성을 준수해야하므로 동기화와 관련하여 데이터베이스에 문제가 있다고 의심합니다. 새 레코드를 삽입하고 해당 레코드가 자동 침입 정수와 같은 것으로 간주되는 경우, 새 레코드를 삽입하지 않고 해당 ID로 업데이트하라고 지시하지 않는 한 데이터베이스는이를 밟지 않을 것입니다. 그러나 데이터베이스에 무엇을 지시하고 있는지 알고있는 SQL을 작성하지 않기 때문에 데이터베이스에 무엇을 지시하는지 알고 있습니다.

방정식에서 LINQ를 제거하고 수동으로 작성하는 것이 좋습니다. 테스트중인 내용은 매우 간단한 "Upsert"작업으로 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top