Mam proces importowania, który przebiega tak często i chcę, aby była to transakcja typu „wszystko albo nic”, czyli transakcja.
Istnieje wiele aspektów, a import może przynieść wyniki w przedziale od 100 tys. Odpowiada to ładowności od kilku MB do kilkuset MB danych.
Wiem, że tabele tymczasowe są inną opcją - ale ta metoda wydaje się bardzo przydatna.
Czy są jakieś zastrzeżenia, które należy brać pod uwagę w związku z tego rodzaju praktyką z dużą ilością manipulacji danymi między zatwierdzeniami? (Poza typową serią obciążenia zapisu / indeksowania po zatwierdzeniu)
mysql
innodb
mysql-5.5
transaction
cienki lód
źródło
źródło
Odpowiedzi:
Jednym z wąskich gardeł, o których należy pamiętać, jest bufor dziennika InnoDB. Rozmiar jest ustawiany przez innodb_log_buffer_size . Oto, co mówi o tym Dokumentacja MySQL:
Bufora dziennika InnoDB nie należy mylić z pulą buforów InnoDB. Główną różnicą między nimi jest ich cel. Bufor dziennika InnoDB zasadniczo rejestruje zmiany krótkoterminowe, które są zapisywane w dziennikach ponawiania (ib_logfile0, ib_logfile1). Pula buforów InnoDB (rozmiar według innodb_buffer_pool_size ) buforuje dane i strony indeksowe, które mają zostać zatwierdzone (jeśli strony są brudne) i ostatecznie zapisane na dysk. Po zatwierdzeniu strony zmian pozostają w pamięci RAM, dopóki nie zostaną usunięte za pomocą reguł LRU.
Duże transakcje muszą przechodzić przez bufor dziennika. Jak wspomniano, większy bufor dziennika zmniejszy dyskowe operacje we / wy. Tylko duże zatwierdzenie stanowiłoby wąskie gardło.
Możesz zajrzeć do innych opcji InnoDB do skonfigurowania.
Mam inne posty na temat optymalizacji InnoDB do dalszych badań
źródło