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 w bazach danych w warstwie Premium i Krytyczne dla działania firmy bez zwiększania warstwy cenowej.

Wykonaj następujące kroki, aby wdrożyć olTP w pamięci w istniejącej bazie 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 tylko w warstwie Premium (DTU) i Krytyczne dla działania firmy (rdzeń wirtualny) usługi Azure SQL Database. Funkcja OLTP w pamięci jest obsługiwana, jeśli zwrócony wynik to 1 (a nie 0):

SELECT DatabasePropertyEx(Db_Name(), 'IsXTPSupported');

XTP to skrajne przetwarzanie transakcji.

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.

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 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łączenie do testowej bazy danych przy użyciu polecenia 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. Połączenie do 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 nieobsługiwane 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. Połączenie do testowej bazy danych przy użyciu programu SSMS (lub podobnego narzędzia).
  2. 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.
  3. W oknie skryptu dodaj WITH (MEMORY_OPTIMIZED = ON) do instrukcji CREATE TABLE .
  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 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_LEVELjest 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 w sys.syslanguages widoku w kolumnie name . Na przykład N'us_english'.

Jak przeprowadzić migrację procedury składowanej

Kroki migracji to:

  1. CREATE PROCEDURE Uzyskaj skrypt do regularnej interpretowanej procedury składowanej.
  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 po prostu UPUŚĆ go.
  5. Uruchom 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 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 uzyskać więcej informacji, zobacz Przykład w pamięci w usłudze Azure SQL Database.

Aby zminimalizować opóźnienie sieci, uruchom test w tym samym regionie geograficznym platformy Azure, w którym istnieje baza danych.

Krok 7. Monitorowanie po wdrożeniu

Rozważ monitorowanie efektów wydajności implementacji w pamięci w środowisku produkcyjnym: