Używanie olTP w pamięci w usłudze Azure SQL Database w celu zwiększenia wydajności aplikacji
Dotyczy: Azure SQL Database
Funkcja OLTP w pamięci może służyć do poprawy wydajności przetwarzania transakcji, pozyskiwania danych i przejściowych scenariuszy danych bez zwiększania celu usługi bazy danych lub elastycznej puli.
- Bazy danych i elastyczne pule w warstwach usługi Premium (DTU) i Krytyczne dla działania firmy (rdzenie wirtualne) obsługują olTP w pamięci.
- Warstwa usługi Hiperskala obsługuje podzestaw obiektów OLTP w pamięci, ale nie zawiera tabel zoptymalizowanych pod kątem pamięci. Aby uzyskać więcej informacji, zobacz Ograniczenia hiperskala.
Wykonaj następujące kroki, aby rozpocząć korzystanie z olTP w pamięci w istniejących bazach danych.
Krok 1. Upewnij się, że używasz bazy danych w warstwie Premium lub Krytyczne dla działania firmy
Funkcja OLTP w pamięci jest obsługiwana, jeśli wynik następującego zapytania to 1
(a nie 0
):
SELECT DATABASEPROPERTYEX(DB_NAME(), 'IsXTPSupported');
XTP oznacza Extreme Transaction Processing, czyli nieformalną nazwę funkcji OLTP w pamięci.
Krok 2. Identyfikowanie obiektów do migrowania do magazynu OLTP w pamięci
Program SQL Server Management Studio (SSMS) zawiera raport Omówienie analizy wydajności transakcji, który można uruchomić względem bazy danych z aktywnym obciążeniem. Raport identyfikuje tabele i procedury składowane, które są kandydatami do migracji do in-memory OLTP.
Aby wygenerować raport w programie SSMS:
- W Eksplorator obiektów kliknij prawym przyciskiem myszy węzeł bazy danych.
- Wybierz pozycję Raporty raporty standardowe raporty>>Analizy wydajności transakcji — omówienie.
Aby uzyskać więcej informacji na temat oceny korzyści związanych z olTP w pamięci, zobacz Określanie, czy tabela lub procedura składowana powinna być portowana do olTP w pamięci.
Krok 3. Tworzenie porównywalnej testowej bazy danych
Załóżmy, że raport wskazuje, że baza danych zawiera tabelę, która mogłaby skorzystać z konwersji na tabelę zoptymalizowaną pod kątem pamięci. Zalecamy, aby najpierw przetestować, aby potwierdzić wskazanie przez testowanie.
Potrzebna jest testowa kopia produkcyjnej bazy danych. Testowa baza danych powinna być na tym samym poziomie warstwy usług co produkcyjna baza danych.
Aby ułatwić testowanie, dostosuj testowej bazy danych w następujący sposób:
Połącz się z testowym bazą danych przy użyciu programu SQL Server Management Studio (SSMS).
Aby uniknąć konieczności korzystania z
WITH (SNAPSHOT)
opcji w zapytaniach, ustaw opcję bieżącej bazy danychMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
, jak pokazano w następującej instrukcji języka T-SQL:ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
Krok 4. Migrowanie tabel
Musisz utworzyć i wypełnić zoptymalizowaną pod kątem pamięci kopię tabeli, którą chcesz przetestować. Można go utworzyć przy użyciu jednego z następujących narzędzi:
- Kreator optymalizacji pamięci w programie SSMS.
- Użyj poleceń języka T-SQL.
Kreator optymalizacji pamięci w programie SSMS
Aby użyć tej opcji migracji:
Nawiąż połączenie z testowej bazy danych za pomocą programu SSMS.
W Eksplorator obiektów kliknij prawym przyciskiem myszy tabelę, a następnie wybierz pozycję Doradca optymalizacji pamięci.
Zostanie wyświetlony kreator Advisor optymalizatora pamięci tabeli.
W kreatorze wybierz pozycję Weryfikacja migracji (lub przycisk Dalej ), aby sprawdzić, czy tabela ma jakiekolwiek funkcje, które nie są obsługiwane w tabelach zoptymalizowanych pod kątem pamięci. Aby uzyskać więcej informacji, zobacz:
- Lista kontrolna optymalizacji pamięci w usłudze Memory Optimization Advisor.
- Konstrukcje języka Transact-SQL nie są obsługiwane przez olTP w pamięci.
- Migrowanie do magazynu OLTP w pamięci.
Jeśli tabela nie ma nieobsługiwanych funkcji, doradca może wykonać rzeczywistą migrację schematu i danych.
Ręczny kod T-SQL
Aby użyć tej opcji migracji:
- Nawiąż połączenie z testowej bazy danych przy użyciu programu SSMS.
- Uzyskaj kompletny skrypt języka T-SQL dla tabeli oraz jej ograniczenia i indeksy.
- W programie SSMS kliknij prawym przyciskiem myszy węzeł tabeli.
- Wybierz pozycję Tabela skryptów jako>UTWÓRZ do>nowego okna zapytania.
- W oknie skryptu dodaj
WITH (MEMORY_OPTIMIZED = ON)
do instrukcjiCREATE TABLE
. Aby uzyskać więcej informacji, zobacz Składnia tabel zoptymalizowanych pod kątem pamięci. - Jeśli istnieje indeks CLUSTERED, zmień go na NONCLUSTERED.
- Zmień nazwę istniejącej tabeli przy użyciu sp_rename.
- Utwórz nową kopię tabeli zoptymalizowaną pod kątem pamięci, uruchamiając edytowany
CREATE TABLE
skrypt. - Skopiuj dane do tabeli zoptymalizowanej pod kątem pamięci przy użyciu polecenia
INSERT...SELECT * INTO
:INSERT INTO [<new_memory_optimized_table>] SELECT * FROM [<old_disk_based_table>];
Krok 5 (opcjonalnie): Migrowanie procedur składowanych
Funkcja OLTP w pamięci obsługuje również natywnie skompilowane procedury składowane, co może poprawić wydajność języka T-SQL.
Zagadnienia dotyczące natywnie skompilowanych procedur składowanych
Natywnie skompilowana procedura składowana musi mieć następujące opcje w klauzuli T-SQL WITH
:
- NATIVE_COMPILATION: oznacza to, że instrukcje języka Transact-SQL w procedurze są kompilowane do kodu natywnego w celu wydajnego wykonywania.
- SCHEMABINDING: oznacza to, że tabele, do których odwołuje się procedura składowana, nie mogą w żaden sposób zmienić ich definicji, które miałyby wpływ na procedurę składowaną, chyba że porzucasz procedurę składowaną.
Natywnie skompilowany moduł musi używać jednego bloku ATOMIC do zarządzania transakcjami. Nie ma użycia jawnych BEGIN TRANSACTION
instrukcji ani ROLLBACK TRANSACTION
. Kod może zakończyć blok niepodzielne za pomocą instrukcji THROW , na przykład jeśli wykryje naruszenie reguły biznesowej.
Przykład natywnie skompilowanej procedury składowanej
Język T-SQL do utworzenia natywnie skompilowanej procedury składowanej jest podobny do następującego szablonu:
CREATE PROCEDURE schemaname.procedurename
@param1 type1, ...
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'<desired sys.syslanuages.sysname value>'
)
...
END;
- Dla klasy
TRANSACTION_ISOLATION_LEVEL
SNAPSHOT
jest najbardziej typową wartością dla natywnie skompilowanych procedur składowanych. Jednak podzbiór innych wartości jest również obsługiwany:REPEATABLE READ
SERIALIZABLE
- Wartość
LANGUAGE
musi być obecna wsys.syslanguages
widoku w kolumniename
. Na przykładN'us_english'
.
Jak przeprowadzić migrację procedury składowanej w celu korzystania z kompilacji natywnej
Kroki migracji to:
CREATE PROCEDURE
Uzyskaj skrypt do procedury składowanej regularnej (interpretowanej).- Zapisz ponownie nagłówek, aby był zgodny z poprzednim szablonem.
- Ustal, czy kod T-SQL procedury składowanej używa żadnych funkcji, które nie są obsługiwane dla natywnie skompilowanych procedur składowanych. W razie potrzeby zaimplementuj obejścia. Aby uzyskać więcej informacji, zobacz Problemy z migracją dla natywnie skompilowanych procedur składowanych.
- Zmień nazwę starej procedury składowanej przy użyciu sp_rename lub upuść ją.
- Wykonaj edytowany
CREATE PROCEDURE
skrypt języka T-SQL.
Krok 6. Uruchamianie obciążenia w teście
Uruchom obciążenie w testowej bazie danych podobne do obciążenia uruchomionego w produkcyjnej bazie danych. Powinno to ujawnić wzrost wydajności osiągany przez użycie olTP w pamięci dla tabel i procedur składowanych.
Główne atrybuty obciążenia to:
- Liczba połączeń współbieżnych.
- Współczynnik odczytu/zapisu.
Aby dostosować i uruchomić obciążenie testowe, rozważ użycie ostress.exe
narzędzia z grupy narzędzi RML narzędzi. Aby uzyskać więcej informacji, zobacz Przykład w pamięci w usłudze Azure SQL Database.
Aby zminimalizować opóźnienie sieci, uruchom polecenie ostress.exe
w tym samym regionie świadczenia usługi Azure co baza danych.
Krok 7. Monitorowanie po wdrożeniu
Rozważ monitorowanie efektów wydajności implementacji OLTP w pamięci w środowisku produkcyjnym:
- Monitorowanie magazynu OLTP w pamięci.
- Monitorowanie przy użyciu dynamicznych widoków zarządzania.