| Termin | Definicja |
|---|---|
| Memory-Optimized Table | Memory-Optimized Table to tabela przechowywana w pamięci operacyjnej, obsługiwana bez klasycznych blokad. Memory-Optimized Table w SQL ServerMemory-Optimized Table to konkretny mechanizm silnika Microsoft SQL Server dostępny w technologii In-Memory OLTP. Wiersze takiej tabeli są przechowywane w pamięci operacyjnej, a silnik stosuje specjalne struktury danych i indeksy zamiast klasycznego układu stron danych używanego przez zwykłe tabele dyskowe. Tabela nie jest jednak wyłącznie nietrwałym buforem. W zależności od ustawienia może również zapisywać dane w plikach kontrolowanych przez SQL Server, aby odtworzyć zawartość po ponownym uruchomieniu usługi. Tabelę tworzy się w konkretnej bazie SQL Server, używając klauzuli Trwałość danych i wymagania bazyParametr Memory-Optimized Table wymaga skonfigurowanej grupy plików zoptymalizowanej pod kątem pamięci. Przykładowo bazę można rozszerzyć o plik z opcją Współbieżność, indeksy i ograniczenia T-SQLMechanizm In-Memory OLTP ogranicza użycie tradycyjnych blokad w czasie dostępu do wierszy, wykorzystując kontrolę współbieżności opartą na wersjonowaniu i optymistycznym rozwiązywaniu konfliktów. Nie należy jednak opisywać tego jako całkowitego braku blokad. Nadal mogą wystąpić konflikty transakcji, oczekiwanie na zatwierdzenie oraz blokady dotyczące metadanych lub schematu. Przy konflikcie aktualizacji transakcja może zakończyć się błędem i wymagać ponowienia przez aplikację. Projekt rozwiązania powinien więc uwzględniać obsługę błędów transakcyjnych, a nie tylko przenieść dane do pamięci. Indeksy definiuje się już podczas tworzenia tabeli albo zgodnie z możliwościami konkretnej wersji SQL Server. Indeks Diagnostyka wydajności i bezpieczne użycieOcena Memory-Optimized Table powinna obejmować rzeczywiste obciążenie, a nie tylko czas pojedynczego zapytania uruchomionego testowo. W SQL Server można analizować metadane tabel i indeksów, plany wykonywania oraz statystyki oczekiwań i konfliktów transakcyjnych. Warto porównać liczbę operacji odczytu i zapisu, rozkład wartości klucza, częstotliwość aktualizacji tych samych wierszy oraz zużycie pamięci przez bazę. Szczególnie istotne jest sprawdzenie, czy indeks odpowiada predykatom używanym przez aplikację. Tabela trzymana w pamięci może działać gorzej od tabeli dyskowej, jeżeli ma niewłaściwy indeks, niekorzystny rozmiar kubełków albo otrzymuje zapytania wymagające nieobsługiwanych przekształceń. Przed zastosowaniem tego mechanizmu należy oszacować ilość pamięci potrzebnej na wiersze, indeksy oraz wersje danych powstające podczas współbieżnych transakcji. Trwała tabela wymaga również poprawnie skonfigurowanej grupy plików i procedur kopii zapasowych obejmujących bazę SQL Server. Diagnostyka problemu powinna rozdzielać błędy definicji obiektu, brak zasobów pamięci, konflikty transakcji, niezgodność zapytania z ograniczeniami In-Memory OLTP oraz zwykłe problemy aplikacji, takie jak nieprawidłowe parametry lub zbyt długie transakcje. Przy każdej zmianie wskazane jest wykonanie testu odtworzeniowego i porównanie zachowania z poprzednią tabelą dyskową. |