Używanie olTP w pamięci w usłudze Azure SQL Managed Instance w celu zwiększenia wydajności aplikacji
Dotyczy: Azure SQL Managed Instance
Funkcja OLTP w pamięci może służyć do poprawy wydajności przetwarzania transakcji, pozyskiwania danych i przejściowych scenariuszy danych. Warstwa usługi Krytyczne dla działania firmy obejmuje pewną ilość maksymalnej pamięci OLTP w pamięci, limit określony przez liczbę rdzeni wirtualnych.
Wykonaj następujące kroki, aby wdrożyć olTP w pamięci w istniejącej bazie danych w usłudze Azure SQL Managed Instance.
Krok 1. 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.
W programie SSMS w celu wygenerowania raportu:
- 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 powinny być przeniesione do olTP w pamięci.
Krok 2. 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 znajdować się w tej samej warstwie usługi (Krytyczne dla działania firmy) i liczbie rdzeni wirtualnych 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 3. 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:
- Przydatny 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 nieobsługiwane 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 testową bazą danych przy użyciu programu SSMS (lub podobnego narzędzia).
- Uzyskaj kompletny skrypt języka T-SQL dla tabeli i jej indeksów.
- 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
. - 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 4 (opcjonalnie): Migrowanie procedur składowanych
Funkcja w pamięci może również zmodyfikować procedurę składowaną w celu zwiększenia wydajności.
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 tabele, których procedura składowana nie może zmienić w żaden sposób, co wpłynie na procedurę składowaną, chyba że procedura składowana zostanie usunięta.
Moduł macierzysty musi używać jednego dużego bloku ATOMIC do zarządzania transakcjami. Nie ma roli jawnej BEGIN TRANSACTION
lub ROLLBACK TRANSACTION.
jeśli kod wykryje naruszenie reguły biznesowej, może zakończyć blok niepodzielne za pomocą instrukcji THROW .
Typowa procedura TWORZENIA dla natywnie skompilowanego
Zazwyczaj 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;
- W przypadku elementu migawka
TRANSACTION_ISOLATION_LEVEL
jest najczęstszą wartością natywnie skompilowanej procedury składowanej. Jednak podzbiór innych wartości jest również obsługiwany:- POWTARZALNY ODCZYT
- SERIALIZACJI
- Wartość
LANGUAGE
musi być obecna wsys.syslanguages
widoku w kolumniename
. Na przykładN'us_english'
.
Jak przeprowadzić migrację procedury składowanej
Kroki migracji to:
CREATE PROCEDURE
Uzyskaj skrypt do regularnej interpretowanej procedury składowanej.- 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 po prostu UPUŚĆ go.
- Uruchom edytowany
CREATE PROCEDURE
skrypt języka T-SQL.
Krok 5. 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 funkcji 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 przydatnego narzędzia ostress.exe.
Aby zminimalizować opóźnienie sieci, uruchom test w tym samym regionie geograficznym platformy Azure, w którym istnieje baza danych.
Krok 6. Monitorowanie po wdrożeniu
Rozważ monitorowanie efektów wydajności implementacji w pamięci w środowisku produkcyjnym:
- Monitorowanie magazynu w pamięci.
- Monitorowanie przy użyciu dynamicznych widoków zarządzania.