2010-12-13 10 views
5

Czytałem this post na blogu wydajności MySQL.Optymalizacja InnoDB - "używaj transakcji podczas robienia aktualizacji" - dlaczego?

Pod aplikacji strojenie mówi:

Najpierw upewnij się, że używasz transakcji podczas wykonywania aktualizacji

Jestem obecnie tylko z wykorzystaniem transakcji w miejscach, gdzie istnieje wiele wkładek lub aktualizacje w w tym samym czasie. to jest więcej niż jedna tabela.

Czy powinienem zatem zmienić co UPDATE, aby zmienić go w transakcję?

Jaka jest różnica pomiędzy:

prepare sql 
bind params 
commit 

oraz:

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

w kategoriach tego, co dzieje się na poziomie bazy danych, który sprawia, że ​​szybciej niż inne?

Odpowiedz

6

InnoDB działa domyślnie w trybie autouzupełniania. Oznacza to, że każde zapytanie działa w jego własnej transakcji i natychmiast zostaje zatwierdzone. W InnoDB oznacza to zapisywanie danych w dwóch miejscach na dysku (nie pytaj mnie o szczegóły - piszę z pamięci, co przeczytałem raz na blogu MySQL Performance Blog);)).

Teraz, jeśli wykonasz jedną aktualizację/wstaw/usuń naraz, nie ma zbyt dużej wydajności. Jeśli jednak wykonasz kilka kolejnych aktualizacji/wstawień/usunięć, możesz zaoszczędzić trochę czasu na dysku, łącząc je w transakcje, a następnie zatwierdzając wszystkie naraz.

+2

+1. Więcej analizy technicznej: istnieje bufor, który opóźnia zapisywanie w dzienniku (innodb_log_buffer_size), który należy przepłukiwać częściej, jeśli popełnisz błąd cały czas, co prowadzi do gorszej wydajności. Bufor jest również automatycznie płukany co 1 sekundę. –