2012-02-14 7 views
4

우리의 응용 프로그램에서 모든 서비스 방법 주위에 DB 트랜잭션을 처리하는 데 오버 헤드가 추가됩니까?트랜잭션이 DB에 오버 헤드를 추가합니까?

현재 명시 적/명백한 필요성이있는 경우에만 DB 트랜잭션을 사용합니다. 최근에 모든 서비스 방법 주위에 거래 을 제안했지만 일부 개발자는 신중한 질문을했습니다. 이 오버 헤드가 추가됩니까?

내 감정이 아닙니다. 자동 커밋은 DB 관점의 트랜잭션과 같습니다. 그러나 이것이 정확합니까?

DB : MySQL의

답변

3

당신은 모든 문은 트랜잭션에 싸여 자동 커밋과 오른쪽입니다. 서비스 메소드가 여러 SQL 문을 실행중인 경우 트랜잭션으로 래핑하는 것이 좋습니다. 자세한 내용은 this 답변을 참조하십시오. here은 주제에 대한 좋은 블로그 게시물입니다.

귀하의 질문에 대답하기 위해 트랜잭션이 성능 오버 헤드를 추가하지만 특정 경우에는 자동 커밋이 활성화되어 있으므로 서비스 메서드에서 장기간 실행되는 문을 사용하지 않으면 차이가 발생하지 않습니다. 트랜잭션에 참여하는 테이블에서 더 긴 잠금. 트랜잭션 내에서 여러 개의 명령문을 래핑하는 경우, 각 명령문에 대한 트랜잭션 대신에 하나의 트랜잭션이 표시됩니다. here ("자동 커미트가 활성화 된 세션은 명시 적으로 시작하여 다중 명령문 트랜잭션을 수행 할 수 있습니다 START TRANSACTION 또는 BEGIN 문을 끝내고 COMMIT 또는 ROLLBACK 문으로 끝내십시오. ") 서비스 메서드 수준에서 원 자성을 실현할 수 있습니다.

결국 솔루션과 관련이 있습니다. 서비스 수준에서 원 자성을 달성하려는 관점 (달성하고자한다고 생각하는)이지만 쿼리 및 요청에 따라 성능에 + 및 - 영향이 있습니다.

0

예, 다음과 같이 할 수 있습니다. 오버 헤드를 추가하십시오. 서로 거래를 격리시키는 데 필요한 추가 "부기"가 중요 할 수 있습니다. 특히 거래가 오랜 기간 열려있는 경우에는 더욱 그렇습니다.

0

간단히 대답하면 테이블 유형에 따라 달라집니다. 기본값 인 MyISAM을 사용하고 있다면 실제로 거래가 없기 때문에 이어야 성능에 영향을 미치지 않습니다.

그러나 어쨌든을 사용해야합니다. 거래가 없다면 일의 경계가 없습니다. InnoDB 또는 PostgreSQL과 같은 실제 데이터베이스로 업그레이드하는 경우, 어쨌든 이러한 트랜잭션을 서비스 메소드에 추가하는 것이 좋을 것입니다. 따라서 비용이 들지 않으면서도 습관화 할 수 있습니다.

게다가 트랜잭션 저장소를 이미 사용해야합니다. 현재 서비스 방법이 실패하면 어떻게 정리합니까? 데이터베이스에 정보를 쓰고 서비스 메서드가 예외를 throw하면 불완전하거나 잘못된 정보를 어떻게 정리할 수 있습니까? 트랜잭션을 사용 중이라면 데이터베이스가 롤백 된 데이터를 버릴 필요가 없습니다. 또는 방법을 통해 중도에 있고 또 다른 요청이 들어 와서 내 절반 씩 작성된 데이터를 찾으면 무엇을합니까? 아직 다른 반쪽을 찾고있을 때 폭파 할 것인가? 트랜잭션 데이터 저장소가이를 처리합니다. 즉, 트랜잭션이 서로 격리되어 다른 사람이 부분적으로 작성된 트랜잭션을 볼 수 없습니다.

데이터베이스가있는 모든 것과 마찬가지로 현실적인 데이터와 실제로드로 테스트 한 결과가 유일한 답입니다. 데이터베이스에 관해서는 데이터가 클 때와 그렇지 않을 때 매우 다른 코드 경로가 활성화되기 때문에 항상 의심스러운 작업을 수행하는 것이 좋습니다. 그러나 InnoDB를 사용해도 트랜잭션을 사용하는 데 드는 비용은 크지 않다고 생각합니다. 결국, 이러한 시스템은 잘 수행되는 트랜잭션에 의존하는 크고 작은 조직에 의해 매일 매일 지속적으로 많이 사용됩니다. MVCC는 오버 헤드를 거의 추가하지 않습니다. 혜택은 광대하며, 비용은 저렴합니다.

+0

우리는 InnoDB를 사용하고 있으며, 논쟁은 나에게 손실되지 않습니다. 성능상의 문제가 발생하지 않는다는 증거를 찾아야합니다. 어쩌면 테스트 할 수도 있습니다 (하지만 많은 작업이 필요합니다). 나는 이미 그 문제를 해결할 시간을 이미 보냈던 누군가로부터 좋은 기사 나 블로그를 선호한다. –

+0

내가 말했듯이, 당신이 의지해야 할 유일한 증거는 당신의 실험적 증거입니다. –

관련 문제