2011-10-10 5 views
0

모든 메소드를 Spring AOP 기반 선언적 트랜잭션 관리를 사용하여 트랜잭션으로 정의 할 때 성능상의 불이익이 있습니까? 아래 설정을 참조하십시오. 그 이유는 개발자가 비 트랜잭션 방식을 위해 제공 할 메소드 이름을 모른다. 하나의 옵션은 와일드 카드 목록으로 시작하고 메서드 이름이 정의 된 목록에 속하지 않으면 개발자가 목록을 업데이트합니다.트랜잭션에서 읽기 전용 쿼리를 실행하면 성능이 저하됩니까?

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="*" /> 
    </tx:attributes> 
</tx:advice> 

<aop:config> 
    <aop:pointcut id="dtxops" expression="bean(*Service)" /> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="dtxops" /> 
</aop:config> 
+0

http://stackoverflow.com/questions/818074/transactions-for-read-only-db-access – hvgotcodes

답변

1

사용중인 기본 트랜잭션 관리자에 따라 다릅니다. 기본 스프링 "쓰레드 당 트랜잭션, XA 트랜잭션 없음"은 아마도 페널티가 없을 것입니다. XA 트랜잭션 관리자로 JBoss를 사용하고 있다면 트랜잭션 로그에 일부 데이터를 씁니다.

- 원본 - 그럼에도 불구하고 성능 저하가 상당히 적을 것으로 생각됩니다.

- 편집 - 내 경험상 JBoss 트랜잭션 관리자를 사용하여 Readonly로 변환 할 때 성능이 크게 향상되는 것을 보지 못했습니다. 아래 의견에 따르면 적어도 한 명의 사용자가 30 %의 성능 향상을 보았습니다.

+0

먼저 반사 식 메소드 호출과 트랜잭션 개시를 추가하는 것은 이유가 없으므로 리소스 (따라서 성능) 낭비. 그리고 더 나아가, 이것이 추가하는 모든 것이 로그 엔트리 일지라도 (그것보다 더 많은 일을한다고 가정하지만), 그것들은 여전히 ​​앱을 다운시킬 수 있습니다. 과도한 로깅이 제거되면 30 %의 성능 향상을 보았습니다. 따라서이 시나리오에서 "성능 저하는 상당히 적습니다"라고 생각하지 않습니다. –

+0

JBoss의 Readonly 로의 변경이 프로파일 러에서 상당히 눈에 띄었지만 데이터베이스 IO 및 CPU 집중 로직과 비교할 때 여전히 유용했습니다 작은. 그래서 제 경우에는 30 %의 성능 향상을 보지 못했습니다. – Dave

1

이론적으로 AOP (따라서 내성/반사) 오버 헤드를 추가하는 것보다 성능상의 문제가 있습니다. 또한 필요한 것보다 많은 트랜잭션을 열고 닫을 때 추가되는 오버 헤드가 있습니다. 트랜잭션이 IMHO로 시작되어야 하는지를 알기 위해서는 데이터 액세스 계층을 코딩하는 개발자가해야합니다.

관련 문제