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.

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:

  1. Połącz się z testowym bazą danych przy użyciu programu SQL Server Management Studio (SSMS).

  2. Aby uniknąć konieczności korzystania z WITH (SNAPSHOT) opcji w zapytaniach, ustaw opcję bieżącej bazy danych MEMORY_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

Aby użyć tej opcji migracji:

  1. Nawiąż połączenie z testowej bazy danych za pomocą programu SSMS.

  2. 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.

  3. 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:

  4. 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:

  1. Nawiąż połączenie z testowej bazy danych przy użyciu programu SSMS.
  2. 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.
  3. W oknie skryptu dodaj WITH (MEMORY_OPTIMIZED = ON) do instrukcji CREATE TABLE . Aby uzyskać więcej informacji, zobacz Składnia tabel zoptymalizowanych pod kątem pamięci.
  4. Jeśli istnieje indeks CLUSTERED, zmień go na NONCLUSTERED.
  5. Zmień nazwę istniejącej tabeli przy użyciu sp_rename.
  6. Utwórz nową kopię tabeli zoptymalizowaną pod kątem pamięci, uruchamiając edytowany CREATE TABLE skrypt.
  7. 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_LEVELSNAPSHOT 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 w sys.syslanguages widoku w kolumnie name . Na przykład N'us_english'.

Jak przeprowadzić migrację procedury składowanej w celu korzystania z kompilacji natywnej

Kroki migracji to:

  1. CREATE PROCEDURE Uzyskaj skrypt do procedury składowanej regularnej (interpretowanej).
  2. Zapisz ponownie nagłówek, aby był zgodny z poprzednim szablonem.
  3. 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.
  4. Zmień nazwę starej procedury składowanej przy użyciu sp_rename lub upuść ją.
  5. 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: