Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak izolacja na poziomie transakcji wpływa na wydajność w trybie automatycznego zatwierdzania w MySQL?

TL; DR:Jeśli twoje forum działa wolno, POZIOM IZOLACJI TRANSAKCJI najprawdopodobniej nie jest tego przyczyną, a ustawienie go na coś innego niż domyślny raczej nie pomoże. Ustawienie innodb_flush_log_on_trx_commit =2 pomoże, ale ma konsekwencje dla trwałości w przypadku awarii.

Długa wersja:

Jaki POZIOM IZOLACJI TRANSAKCJI napisałem w http:/ /mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html . Sprawdź wszystkie 3 artykuły przeglądowe InnoDB w http://mysqldump.azundris.com/categories/32 -InnoDB .

Skutkiem tego jest to, że w każdym przypadku system musi być w stanie wycofać, więc nawet READ UNCOMMITTED nie zmienia niczego, co należy zrobić przy zapisie.

W przypadku transakcji odczytu odczyt jest wolniejszy, gdy łańcuch cofania rekordów dziennika prowadzący do widoku transakcji odczytu jest dłuższy, więc READ UNCOMMITTED lub READ COMMITTED może być nieco szybszy niż domyślny ODCZYT POWTARZALNY. Musisz jednak pamiętać, że mówimy tutaj o dostępie do pamięci i to dostęp do dysku Cię spowalnia.

W kwestii AUTOCOMMIT:To zsynchronizuje każdą pojedynczą instrukcję zapisu na dysk. Jeśli używałeś już MyISAM i to było wystarczająco dobre, możesz skonfigurować

[mysqld]
innodb_flush_log_on_trx_commit = 2

w pliku my.cnf i zrestartuj serwer.

Spowoduje to, że zatwierdzenie zostanie zapisane z mysqld do bufora bufora systemu plików, ale opóźni opróżnienie bufora bufora systemu plików na dysk, tak że dzieje się to tylko raz na sekundę. Nie stracisz żadnych danych w przypadku awarii mysqld, ale możesz stracić do 1s zapisów w przypadku awarii sprzętu. InnoDB przywróci się automatycznie, nawet po awarii sprzętu, a zachowanie jest nadal lepsze niż w przypadku MyISAM wcześniej, nawet jeśli nie jest to pełny ACID. Bez tego ustawienia będzie znacznie szybszy niż AUTOCOMMIT.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie współrzędnych typu punktu MySQL

  2. Jak używać bazy danych jako kopii zapasowej/awaryjnej w hibernacji?

  3. Dlaczego SQLAlchemy wykonuje aktualizację nie działa?

  4. Zapytanie przestawne MySQL

  5. Błąd:Fill:Właściwość SelectCommand.Connection nie została zainicjowana.