2010-12-13 1 views
5

나는 MySQL 성능 블로그에서 this post을 읽었습니다. 응용 프로그램에서InnoDB 최적화 - "업데이트 할 때 트랜잭션 사용"- 이유는 무엇입니까?

조정은 말한다 :

먼저 내가 현재는 여러 삽입 또는 업데이트가있는 장소에서 트랜잭션을 사용하고 업데이트

을 수행 할 때 트랜잭션을 사용하고 있는지 확인 같은 시간. 즉 하나 이상의 테이블.

따라서 모든 UPDATE을 변경하여 거래로 변경해야합니까?

prepare sql 
bind params 
commit 

과 : 데이터베이스 수준에서 발생하는 측면에서

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

즉 한 쪽이 다른 쪽보다 더 빨리하게,

의 차이점은 무엇입니까?

답변

6

InnoDB는 기본적으로 자동 커밋 모드로 실행됩니다. 이것이 의미하는 바는 모든 쿼리가 자체 트랜잭션으로 실행되고 즉시 커미트됨을 의미합니다. InnoDB에서 이것은 디스크의 두 장소에 데이터를 쓰는 것을 의미합니다. (세부 사항은 묻지 않습니다. MySQL 성능 블로그에서 한번 읽은 것을 메모리에서 쓰고 있습니다)).

한 번에 하나의 업데이트/삽입/삭제를 수행하면 얻을 성능이별로 없습니다. 그러나 여러 번의 연속적인 업데이트/삽입/삭제를 수행하면 하드 디스크 시간을 트랜잭션에 번들로 묶어 한 번에 커밋하여 일부 하드 디스크 시간을 절약 할 수 있습니다.

+2

+1. 더 많은 기술적 인 분석 : 로그를 작성하는 것을 지연시키는 버퍼 (innodb_log_buffer_size)가 있습니다. 항상 커밋하면 더 자주 플러시되어야하기 때문에 성능이 저하됩니다. 버퍼는 1 초마다 자동으로 플러시됩니다. –