0

asp.net mvc 및 ef6으로 개발 된 시스템이 있습니다. 일부 데이터베이스 트랜잭션이 있습니다. 우리는 40-50 행의 데이터를 업데이트하고 추가합니다.이 모든 업데이트가 수행하거나 것도 전혀 우리는 이러한 데이터를 분리하려는 때문에 엔티티 프레임 워크 성능 Azure

우리가 내 로컬 컴퓨터에있는 Entity Framework transactions

을 사용하여, 그것을 업데이트 이와 유사한 거래를 방지하기 위해 업데이트하는 동안, 그것은 1로 약 500 밀리 복용했다 둘째, 테스트를 위해 푸른 색으로 배포했습니다. 처음에는 1-2 초가 걸렸습니다. 그런 다음 우리는 라이브 시스템 용으로 배포했습니다. 약 200 명의 사용자가 시스템 작업을 시작했으며 기능은 약 15-20 초 정도 소요되었습니다. nds!는 매우 이상합니다. 왜냐하면 시스템 전체가 빠르며 안정적이기 때문에 우리가 많이 사용해야하는이 함수에 도달 할 때까지는 함수가 느려지고 격리로 인해 다른 프로세스도 느려지고 있습니다. . 우리는 많은 변화를 시도했지만 실제로 도움이되는 것은 아니 었습니다. 격리 수준을 스냅 샷으로 변경하면 트랜잭션이 발생하더라도 다른 프로세스를 원활하게하는 데 도움이되었지만 트랜잭션 자체는 여전히 느립니다. 나는 코드를 여러 번 통과했고 나에게는 괜찮아 보인다. 나는 다른 트랜잭션이 데이터를 잠그고 있다고 생각하여 데이터를 잠그고 있다고 생각했지만 한 번에 잠금이 전혀없고 한 번에 17 초가 걸렸으며 다른 트랜잭션으로 인해 데이터가 잠겨 있지 않은 것으로 확신합니다.

내 질문에이 문제가 발생하는 이유는 코딩 문제 일 수 있으며이 문제가 너무 심각하거나 EF 또는 Azure 문제입니다 (문제가 될 가능성은 낮습니다. 이것 만이 영원히 걸리고있다)?

어떤 신체가 대규모 EF 거래를 시도했는데 동일한 문제가 있었습니까?

누군가가 정말 도움이된다면,이 모든 것을 읽어 주셔서 감사합니다.

내 접근

using (var transactionDBContext = new Entities(false, false, true)) 
      { 

       using (var context = transactionDBContext.Database.BeginTransaction(IsolationLevel.Snapshot)) 
       { 
        try 
        { 
         // inititate, 
         funcProcesser = new Functions(transactionDBContext, context); 

         #region Validation 
      // a lot of validation   
      #endregion 
      var response = funcProcesser.ProcessTransaction(data); 
      transactionDBContext.savechanges(); 
      context.commit(); 
        } 
        catch (Exception e) 
        { 
         context.Rollback(); 
         context.Dispose(); 

         throw e; 
        } 
       } 

우리가 푸른 S3를 사용하고 우리의 데이터베이스는 표준 DS12의 V2는 (4 개 VCPU에, 28기가바이트 메모리) 현재 사용자 수와 시스템에 매우 충분하다.

+0

죄송 합니다만, 어리석은 질문입니다 ...하지만 ... 모든 요청에 ​​대해 DBContext를 만들고, 사용하고, 처리합니까? 또는 한 번만 생성하고 다음 요청에 대해 동일한 인스턴스를 계속 사용합니까? –

+0

당연히 나는 항상 새로운 인스턴스와 새로운 트랜잭션을 사용하며 커밋시 폐기됩니다 – Munzer

+0

가능하다면 관련 소스 코드를 게시 할 수 있습니까? –

답변

0

ORM은 개발자의 삶을 편하게하기위한 것으로 성능면에서 항상 최선의 것은 아닙니다. 나는 당신의 장소에서 인라인 sql을 사용했을 것입니다. 왜냐하면 푸른 하늘 때문에 리모콘과 대역폭 때문에 제한이 느립니다.

이 질문은 프레임 워크에서 만든 _transaction 테이블이 계속 커지고 전체 시스템이 느려지는 시나리오 중 하나를 설명합니다. 이 사건의 경우

EF6, Slow Azure Sql Writes, TransactionHandler

을 참조하십시오.

+0

안녕하세요, 귀하의 답변 주셔서 감사합니다하지만 그런 테이블이 만들어지지 않았기 때문에 문제가되지 않았습니다. 나는 ORM이 최고의 성능은 아니지만 20 배 느린 이미지를 만들지는 않았다는 것을 알고 있습니다. 틀린 것이 틀림 없다. – Munzer