Przetwarzanie transakcyjne dziś

Gdyby operacje odczytu/zapisu z dysku dotyczyły sekwencyjnych sektorów na powierzchni dysku, to można by ich dokonywać z szybkością do ok. 5 MB/s. Tymczasem jedna transakcja czyta dane z jednej części dysku, inna z innej części itd. Wymaga to nieustannego ruchu głowicy, co pochłania najwięcej czasu: typowy czas wykonania jednej operacji wejścia/wyjścia z dysku wynosi od 10 do 30 ms. Oznacza to, że typowy dysk może odczytać (zapisać) nie więcej niż od 30 do 100 stronic z danymi w ciągu sekundy, czyli wykonać od 30 do 100 elementarnych operacji we/wy na sekundę. Jeżeli jedna czytana strona ma rozmiar 8 kB, to szybkość odczytu spada z 800 do 240 kB/s.

Z punktu widzenia wydajności transakcyjnej lepiej jest więc użyć 9 dysków po 1 GB niż 1 dysku 9 GB, zwłaszcza jeśli będą one obsługiwane przez wydajny system SCSI.

Wymagania pamięciowe. Istnieją dwa podstawowe typy serwerów baz danych: pierwszy do obsługi każdego użytkownika uruchamia oddzielny proces systemowy, wymagający ok. 0,5 MB pamięci RAM; procesy są obsługiwane przez system operacyjny, co zajmuje więcej czasu, ale pozwala na optymalizację systemu w fazie projektowania. Drugi typ w tym samym celu uruchamia jedynie oddzielny wątek (thread) serwera bazy danych nie wymagający takich nakładów mocy obliczeniowej, jak proces i ok. 100 kB pamięci RAM na każdego aktywnego użytkownika.

Jeżeli pojemność pamięci operacyjnej jest za mała w stosunku do liczby aktywnych użytkowników, system korzysta z tzw. pamięci wirtualnej, zapisując zawartość części pamięci RAM na dysk, aby obsłużyć innych użytkowników. Wydajność systemu szybko spada, rośnie czas odpowiedzi i żadne strojenie systemu przez administratora nie pomoże - trzeba dodać pamięci.

Jednoczesność dostępu. Aby sprostać wymaganiom użytkowników, serwer bazy danych musi zapewniać maksymalną wydajność przy jednoczesnym obciążeniu pracą przez wielu użytkowników. Gdy jeden z użytkowników zapisuje dane do określonego wiersza bazy, inny może chcieć je odczytywać. Następuje konflikt interesów i pojawia się problem, które dane są ważne - przed operacją zapisu czy po niej? Problem zapewnienia jednoczesności dostępu do danych dla wielu użytkowników jest rozwiązywany w różny sposób, ale zawsze wiąże się z tzw. ziarnistością blokowania dostępu: do całej tabeli, strony lub pojedynczego wiersza bazy. Im mniejsza ziarnistość blokowania, tym obsługa wielu klientów jest sprawniejsza i tym większa wydajność transakcyjna. W systemach transakcyjnych nie można zapewnić wyłączności dostępu do danych żadnemu użytkownikowi na dłuższy okres; stąd ważne jest takie zaprojektowanie aplikacji, aby użytkownik nie mógł zablokować innym dostępu do danych.

Atomowość transakcji. Innym aspektem związanym z jednoczesnością dostępu jest zapewnienie tzw. atomowości transakcji. Oznacza ona, że każda transakcja, nawet wymagająca wielu kroków w procesie przetwarzania, jest traktowana jako niepodzielna całość - będzie wykonana w całości albo musi być cofnięta w całości. Na przykład przyjmowanie zamówienia od klienta może wymagać zapisania danych do wielu tabel: wprowadzenie jego adresu (jeśli to nowy klient), zmiana zawartości bazy magazynowej, wprowadzenie danych do tabeli kwitów przewozowych, zapisanie informacji do tabeli związanej z wysyłaniem faktury itd. Wszystkie te działania to jednostka pracy - przyjęcie zamówienia, mimo że składa się z wielu kroków.

Istnieją dwa rozwiązania tego problemu. Jedno polega na utrzymywaniu blokady odpowiednich tabel w używanych bazach danych do czasu zakończenia transakcji. Tzw. pesymistyczna blokada uniemożliwia innym użytkownikom dostęp do danych, zarówno dla zapisu, jak i odczytu. Jeżeli aplikacja użytkownika zablokuje zapis do używanych przez niego danych, to ma on pewność, że sięgając po nie kolejny raz uzyska ten sam wynik. Wiersze zablokowane przez jednego użytkownika mogą być pobierane do odczytu przez innego, ale nie mogą być przez niego modyfikowane. Wadą tego rozwiązania jest znaczne spowolnienie działania bazy w środowisku wielu użytkowników, często korzystających z tych samych danych. W przypadku tzw. blokady optymistycznej pozwala się na odczyt danych, nie zakłada się więc blokady na wiersze pobierane do odczytu.


TOP 200