Použití replik jen pro čtení k přesměrování zpracování úloh dotazů jen pro čtení

Platí pro:Azure SQL DatabaseAzure SQL Managed Instance

V rámci architektury s vysokou dostupností se každá jednoúčelová databáze nebo databáze elastického fondu v úrovni služby Premium a Pro důležité obchodní informace automaticky zřídí s primární replikou pro čtení a jednou nebo více sekundárními replikami jen pro čtení. Sekundární repliky se zřídí se stejnou velikostí výpočetních prostředků jako primární replika. Funkce škálování na více instancí čtení umožňuje přesměrovat úlohy jen pro čtení pomocí výpočetní kapacity jedné z replik jen pro čtení, a ne je spouštět na replice pro čtení i zápis. Některé úlohy jen pro čtení tak můžou být izolované od úloh pro čtení i zápis a nemají vliv na jejich výkon. Funkce je určená pro aplikace, které zahrnují logicky oddělené úlohy jen pro čtení, jako jsou analýzy. V úrovních služeb Premium a Pro důležité obchodní informace můžou aplikace bez dalších poplatků získat výhody z hlediska výkonu.

Funkce horizontálního navýšení kapacity čtení je dostupná také v úrovni služby Hyperscale, když se přidá aspoň jedna sekundární replika . Sekundární pojmenované repliky hyperškálování poskytují nezávislé škálování, izolaci přístupu, izolaci úloh, podporu různých scénářů škálování na více instancí čtení a další výhody. Pro vyrovnávání zatížení úloh jen pro čtení, které vyžadují více prostředků, než je k dispozici na jedné sekundární replice vysoké dostupnosti, je možné použít několik sekundárních replik vysoké dostupnosti.

Architektura vysoké dostupnosti úrovní služby Basic, Standard a Pro obecné účely nezahrnuje žádné repliky. Funkce horizontálního navýšení kapacity čtení není v těchto úrovních služby dostupná. Při použití služby Azure SQL Database ale můžou geografické repliky poskytovat podobné funkce v těchto úrovních služby. Při použití služby Azure SQL Managed Instance a skupin převzetí služeb při selhání může naslouchací proces skupiny převzetí služeb při selhání poskytovat podobné funkce.

Následující diagram znázorňuje funkci pro databáze Premium a Pro důležité obchodní informace databáze a spravované instance.

Diagram showing readonly replicas.

Funkce horizontálního navýšení kapacity čtení je ve výchozím nastavení povolená pro nové databáze Premium, Pro důležité obchodní informace a Hyperscale.

Poznámka:

Škálování na více instancí čtení je vždy povolené na úrovni služby Pro důležité obchodní informace spravované instance SQL a pro databáze Hyperscale s alespoň jednou sekundární replikou.

Pokud je váš připojovací řetězec SQL nakonfigurovaný ApplicationIntent=ReadOnly, aplikace se přesměruje na repliku této databáze nebo spravované instance jen pro čtení. Informace o použití ApplicationIntent vlastnosti naleznete v tématu Určení záměru aplikace.

Pouze pokud chcete zajistit, aby se aplikace připojovala k primární replice bez ApplicationIntent ohledu na nastavení v sql připojovací řetězec, musíte explicitně zakázat horizontální navýšení kapacity čtení při vytváření databáze nebo při změně její konfigurace. Pokud například upgradujete databázi z úrovně Standard nebo Pro obecné účely na Úroveň Premium nebo Pro důležité obchodní informace a chcete zajistit, aby všechna vaše připojení pokračovala v přechodu na primární repliku, zakažte horizontální navýšení kapacity čtení. Podrobnosti o tom, jak ho zakázat, najdete v tématu Povolení a zakázání horizontálního navýšení kapacity čtení.

Poznámka:

Funkce úložiště dotazů a sql Profileru nejsou podporovány u replik jen pro čtení.

Konzistence dat

Změny dat provedené na primární replice se uchovávají v replikách jen pro čtení synchronně nebo asynchronně v závislosti na typu repliky. U všech typů replik jsou však čtení z repliky jen pro čtení vždy asynchronní s ohledem na primární repliku. V rámci relace připojené k replice jen pro čtení jsou čtení vždy konzistentně konzistentní. Vzhledem k tomu, že latence šíření dat je proměnná, můžou různé repliky vracet data v mírně odlišných bodech v čase vzhledem k primárnímu serveru a k sobě navzájem. Pokud se replika jen pro čtení stane nedostupnou a relace se znovu připojí, může se připojit k replice, která je v jiném časovém okamžiku než původní replika. Podobně platí, že pokud aplikace změní data pomocí relace pro čtení i zápis na primárním serveru a okamžitě ji přečte pomocí relace jen pro čtení na replice jen pro čtení, je možné, že nejnovější změny nejsou okamžitě viditelné.

Typická latence šíření dat mezi primární replikou a replikami jen pro čtení se liší v rozsahu od desítek milisekund až po jednociferné sekundy. Neexistuje však pevná horní mez latence šíření dat. Podmínky, jako je vysoké využití prostředků na replice, můžou výrazně zvýšit latenci. Aplikace, které vyžadují zaručenou konzistenci dat napříč relacemi, nebo vyžadují, aby potvrzená data byla čitelná okamžitě, by měla používat primární repliku.

Poznámka:

Latence šíření dat zahrnuje čas potřebný k odesílání a uchovávání záznamů protokolu (pokud je k dispozici) do sekundární repliky. Zahrnuje také čas potřebný k opětovnému provedení (použití) těchto záznamů protokolu na datové stránky. Pokud chcete zajistit konzistenci dat, změny se nezobrazí, dokud se nepoužije záznam protokolu potvrzení transakce. Když úloha používá větší transakce, zvýší se efektivní latence šíření dat.

Pokud chcete monitorovat latenci šíření dat, přečtěte si téma Monitorování a řešení potíží s replikou jen pro čtení.

Připojení do repliky jen pro čtení

Když pro databázi povolíte horizontální navýšení kapacity čtení, ApplicationIntent určuje možnost v připojovací řetězec poskytované klientem, jestli je připojení směrováno na repliku zápisu nebo na repliku jen pro čtení. Konkrétně pokud ApplicationIntent je ReadWrite hodnota (výchozí hodnota), připojení se směruje na repliku pro čtení i zápis. Toto chování je stejné jako chování, pokud ApplicationIntent není součástí připojovací řetězec. Pokud je ReadOnlyhodnotaApplicationIntent, připojení se přesměruje na repliku jen pro čtení.

Například následující připojovací řetězec připojí klienta k replice jen pro čtení (nahrazení položek v úhlových závorkách správnými hodnotami pro vaše prostředí a vyřazení úhlových závorek):

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

Pokud se chcete připojit k replice jen pro čtení pomocí aplikace SQL Server Management Studio (SSMS), vyberte Možnosti

Screenshot showing the SSMS Options button.

Vyberte Další parametry Připojení a zadejte ApplicationIntent=ReadOnly a pak vyberte Připojení

Screenshot showing SSMS Additional Connection Parameters.

Některý z následujících připojovací řetězec připojí klienta k replice pro čtení i zápis (položky v hranatých závorkách nahraďte správnými hodnotami pro vaše prostředí a vyřaďte úhlové závorky):

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;

Ověření připojení k replice jen pro čtení

Spuštěním následujícího dotazu v kontextu databáze můžete ověřit, jestli jste připojení k replice jen pro čtení. Vrátí READ_ONLY, když jste připojení k replice jen pro čtení.

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

Poznámka:

V úrovních služeb Premium a Pro důležité obchodní informace je v daném okamžiku přístupný pouze jeden z replik jen pro čtení. Hyperscale podporuje více replik jen pro čtení.

Monitorování a řešení potíží s replikami jen pro čtení

Při připojení k replice jen pro čtení se zobrazení dynamické správy (DMV) odrážejí stav repliky a dají se dotazovat na účely monitorování a řešení potíží. Databázový stroj poskytuje více zobrazení pro zveřejnění široké škály dat monitorování.

Pro monitorování repliky a řešení potíží se běžně používají následující zobrazení:

Název Účel
sys.dm_db_resource_stats Poskytuje metriky využití prostředků za poslední hodinu, včetně využití procesoru, vstupně-výstupních operací dat a zápisu protokolů vzhledem k limitům cílů služby.
Sys.dm_os_wait_stats Poskytuje agregované statistiky čekání pro instanci databázového stroje.
sys.dm_database_replica_states Poskytuje statistiky stavu repliky a synchronizace. Velikost fronty znovu a rychlost opakování slouží jako indikátory latence šíření dat na replice jen pro čtení.
sys.dm_os_performance_counters Poskytuje čítače výkonu databázového stroje.
Sys.dm_exec_query_stats Poskytuje statistiky provádění jednotlivých dotazů, jako je počet spuštění, využitý čas procesoru atd.
sys.dm_exec_query_plan() Poskytuje plány dotazů v mezipaměti.
sys.dm_exec_sql_text() Poskytuje text dotazu pro plán dotazů uložený v mezipaměti.
sys.dm_exec_query_profiles Poskytuje průběh dotazu v reálném čase, když se dotazy provádějí.
sys.dm_exec_query_plan_stats() Poskytuje poslední známý skutečný plán provádění včetně statistik modulu runtime pro dotaz.
sys.dm_io_virtual_file_stats() Poskytuje statistiky IOPS úložiště, propustnosti a latence pro všechny databázové soubory.

Poznámka:

Zobrazení sys.resource_stats dynamické správy v sys.elastic_pool_resource_stats logické master databázi vrací data o využití prostředků primární repliky.

Monitorování replik jen pro čtení pomocí rozšířených událostí

Rozšířenou relaci událostí nelze vytvořit při připojení k replice jen pro čtení. Ve službě Azure SQL Database se však definice relací rozšířených událostí v oboru databáze vytvořily a změnily na primární repliky repliky jen pro čtení, včetně geografických replik, a zachytávejte události na replikách jen pro čtení.

Rozšířená relace událostí na replice jen pro čtení, která je založená na definici relace z primární repliky, se dá spustit a zastavit nezávisle na relaci na primární replice.

Pokud chcete vynechat relaci události na replice jen pro čtení, postupujte takto:

  1. Připojení SSMS Průzkumník objektů nebo okno dotazu na repliku jen pro čtení.
  2. Zastavte relaci na replice jen pro čtení tak, že v místní nabídce relace v Průzkumník objektů vyberete možnost Zastavit relaci nebo spustíte ALTER EVENT SESSION [session-name-here] ON DATABASE STATE = STOP; v okně dotazu.
  3. Připojení Průzkumník objektů nebo okno dotazu na primární repliku.
  4. Odstraňte relaci na primární replice, a to buď výběrem možnosti Odstranit v místní nabídce relace, nebo spuštěním příkazu DROP EVENT SESSION [session-name-here] ON DATABASE;

Úroveň izolace transakcí u replik jen pro čtení

U transakcí na replikách jen pro čtení se vždy používá úroveň izolace transakce snímku bez ohledu na úroveň izolace transakce relace a jakékoli pomocné parametry dotazu. Izolace snímků používá správu verzí řádků, aby nedocházelo k blokování scénářů, kdy čtenáři blokují zapisovače.

Ve výjimečných případech, pokud transakce izolace snímku přistupuje k metadatům objektu, které byly změněny v jiné souběžné transakci, může se zobrazit chyba 3961, "Transakce izolace snímku selhala v databázi %.*ls", protože objekt, ke kterému přistupuje příkaz, byl změněn příkazem DDL v jiné souběžné transakci od začátku této transakce. Tato akce je zakázaná, protože metadata nemají verze. Souběžná aktualizace metadat může vést k nekonzistenci, pokud je smíšený s izolací snímků.

Dlouhotrvající dotazy na replikách jen pro čtení

Dotazy spuštěné na replikách jen pro čtení potřebují přístup k metadatům pro objekty odkazované v dotazu (tabulky, indexy, statistiky atd.). Ve výjimečných případech může dotaz blokovat proces, který aplikuje změny z primární repliky na repliku jen pro čtení, zatímco dotaz uchovává zámek na stejném objektu repliky jen pro čtení, může dotaz blokovat proces, který aplikuje změny z primární repliky na repliku jen pro čtení. Pokud by takový dotaz běžel dlouho, způsobí to, že replika jen pro čtení bude výrazně mimo synchronizaci s primární replikou. U replik, které jsou potenciálními cíli převzetí služeb při selhání (sekundární repliky v úrovních služeb Premium a Pro důležité obchodní informace, replikách hyperškálování vysoké dostupnosti a všech geografických replik), by to také zpozdilo obnovení databáze v případě, že dojde k převzetí služeb při selhání, což by způsobilo delší než očekávaný výpadek.

Pokud dlouhotrvající dotaz na repliku jen pro čtení přímo nebo nepřímo způsobí tento typ blokování, může se automaticky ukončit, aby se zabránilo nadměrné latenci dat a potenciálnímu dopadu na dostupnost databáze. Relace se zobrazí chyba 1219, "Vaše relace byla odpojena kvůli operaci DDL s vysokou prioritou" nebo chyba 3947, "Transakce byla přerušena, protože sekundární výpočetní prostředky se nepodařilo provést znovu. Zkuste transakci zopakovat."

Poznámka:

Pokud se při spouštění dotazů na repliku jen pro čtení zobrazí chyba 3961, 1219 nebo 3947, zkuste dotaz zopakovat. Alternativně se vyhněte operacím, které upravují metadata objektu (změny schématu, údržba indexu, aktualizace statistik atd.), zatímco dlouhotrvající dotazy se spouštějí na sekundárních replikách.

Tip

V úrovních služeb Premium a Pro důležité obchodní informace se redo_queue_size při připojení k replice jen pro čtení můžou k monitorování procesu synchronizace dat použít sloupce a redo_rate sloupce v sys.dm_database_replica_states zobrazení dynamické správy, které slouží jako indikátory latence šíření dat v replice jen pro čtení.

Povolení a zakázání horizontálního navýšení kapacity čtení pro SLUŽBU SQL Database

U služby SQL Managed Instance je horizontální navýšení kapacity pro čtení automaticky povolené na úrovni služby Pro důležité obchodní informace a není dostupné v úrovni služby Pro obecné účely. Zakázání a opětovné rozšíření kapacity čtení není možné.

U SLUŽBY SQL Database je ve výchozím nastavení povolené škálování na více instancí čtení na úrovni Premium, Pro důležité obchodní informace a Hyperscale. Škálování na více instancí čtení není možné povolit na úrovních služby Basic, Standard nebo General Purpose. U databází úrovně Hyperscale bez nakonfigurovaných sekundárních replik je škálování čtení automaticky zakázané.

U jednoúčelových a fondových databází ve službě Azure SQL Database můžete pomocí webu Azure Portal a Azure PowerShellu zakázat a znovu povolit horizontální navýšení kapacity čtení na úrovni Premium nebo Pro důležité obchodní informace služby. Tyto možnosti nejsou pro spravovanou instanci SQL k dispozici, protože škálování na více čtení není možné zakázat.

Poznámka:

U jednoúčelových databází a databází elastického fondu je možnost zakázat škálování čtení na více instancí, aby byla zajištěna zpětná kompatibilita. U spravovaných instancí Pro důležité obchodní informace není možné zakázat škálování na více instancí.

portál Azure

Pro Službu Azure SQL Database můžete spravovat nastavení škálování čtení na více instancí v podokně Databáze compute a úložiště, které je dostupné v části Nastavení. Použití webu Azure Portal k povolení nebo zakázání horizontálního navýšení kapacity čtení není pro spravovanou instanci Azure SQL k dispozici.

PowerShell

Důležité

Modul Azure Resource Manager v PowerShellu je stále podporovaný, ale veškerý budoucí vývoj je určený pro modul Az.Sql. Modul Azure Resource Manageru bude dál dostávat opravy chyb až do alespoň prosince 2020. Argumenty pro příkazy v modulu Az a v modulech Azure Resource Manageru jsou podstatně identické. Další informace o kompatibilitě najdete v tématu Představení nového modulu Az Azure PowerShellu.

Správa horizontálního navýšení kapacity čtení v Azure PowerShellu vyžaduje verzi Azure PowerShellu z prosince 2016 nebo novější. Nejnovější verzi PowerShellu najdete v Azure PowerShellu.

Ve službě Azure SQL Database můžete zakázat nebo znovu povolit horizontální navýšení kapacity čtení v Azure PowerShellu vyvoláním rutiny Set-AzSqlDatabase a předáním požadované hodnoty (Enabled nebo Disabled) parametru -ReadScale . Zakázání horizontálního navýšení kapacity čtení pro službu SQL Managed Instance není k dispozici.

Zakázání horizontálního navýšení kapacity čtení u existující databáze (nahrazení položek v úhlových závorkách správnými hodnotami pro vaše prostředí a vyřazení úhlových závorek):

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

Zakázání horizontálního navýšení kapacity čtení v nové databázi (nahrazení položek v úhlových závorkách správnými hodnotami pro vaše prostředí a vyřazení úhlových závorek):

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

Opětovné povolení horizontálního navýšení kapacity čtení u existující databáze (nahrazení položek v úhlových závorkách správnými hodnotami pro vaše prostředí a vyřazení úhlových závorek):

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

REST API

Chcete-li vytvořit databázi se zakázaným škálováním na více instancí čtení nebo změnit nastavení existující databáze, použijte následující metodu readScale s vlastností nastavenou na Enabled hodnotu nebo Disabled, jako v následujícím ukázkovém požadavku.

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"
   }
}

Další informace naleznete v tématu Databáze – Vytvoření nebo aktualizace.

tempdb Použití databáze v replice jen pro čtení

Databáze tempdb na primární replice se nereplikuje na repliky jen pro čtení. Každá replika má vlastní tempdb databázi, která se vytvoří při vytvoření repliky. Tím se zajistí, že bude možné aktualizovat tempdb a během provádění dotazu je možné ho upravit. Pokud vaše úloha jen pro čtení závisí na použití tempdb objektů, měli byste tyto objekty vytvořit jako součást stejné úlohy a připojit se k replice jen pro čtení.

Použití horizontálního navýšení kapacity čtení s geograficky replikovanými databázemi

Geograficky replikované sekundární databáze mají stejnou architekturu vysoké dostupnosti jako primární databáze. Pokud se připojujete k geograficky replikované sekundární databázi s povoleným horizontálním navýšením kapacity čtení, vaše relace ApplicationIntent=ReadOnly se směrují do jedné z replik s vysokou dostupností stejným způsobem, jakým se směrují v primární zapisovatelné databázi. Relace bez ApplicationIntent=ReadOnly směrování na primární repliku geograficky replikované sekundární, což je také jen pro čtení.

V tomto případě může vytvoření geografické repliky poskytnout několik dalších replik jen pro čtení pro primární databázi pro čtení i zápis. Každá další geografická replika poskytuje další sadu replik jen pro čtení. Geografické repliky je možné vytvořit v libovolné oblasti Azure, včetně oblasti primární databáze.

Poznámka:

Neexistuje automatické kruhové dotazování ani žádné jiné směrování s vyrovnáváním zatížení mezi replikami geograficky replikované sekundární databáze, s výjimkou geografické repliky Hyperscale s více než jednou replikou vysoké dostupnosti. V takovém případě se relace se záměrem jen pro čtení distribuují do všech replik vysoké dostupnosti geografické repliky.

Podpora funkcí u replik jen pro čtení

Seznam chování některých funkcí na replikách jen pro čtení:

  • Na replikách jen pro čtení je auditování povolené automaticky. Další informace o hierarchii složek úložiště, konvencích vytváření názvů a formátu protokolu najdete v tématu Formát protokolu auditování služby SQL Database.
  • Query Performance Insight spoléhá na data z úložiště dotazů, která v současné době nesleduje aktivitu repliky jen pro čtení. Query Performance Insight nezobrazuje dotazy, které se spouští na replice jen pro čtení.
  • Automatické ladění závisí na úložišti dotazů, jak je podrobně popsáno v dokumentu automatického ladění. Automatické ladění funguje jenom pro úlohy spuštěné na primární replice.

Další kroky

  • Informace o nabídce hyperškálování služby SQL Database najdete v tématu Úroveň služby Hyperscale.