Model ACID w MySQL

Model ACID w MySQL

Model ACID określa zbiór zasad projektowania baz danych dzięki którym znacząco wzrasta ich niezawodność. Jednym z elementów MySQL jest silnik baz danych InnoDB, który został zaprojektowany zgodnie z modelem ACID. Dzieki takiemu rozwiązaniu możliwe jest zachowanie spójności danych w przypadku awarii oprogramowania czy też platformy sprzętowej. Użycie modelu ACID zwalnia programistę z konieczności obsługi błędów spójności. W przypadku posiadania sprzętu o bardzo wysokiej niezawodności, niezawodnej aplikacji lub gdy dopuszcza się możliwość powstawania niewielkich ilości niespójnych danych można zrezygnować z niektórych elementów ACID w zamian za zwiększenie wydajności czy też przepustowości bazy danych.

Skrót ACID oznacza:

  • A: atomowość/niepodzielność (ang. atomicity)

Niepodzielność transakcji oznacza jej wykonanie jako całości. Gdy transakcja powoduje wiele zmian w bazie danych możliwe są jedynie dwie sytuacje:
– wszystkie zmiany zostaną wykonane gdy transakcja zostanie zatwierdzona (instrukcja COMMIT)
– wszystkie zmiany zostaną wycofane (instrukcja ROLLBACK)

  • C: spójność (ang. consistency)

Izolacja oznacza zachowanie spójności bazy przez cały czas.
Zmiana stanu bazy może dokonać się jedynie za pomocą instrukcji COMMIT lub ROLLBACK. Jeśli w danej chwili jakaś transakcja zmienia dane w jednej
lub kilku tabelach inne działające w tym samym czasie transakcje zobaczą wszystkie nie zaktualizowane dane lub wszystkie nowe dane a nie zaś
mieszankę nowych i starych danych.

  • I: izolacja (ang. isolation)

Transakcje są zabezpieczone (odizolowane od siebie). Oznacza to, że podczas dziania nie mogą kolidować ze sobą lub zobaczyć nawzajem
niezatwierdzonych danych. Każda transakcja widzi bazę tak jakby była jedyną wykonywaną w danym czasie.
Izolacja jest osiągana za pomocą blokad. Zaawansowani użytkownicy bazy danych mogą dostosować poziom izolacji,
zmniejszając je izolacji na rzecz zwiększenia wydajności i współbieżności.

  • D: trwałość (ang. durability)

Rezultat wykonania transakcji musi być trwały. Jeśli operacja COMMIT powiodła się, jej rezultaty nie mogą ulec zmianie w przypadku awarii
systemu baz danych.

A oto w jaki sposób MySQL w silniku InnoDB spełnia kryteria ACID:

Atomicity – atomowość/niepodzielność

Aspekt niepodzielności w modelu ACID dotyczy transakcji w InnoDB. W MySQL dotyczy to:

  • Autocommit setting – ustawienia trybu automatycznego zatwierdzania zmian
  • Instrukcji COMMIT
  • Instrukcji ROLLBACK
  • danych operacyjnych z tabel schematu INFORMATION_SCHEMA

Consistency – spójność

Spójność modelu ACID dotyczy głównie wewnętrznych operacji wykonywanych w InnoDB, które mają zapobiec awarii oprogramowania bazy danych. W MySQL dotyczy to:

  • podwójnego bufora zapisu w InnoDB (ang. InnoDB doublewrite buffer)
  • procedury podnoszenia InnoDB po awarii

Isolation – izolacja

Aspekt izolacji w modelu ACID dotyczy tranzakcji w InnoDB a w szczególności poziomu izolacji poszczególnych transakcji. W MySQL dotyczy to:

  • Autocommit setting – ustawienia trybu automatycznego zatwierdzania zmian
  • Instrukcji SET ISOLATION LEVEL
  • Szczegółów niskopoziomowego blokowania obiektów transakcji w InnoDB. Podczas dostrajania wydajności bazy danych można je zobaczyć w tabelach INFORMATION_SCHEMA.

Durability – trwałość

Aspekt trwałości w modelu ACID w MySQL dotyczy funkcji oprogramowania współpracującego bezpośrednio z konfiguracją sprzętową. Ze względu na istnienie wielu zależności pomiędzy oprogramowaniem a możliwościami CPU, sieci oraz urządzeń pamięci masowej aspekt ten jest najbardziej skomplikowany. Między innymi dotyczy on:

  • InnoDB doublewrite buffer włączanego i wyłączanego poprzez ustawienia w innodb_doublewrite
  • Ustawień w innodb_flush_log_at_trx_commit
  • Ustawień w sync_binlog
  • Ustawień w innodb_file_per_table
  • Ustawień buforów w urządzeniach pamięci masowej, takich jak dyski sieciowe, SSD czy tez macierzy RAID.
  • Podtrzymywanego bateryjne bufora urządzenia pamięci masowej
  • Systemu operacyjnego użytego do uruchomienia MySQL a w szczególności wspierania przez niego funkcji systemowej fsync().
  • Systemów bezprzerwowego podtrzymywania zasilania komputerów i urządzeń pamięci masowej na których uruchomione jest oprogramowania MySQL i które przechowują dane.
  • Dla aplikacji rozproszonych i utrzymywanych różnych centrach przetwarzania danych zapewnienia nieprzerwanego połączenia pomiędzy nimi.
  • Strategii tworzenia kopii bezpieczeństwa.

 

Bibliografia

  • http://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html – manual MySQL
  • Lech Banachowski, Krzysztof Stencel, Systemy zarządzania bazami danych, Wyd. PJWSTK, 2007
Both comments and pings are currently closed.