Używanie replik tylko do odczytu do odciążania obciążeń zapytań tylko do odczytu

Dotyczy: Azure SQL DatabaseAzure SQL Managed Instance

W ramach architektury wysokiej dostępności każda pojedyncza baza danych lub elastyczna baza danych w warstwie Premium i Krytyczne dla działania firmy usługi jest automatycznie aprowizowana przy użyciu podstawowej repliki do odczytu i zapisu oraz co najmniej jednej pomocniczej repliki tylko do odczytu. Repliki pomocnicze są aprowidowane przy użyciu tego samego rozmiaru obliczeniowego co replika podstawowa. Funkcja skalowania odczytu w poziomie umożliwia odciążanie obciążeń tylko do odczytu przy użyciu pojemności obliczeniowej jednej z replik tylko do odczytu, a nie uruchamiania ich w repliki do odczytu i zapisu. Dzięki temu niektóre obciążenia tylko do odczytu mogą być odizolowane od obciążeń odczytu i zapisu i nie mają wpływu na ich wydajność. Ta funkcja jest przeznaczona dla aplikacji, które obejmują logicznie oddzielone obciążenia tylko do odczytu, takie jak analiza. W warstwach usług Premium i Krytyczne dla działania firmy aplikacje mogą uzyskać korzyści z wydajności dzięki tej dodatkowej pojemności bez dodatkowych kosztów.

Funkcja skalowania odczytu w poziomie jest również dostępna w warstwie usługi Hiperskala po dodaniu co najmniej jednej repliki pomocniczej. Pomocnicze repliki nazwane w warstwie Hiperskala zapewniają niezależne skalowanie , izolację dostępu, izolację obciążenia, obsługę różnych scenariuszy skalowania w poziomie odczytu i inne korzyści. Wiele pomocniczych replik wysokiej dostępności może służyć do równoważenia obciążenia tylko do odczytu, które wymagają więcej zasobów niż jest dostępnych w jednej pomocniczej repliki wysokiej dostępności.

Architektura wysokiej dostępności w warstwach usługi Podstawowa, Standardowa i Ogólnego przeznaczenia nie zawiera żadnych replik. Funkcja skalowania odczytu w poziomie nie jest dostępna w tych warstwach usług. Jednak w przypadku korzystania z usługi Azure SQL Database repliki geograficzne mogą zapewniać podobne funkcje w tych warstwach usług. W przypadku korzystania z usługi Azure SQL Managed Instance i grup trybu failover odbiornik grupy trybu failover może zapewnić podobne funkcje odpowiednio.

Na poniższym diagramie przedstawiono funkcję baz danych w warstwie Premium i Krytyczne dla działania firmy oraz wystąpień zarządzanych.

Diagram showing readonly replicas.

Funkcja skalowania odczytu w poziomie jest domyślnie włączona w nowych bazach danych Premium, Krytyczne dla działania firmy i Hiperskala.

Uwaga

Skalowanie odczytu w poziomie jest zawsze włączone w warstwie usługi Krytyczne dla działania firmy wystąpienia zarządzanego SQL oraz w przypadku baz danych w warstwie Hiperskala z co najmniej jedną repliką pomocniczą.

Jeśli parametry połączenia SQL jest skonfigurowany za pomocą ApplicationIntent=ReadOnlyprogramu , aplikacja jest przekierowywana do repliki tylko do odczytu tej bazy danych lub wystąpienia zarządzanego. Aby uzyskać informacje na temat używania ApplicationIntent właściwości, zobacz Określanie intencji aplikacji.

Tylko w przypadku usługi Azure SQL Database, jeśli chcesz mieć pewność, że aplikacja łączy się z repliką podstawową niezależnie od ApplicationIntent ustawienia w usłudze SQL parametry połączenia, musisz jawnie wyłączyć skalowanie odczytu w poziomie podczas tworzenia bazy danych lub zmiany jej konfiguracji. Jeśli na przykład uaktualnisz bazę danych z warstwy Standardowa lub Ogólnego przeznaczenia do warstwy Premium lub Krytyczne dla działania firmy i chcesz upewnić się, że wszystkie połączenia będą nadal przechodzić do repliki podstawowej, wyłącz skalowanie odczytu w poziomie. Aby uzyskać szczegółowe informacje na temat sposobu jej wyłączania, zobacz Włączanie i wyłączanie skalowania odczytu w poziomie.

Uwaga

Funkcje magazynu zapytań i profilera SQL nie są obsługiwane w replikach tylko do odczytu.

Spójność danych

Zmiany danych wprowadzone w repliki podstawowej są utrwalane w replikach tylko do odczytu synchronicznie lub asynchronicznie w zależności od typu repliki. Jednak dla wszystkich typów replik odczyty z repliki tylko do odczytu są zawsze asynchroniczne w odniesieniu do podstawowej. W ramach sesji połączonej z repliką tylko do odczytu operacje odczytu są zawsze spójne transakcyjnie. Ponieważ opóźnienie propagacji danych jest zmienne, różne repliki mogą zwracać dane w nieco różnych punktach w czasie względem podstawowego i siebie nawzajem. Jeśli replika tylko do odczytu stanie się niedostępna, a sesja zostanie ponownie połączona, może nawiązać połączenie z repliką, która znajduje się w innym momencie niż oryginalna replika. Podobnie, jeśli aplikacja zmienia dane przy użyciu sesji odczytu i zapisu w podstawowym i natychmiast odczytuje je przy użyciu sesji tylko do odczytu w repliki tylko do odczytu, możliwe, że najnowsze zmiany nie są natychmiast widoczne.

Typowe opóźnienie propagacji danych między repliką podstawową a replikami tylko do odczytu różni się w zakresie od dziesiątek milisekund do sekund jednocyfrowych. Nie ma jednak stałej górnej granicy opóźnienia propagacji danych. Warunki, takie jak wysokie wykorzystanie zasobów w repliki, mogą znacznie zwiększyć opóźnienie. Aplikacje, które wymagają gwarantowanej spójności danych między sesjami lub wymagają natychmiastowego odczytywania zatwierdzonych danych, powinny używać repliki podstawowej.

Uwaga

Opóźnienie propagacji danych obejmuje czas wymagany do wysyłania i utrwalania (jeśli dotyczy) rekordów dziennika do repliki pomocniczej. Obejmuje również czas wymagany do ponownego wykonania (zastosowania) tych rekordów dziennika na stronach danych. Aby zapewnić spójność danych, zmiany nie są widoczne do momentu zastosowania rekordu dziennika zatwierdzenia transakcji. Gdy obciążenie korzysta z większych transakcji, zwiększa się efektywne opóźnienie propagacji danych.

Aby monitorować opóźnienie propagacji danych, zobacz Monitorowanie i rozwiązywanie problemów z repliką tylko do odczytu.

Połączenie do repliki tylko do odczytu

Po włączeniu skalowania odczytu w poziomie dla bazy danych opcja w parametry połączenia podana przez klienta określa, ApplicationIntent czy połączenie jest kierowane do repliki zapisu, czy do repliki tylko do odczytu. W szczególności, jeśli ApplicationIntent wartość to ReadWrite (wartość domyślna), połączenie jest kierowane do repliki odczytu i zapisu. Jest to identyczne z zachowaniem, gdy ApplicationIntent nie jest uwzględnione w parametry połączenia. ApplicationIntent Jeśli wartość to ReadOnly, połączenie jest kierowane do repliki tylko do odczytu.

Na przykład następujące parametry połączenia łączy klienta z repliką tylko do odczytu (zastępując elementy w nawiasach kątowych poprawnymi wartościami środowiska i upuszczając nawiasy kątowe):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Aby nawiązać połączenie z repliką tylko do odczytu przy użyciu programu SQL Server Management Studio (SSMS), wybierz pozycję Opcje

Screenshot showing the SSMS Options button.

Wybierz pozycję Dodatkowe parametry Połączenie ion i wprowadźApplicationIntent=ReadOnly, a następnie wybierz pozycję Połączenie

Screenshot showing SSMS Additional Connection Parameters.

Jeden z następujących parametry połączenia łączy klienta z repliką do odczytu i zapisu (zastępując elementy w nawiasach kątowych poprawnymi wartościami środowiska i upuszczając nawiasy kątowe):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Sprawdź, czy połączenie jest z repliką tylko do odczytu

Możesz sprawdzić, czy masz połączenie z repliką tylko do odczytu, uruchamiając następujące zapytanie w kontekście bazy danych. Zwraca READ_ONLY, gdy masz połączenie z repliką tylko do odczytu.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');

Uwaga

W warstwach usługi Premium i Krytyczne dla działania firmy tylko jedna replika tylko do odczytu jest dostępna w danym momencie. Hiperskala obsługuje wiele replik tylko do odczytu.

Monitorowanie replik tylko do odczytu i rozwiązywanie problemów

W przypadku połączenia z repliką tylko do odczytu dynamiczne widoki zarządzania odzwierciedlają stan repliki i mogą być odpytywane w celu monitorowania i rozwiązywania problemów. Aparat bazy danych udostępnia wiele widoków, aby uwidocznić szeroką gamę danych monitorowania.

Następujące widoki są często używane do monitorowania replik i rozwiązywania problemów:

Nazwisko Purpose
sys.dm_db_resource_stats Udostępnia metryki wykorzystania zasobów w ciągu ostatniej godziny, w tym procesor CPU, operacje we/wy danych i użycie zapisu dziennika względem limitów celu usługi.
Sys.dm_os_wait_stats Udostępnia zagregowane statystyki oczekiwania dla wystąpienia aparatu bazy danych.
sys.dm_database_replica_states Udostępnia statystyki kondycji i synchronizacji repliki. Powtórz rozmiar kolejki i szybkość ponownego wdrażania służą jako wskaźniki opóźnienia propagacji danych w repliki tylko do odczytu.
sys.dm_os_performance_counters Zapewnia liczniki wydajności aparatu bazy danych.
Sys.dm_exec_query_stats Udostępnia statystyki wykonywania poszczególnych zapytań, takie jak liczba wykonań, czas użycia procesora CPU itp.
sys.dm_exec_query_plan() Udostępnia buforowane plany zapytań.
sys.dm_exec_sql_text() Udostępnia tekst zapytania dla buforowanego planu zapytania.
sys.dm_exec_query_profiles Zapewnia postęp zapytań w czasie rzeczywistym, gdy zapytania są wykonywane.
sys.dm_exec_query_plan_stats() Zawiera ostatni znany rzeczywisty plan wykonywania, w tym statystyki środowiska uruchomieniowego dla zapytania.
sys.dm_io_virtual_file_stats() Udostępnia statystyki liczby operacji we/wy na sekundę magazynu, przepływności i opóźnień dla wszystkich plików bazy danych.

Uwaga

Widoki sys.resource_stats DMV i sys.elastic_pool_resource_stats w logicznej master bazie danych zwracają dane użycia zasobów repliki podstawowej.

Monitorowanie replik tylko do odczytu za pomocą zdarzeń rozszerzonych

Nie można utworzyć sesji zdarzeń rozszerzonych podczas nawiązywania połączenia z repliką tylko do odczytu. Jednak w usłudze Azure SQL Database definicje sesji zdarzeń rozszerzonych w zakresie bazy danych utworzone i zmienione w replikach repliki podstawowej do replik tylko do odczytu, w tym repliki geograficzne i przechwytywania zdarzeń w replikach tylko do odczytu.

Rozszerzona sesja zdarzeń w repliki tylko do odczytu, która jest oparta na definicji sesji z repliki podstawowej, można uruchomić i zatrzymać niezależnie od sesji w repliki podstawowej.

Aby usunąć sesję zdarzeń w repliki tylko do odczytu, wykonaj następujące kroki:

  1. Połączenie Eksplorator obiektów programu SSMS lub okno zapytania do repliki tylko do odczytu.
  2. Zatrzymaj sesję w repliki tylko do odczytu, wybierając pozycję Zatrzymaj sesję w menu kontekstowym sesji w Eksplorator obiektów lub wykonując polecenie ALTER EVENT SESSION [session-name-here] ON DATABASE STATE = STOP; w oknie zapytania.
  3. Połączenie Eksplorator obiektów lub okno zapytania do repliki podstawowej.
  4. Upuść sesję w repliki podstawowej, wybierając pozycję Usuń w menu kontekstowym sesji lub wykonując polecenie DROP EVENT SESSION [session-name-here] ON DATABASE;

Poziom izolacji transakcji w replikach tylko do odczytu

Transakcje w replikach tylko do odczytu zawsze używają migawki poziomu izolacji transakcji, niezależnie od poziomu izolacji transakcji sesji i niezależnie od wskazówek dotyczących zapytań. Izolacja migawki używa przechowywania wersji wierszy, aby uniknąć blokowania scenariuszy, w których czytelnicy blokują zapisy.

W rzadkich przypadkach, jeśli transakcja izolacji migawki uzyskuje dostęp do metadanych obiektu, które zostały zmodyfikowane w innej transakcji współbieżnej, może zostać wyświetlony błąd 3961: "Transakcja izolacji migawki nie powiodła się w bazie danych "%.*ls", ponieważ obiekt, do którego uzyskiwano dostęp przez instrukcję, został zmodyfikowany przez instrukcję DDL w innej transakcji współbieżnej od początku tej transakcji. Jest to niedozwolone, ponieważ metadane nie są poddane kontroli wersji. Równoczesna aktualizacja metadanych może prowadzić do niespójności w przypadku mieszanych z izolacją migawki".

Długotrwałe zapytania dotyczące replik tylko do odczytu

Zapytania uruchomione w replikach tylko do odczytu muszą uzyskiwać dostęp do metadanych obiektów, do których odwołuje się zapytanie (tabele, indeksy, statystyki itp.) W rzadkich przypadkach, jeśli metadane obiektu są modyfikowane w repliki podstawowej, podczas gdy zapytanie przechowuje blokadę na tym samym obiekcie w repliki tylko do odczytu, zapytanie może zablokować proces, który stosuje zmiany z repliki podstawowej do repliki tylko do odczytu. Gdyby takie zapytanie było uruchamiane przez długi czas, spowodowałoby to znaczne brak synchronizacji repliki tylko do odczytu z repliką podstawową. W przypadku replik, które są potencjalnymi miejscami docelowymi trybu failover (replikami pomocniczymi w warstwach Premium i Krytyczne dla działania firmy usług, replikami wysokiej dostępności hiperskala i wszystkimi replikami geograficznymi), opóźniłoby to również odzyskiwanie bazy danych w przypadku wystąpienia trybu failover, co spowodowałoby dłuższy niż oczekiwano przestój.

Jeśli długotrwałe zapytanie w repliki tylko do odczytu bezpośrednio lub pośrednio powoduje takie blokowanie, może zostać automatycznie zakończone, aby uniknąć nadmiernego opóźnienia danych i potencjalnego wpływu na dostępność bazy danych. Sesja otrzymuje błąd 1219 "Sesja została rozłączona z powodu operacji DDL o wysokim priorytcie" lub błąd 3947" Transakcja została przerwana, ponieważ pomocnicze obliczenia nie nadrobiły zaległości. Ponów próbę transakcji".

Uwaga

Jeśli podczas uruchamiania zapytań względem repliki tylko do odczytu wystąpi błąd 3961, 1219 lub 3947, spróbuj ponownie wykonać zapytanie. Alternatywnie należy unikać operacji modyfikujących metadane obiektu (zmiany schematu, konserwację indeksu, aktualizacje statystyk itp.) w repliki podstawowej, podczas gdy długotrwałe zapytania są wykonywane na replikach pomocniczych.

Napiwek

W warstwach usługi Premium i Krytyczne dla działania firmy w przypadku połączenia z repliką redo_queue_size tylko do odczytu kolumny i redo_rate w sys.dm_database_replica_states dmV mogą służyć do monitorowania procesu synchronizacji danych, służąc jako wskaźniki opóźnienia propagacji danych w replice tylko do odczytu.

Włączanie i wyłączanie skalowania odczytu w poziomie dla usługi SQL Database

W przypadku usługi SQL Managed Instance skalowanie w poziomie jest automatycznie włączone w warstwie usługi Krytyczne dla działania firmy i nie jest dostępne w warstwie usługi Ogólnego przeznaczenia. Wyłączenie i ponowne opublikowanie odczytu w poziomie nie jest możliwe.

W przypadku usługi SQL Database skalowanie odczytu w poziomie jest domyślnie włączone w warstwach usług Premium, Krytyczne dla działania firmy i Hiperskala. Nie można włączyć skalowania odczytu w poziomie w warstwach usług Podstawowa, Standardowa lub Ogólnego przeznaczenia. Skalowanie odczytu w poziomie jest automatycznie wyłączone w bazach danych w warstwie Hiperskala skonfigurowanych z zerowymi replikami pomocniczymi.

W przypadku pojedynczych baz danych i baz danych w puli w usłudze Azure SQL Database można wyłączyć i ponownie włączyć skalowanie odczytu w poziomie w warstwach usługi Premium lub Krytyczne dla działania firmy przy użyciu witryny Azure Portal i programu Azure PowerShell. Te opcje nie są dostępne dla usługi SQL Managed Instance, ponieważ nie można wyłączyć skalowania odczytu w poziomie.

Uwaga

W przypadku pojedynczych baz danych i baz danych elastycznej puli można wyłączyć skalowanie odczytu w poziomie w celu zapewnienia zgodności z poprzednimi wersjami. Nie można wyłączyć skalowania odczytu w poziomie w Krytyczne dla działania firmy wystąpieniach zarządzanych.

Azure Portal

W przypadku usługi Azure SQL Database można zarządzać ustawieniem skalowania odczytu w poziomie w okienku Obliczenia i baza danych magazynu dostępna w obszarze Ustawienia. Włączanie lub wyłączanie skalowania odczytu w poziomie przy użyciu witryny Azure Portal nie jest dostępne dla usługi Azure SQL Managed Instance.

PowerShell

Ważne

Moduł Azure Resource Manager programu PowerShell jest nadal obsługiwany, ale wszystkie przyszłe programowanie dotyczy modułu Az.Sql. Moduł usługi Azure Resource Manager będzie nadal otrzymywać poprawki błędów do co najmniej grudnia 2020 r. Argumenty poleceń w module Az i modułach usługi Azure Resource Manager są zasadniczo identyczne. Aby uzyskać więcej informacji na temat ich zgodności, zobacz Wprowadzenie do nowego modułu Az programu Azure PowerShell.

Zarządzanie skalowaniem odczytu w poziomie w programie Azure PowerShell wymaga wydania programu Azure PowerShell z grudnia 2016 r. lub nowszego. Aby uzyskać najnowszą wersję programu PowerShell, zobacz Azure PowerShell.

W usłudze Azure SQL Database możesz wyłączyć lub ponownie włączyć skalowanie odczytu w poziomie w programie Azure PowerShell, wywołując polecenie cmdlet Set-AzSqlDatabase i przekazując żądaną wartość (Enabled lub Disabled) dla parametru -ReadScale . Wyłączenie skalowania odczytu w poziomie dla usługi SQL Managed Instance nie jest dostępne.

Aby wyłączyć skalowanie odczytu w poziomie w istniejącej bazie danych (zastępując elementy w nawiasach kątowych poprawnymi wartościami środowiska i upuszczając nawiasy kątowe):

Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled

Aby wyłączyć skalowanie odczytu w poziomie dla nowej bazy danych (zastępując elementy w nawiasach kątowych poprawnymi wartościami środowiska i upuszczając nawiasy kątowe):

New-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled -Edition Premium

Aby ponownie włączyć skalowanie odczytu w poziomie w istniejącej bazie danych (zastępując elementy w nawiasach kątowych poprawnymi wartościami środowiska i upuszczając nawiasy kątowe):

Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Enabled

Interfejs API REST

Aby utworzyć bazę danych z wyłączonym skalowaniem odczytu lub zmienić ustawienie dla istniejącej bazy danych, użyj następującej metody z właściwością readScale ustawioną na Enabled lub Disabled, jak w poniższym przykładowym żądaniu.

Method: PUT
URL: https://management.azure.com/subscriptions/{SubscriptionId}/resourceGroups/{GroupName}/providers/Microsoft.Sql/servers/{ServerName}/databases/{DatabaseName}?api-version= 2014-04-01-preview
Body: {
   "properties": {
      "readScale":"Disabled"
   }
}

Aby uzyskać więcej informacji, zobacz Bazy danych — tworzenie lub aktualizowanie.

tempdb Używanie bazy danych w repliki tylko do odczytu

Baza tempdb danych w repliki podstawowej nie jest replikowana do replik tylko do odczytu. Każda replika ma własną tempdb bazę danych utworzoną podczas tworzenia repliki. Gwarantuje to możliwość tempdb aktualizacji i możliwość modyfikacji podczas wykonywania zapytania. Jeśli obciążenie tylko do odczytu zależy od używania tempdb obiektów, należy utworzyć te obiekty w ramach tego samego obciążenia, gdy jest on połączony z repliką tylko do odczytu.

Używanie skalowania odczytu w poziomie z geograficznie replikowanymi bazami danych

Pomocnicze pomocnicze bazy danych replikowane geograficznie mają taką samą architekturę wysokiej dostępności jak podstawowe bazy danych. Jeśli łączysz się z pomocniczą bazą danych replikowanej geograficznie z włączonym skalowaniem odczytu w poziomie, sesje z ApplicationIntent=ReadOnly programem są kierowane do jednej z replik wysokiej dostępności w taki sam sposób, jak są kierowane do podstawowej bazy danych z możliwością zapisu. Sesje bez ApplicationIntent=ReadOnly są kierowane do podstawowej repliki pomocniczej replikowanej geograficznie, która jest również tylko do odczytu.

W ten sposób utworzenie repliki geograficznej może zapewnić wiele dodatkowych replik tylko do odczytu dla podstawowej bazy danych odczytu i zapisu. Każda dodatkowa replika geograficzna udostępnia kolejny zestaw replik tylko do odczytu. Repliki geograficzne można tworzyć w dowolnym regionie świadczenia usługi Azure, w tym w regionie podstawowej bazy danych.

Uwaga

Nie ma żadnego automatycznego działania okrężnego ani żadnego innego routingu z równoważeniem obciążenia między replikami pomocniczej bazy danych replikowanej geograficznie, z wyjątkiem repliki geograficznej hiperskala z więcej niż jedną repliką wysokiej dostępności. W takim przypadku sesje z intencją tylko do odczytu są dystrybuowane na wszystkich replikach wysokiej dostępności repliki geograficznej.

Obsługa funkcji w replikach tylko do odczytu

Lista zachowania niektórych funkcji w replikach tylko do odczytu jest następująca:

  • Inspekcja replik tylko do odczytu jest włączana automatycznie. Aby uzyskać więcej informacji na temat hierarchii folderów magazynu, konwencji nazewnictwa i formatu dziennika, zobacz Format dziennika inspekcji usługi SQL Database.
  • Szczegółowe informacje o wydajności zapytań opierają się na danych z magazynu zapytań, które obecnie nie śledzą aktywności w repliki tylko do odczytu. Szczegółowe informacje o wydajności zapytań nie pokazują zapytań wykonywanych w repliki tylko do odczytu.
  • Automatyczne dostrajanie opiera się na magazynie zapytań, zgodnie z opisem w dokumencie Automatycznego dostrajania. Automatyczne dostrajanie działa tylko w przypadku obciążeń uruchomionych w replice podstawowej.

Następne kroki

  • Aby uzyskać informacje o ofercie hiperskala usługi SQL Database, zobacz Warstwa usługi Hiperskala.