sync – standardowe wywołanie systemowe w systemie Unix powodujące zapisanie na dysku danych znajdujących się w buforze systemu operacyjnego. Pokrewne do sync wywołanie fsync() powoduje zapis na dysk danych powiązanych z danym deskryptorem pliku. fdatasync() powoduje z kolei zapis jedynie danych znajdujących się w pliku, nie zawsze połączonych z odpowiednimi metadanymi[1]. aio_fsync() jest trzecią funkcją dostępną w systemach POSIX umożliwiającą zapisanie danych, tym razem w sposób asynchroniczny[2].

Bazy danych edytuj

W celu zapewnienia odpowiedniego poziomu trwałości danych bazy danych muszą korzystać z jednej z wersji wywołania sync. Dane przechowywane w buforach opartych na pamięci RAM mogą zostać utracone w wypadku awarii zasilania dlatego konieczny jest ich zapis w pamięci trwałej. Przykładowo, PostgreSQL może używać różnorodnych wywołań systemowych, m.in. fsync(), fdatasync(), czy też open() w zależności m.in. od platformy i potrzeb danego systemu[3]. Bazy danych używają często mechanizmu logów transakcji (na ogół znacząco mniejszych od głównych plików danych) przechowujących informacje o ostatnich zmianach w taki sposób, aby możliwe było odtworzenie zmian w wypadku awarii. To rozwiązanie pozwala na zmniejszenie obciążenia systemu związanego z częstym zapisem głównych danych do fizycznej pamięci masowej.

Kontrowersje edytuj

Dyski twarde często zawierają własne, niewielkie bufory z opóźnionym zapisem, które znacznie poprawiają wydajność, jednocześnie stanowiąc poważne zagrożenie utraty danych. Okazało się, że wywołania fsync służące do zagwarantowania integralności osadzonej bazy danych sqlite był przyczyną małej wydajności przeglądarki Firefox 3.0.[4]. fsync nie zawsze jest w stanie poprawnie obsłużyć operacje na plikach takie jak: tworzenie, zmianę nazwy czy tworzenie dowiązań do pliku co może stanowić kolejny powód utraty danych[2].

Przypisy edytuj

  1. The IEEE and The Open Group: fdatasync. [dostęp 2013-12-21]. (ang.).
  2. a b Necessary step(s) to synchronize filename operations on disk. [dostęp 2013-12-21]. (ang.).
  3. Write Ahead Log. [dostęp 2013-12-20]. (ang.).
  4. fsyncers and curveballs. [dostęp 2013-12-20]. (ang.).