2012-01-11 3 views
2

나는 그들에 "커밋"을 가지고 느린 쿼리 로그에 항목이 많이 있지만, 그들은 천천히하지만 끔찍한에 비해 약 3 초 걸립니다 다른 쿼리들."커밋"레일 응용 프로그램과 MySQL의 느린 쿼리 로그 2.3.5

항목은 다음과 같이 :

COMMIT; 
# Time: 120111 14:11:05 
# [email protected]: root[root] @ localhost [] 
# Query_time: 3.140228 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 
SET timestamp=1326291065; 
COMMIT; 
# Time: 120111 14:14:03 
# [email protected]: root[root] @ localhost [] 
# Query_time: 2.036250 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 
SET timestamp=1326291243; 
COMMIT; 

내 질문은 왜 레일이가 "COMMIT"발행 할 것입니까?

트랜잭션을 수동으로 수행하지 않는 한 내 이해는 자동 커밋을 사용해야합니다.

답변

0

많은 경우에 트랜잭션을 수행하는 레일은입니다.

예를 들어 중첩 모델 (많은 의견이있는 주제와 같은)으로 레코드를 저장하면 레일스는 트랜잭션 에 업데이트 (1 개의 주제와 n 개의 주석)를 래핑하여 데이터베이스의 일관성을 유지합니다..

즉시 당신이 거래를해야합니다 데이터베이스를 변경하는 서로 연결된 두 개 이상의 쿼리를 가지고 있지만,이 레일은가/시작도 하나의 쿼리에 커밋 수행하는 것이 보인다

편집. 나는 쓸모없는 auto-commit activation/deactivation을 피하기 위해 이런 식으로 설계되었다고 생각한다.

+0

흥미 롭군요. 내 레일 로그를 보면, 중첩 된 저장을하지 않더라도 레일스가 자동 커밋을 사용하지 않을 때조차도 다음 COMMIT을 많이 보았습니다. 필자는 어딘가에서 문서를 읽었을 것입니다. 틀렸어 .. – Joelio

+0

내가 로그를 확인했는데 네 말이 맞아, 레일즈는 데이터베이스를 변경하는 모든 쿼리에서 트랜잭션을 수행한다. 나는 그 대답을 끝냈다. – basgys

관련 문제