Wprowadzenie do tablic zoptymalizowanych pod pamięć
Tabele zoptymalizowane pod pamięć to tabele tworzone za pomocą CREATE TABLE (Transact-SQL).
Domyślnie tabele zoptymalizowane pod pamięć są w pełni trwałe. Podobnie jak transakcje na (tradycyjnych) tablicach dyskowych, transakcje na tablicach zoptymalizowanych pod pamięć są w pełni atomowe, spójne, izolowane i trwałe (ACID). Tabele zoptymalizowane pod pamięć oraz natywnie kompilowane procedury przechowywane obsługują jedynie podzbiór funkcji Transact-SQL.
Od SQL Server 2016 oraz Azure SQL Database nie ma ograniczeń dotyczących specyficznej dla pamięci sortacji OLTP lub stron kodu.
Pamięć podstawowa tabeli zoptymalizowanej pod pamięć jest pamięcią podstawową. Czytaj wiersze z tabeli z pamięci i zapisuj je w pamięci. Kolejna kopia danych tabeli jest przechowywana na dysku, ale tylko w celach trwałości. Więcej informacji o tabelach trwałych można znaleźć w artykule Tworzenie i zarządzanie pamięcią obiektów do optymalizacji pamięci. Dane w tabelach zoptymalizowanych pod pamięć są odczytywane z dysku tylko podczas odzyskiwania bazy danych (na przykład po ponownym uruchomieniu serwera).
Dla większych osiągnięć wydajności, OLTP w pamięci obsługuje tabele trwałe z transakcyjnym trwałym opóźnieniem. Opóźnione, trwałe transakcje są zapisywane na dysku krótko po dokonaniu transakcji i powrocie kontroli do klienta. W zamian za poprawę wydajności, zadeklarowane transakcje, które nie są zapisywane na dysku, są tracone w przypadku awarii serwera lub awarii.
Oprócz domyślnych tabel zoptymalizowanych pod pamięć trwałą, SQL Server obsługuje niezapisane, nietrwałe tabele zoptymalizowane pod pamięć, a ich dane nie są przechowywane na dysku. Oznacza to, że transakcje na tych tabelach nie wymagają żadnego wyjścia z dysków, ale jeśli dojdzie do awarii serwera lub przełączenia awaryjnego, dane zostają utracone.
OLTP w pamięci integruje się z SQL Server, zapewniając płynne doświadczenie we wszystkich aspektach, takich jak programowanie, wdrożenie, zarządzanie i wsparcie. Baza danych może zawierać zarówno obiekty w pamięci, jak i obiekty oparte na dysku.
Wiersze w tabeli zoptymalizowanej pod pamięć są wersjonowane. Oznacza to, że każdy wiersz w tabeli może mieć kilka wersji. Wszystkie wersje wierszy są utrzymywane w tej samej strukturze danych tabeli. Wersjonowanie wiersza służy do umożliwienia jednoczesnego odczytu i zapisu do tego samego wiersza. Aby uzyskać więcej informacji o jednoczesnych odczytach i zapisach do tego samego wiersza, zobacz Rzeczy w tabeli optymalizacji pamięci.
Przybliżone kroki i ograniczenia użycia
Kroki:
(1) Utworzenie bazy danych i MEMORY_OPTIMIZED_DATA grupy plików (zmienij grupę plików do dodania bazy danych, każda baza może mieć tylko jedną MEMORY_OPTIMIZED_DATA grupę plików!!) ) (2) Dodaj folder do grupy plików do przechowywania plików danych (prosimy nie tworzyć tego folderu wcześniej, użyj alter database add file() do grupy plików) (3) Tworzenie tabel zoptymalizowanych pod pamięć trwałych/nietrwałych (SQL Server 2014 jest domyślnie zachowywany), a także należy zdefiniować klucz główny na podstawie nieagregowanego indeksu skrótu. Indeksy hasshed są jedynym obsługiwanym typem indeksu w tabelach zoptymalizowanych pod pamięć. (4) Używanie lokalnie skompilowanych procedur przechowywanych: Tabele zoptymalizowane pod pamięć obsługują lokalnie skompilowane procedury przechowywane, o ile te procedury odwołują się wyłącznie do tabel zoptymalizowanych pod pamięć.
Ograniczać:
(1) Tabela zoptymalizowana pod pamięć musi być umieszczona w bazie danych z grupą plików CONTAINS MEMORY_OPTIMIZED_DATA. (2) Tabela zoptymalizowana pod pamięć musi zdefiniować klucz główny na podstawie nieagregowanego indeksu haszującego, a tabela musi być zdefiniowanaNie obsługuje sprawdzanie klucza obcego lub ograniczeń (3) Tabela optymalizacji pamięci musi zawierać wystarczającą ilość pamięci, w przeciwnym razie operacje takie jak wstawianie aktualizacji nie ulegną awarii. (4) SQL Server 2014 ma wiele ograniczeń dotyczących tych tabel. Na przykład nie obsługują kluczy obcych ani sprawdzania ograniczeń (co przypomina silnik pamięci MySQL), oniPola IDENTITY ani wyzwalacze DML również nie są obsługiwane。
Skorzystaj z tutoriala
Wersje bazy danych przedstawiają się następująco:
Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64) 25 września 2024 17:34:41 Copyright (C) 2022 Microsoft Corporation Wersja korporacyjna: Licencjonowanie oparte na rdzeniach (64-bit) na Linuksie (Ubuntu 22.04.4 LTS) <X64>
Najpierw stwórz bazę danych i grupę plików za pomocą następującego polecenia:
Jeśli nie utworzysz grupy zoptymalizowanej pod pamięć, błąd zostanie zgłoszony podczas tworzenia tabeli zoptymalizowanej pod pamięć:Nie można tworzyć tabel zoptymalizowanych pod pamięć. Aby tworzyć tabele zoptymalizowane pod pamięć, baza danych musi mieć MEMORY_OPTIMIZED_FILEGROUP działający online i zawierający co najmniej jeden kontener.
Stwórz dwie tabele zoptymalizowane pod pamięć do testowania, jedną trwałą, drugą nietrwałą, za pomocą następującego polecenia:
Tablica optymalizacji pamięci ma dwie opcje (WYTRZYMAŁOŚĆ = SCHEMA_AND_DATA), (TRWAŁOŚĆ = SCHEMA_ONLY) Tabela wytrzymałości: TRWAŁOŚĆ =SCHEMA_AND_DATA Tabela nietrwała: TRWAŁOŚĆ =SCHEMA_ONLY
Testy są wstawiane osobno do tabeli optymalizacji pamięci100 000 artykułów(faktycznie 100002 elementy) danych, polecenie brzmi następująco:
Trwałość włącza się w 28 sekund, a bez niej 1 sekundę。
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne. |