Sdílet prostřednictvím


Použijte repliky pouze pro čtení k odlehčení zpracování úloh dotazů pouze pro čtení

Platí pro: Azure SQL DatabaseAzure SQL Managed Instance

V rámci architektury s vysokou dostupností se každá jednotlivá databáze nebo databáze elastického fondu v úrovni služby Premium a Pro kritické obchodní potřeby se automaticky zřizuje 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 stejným výpočetním výkonem jako primární replika. Funkce škálování čtení umožňuje odlehčit úlohy určené pouze ke čtení použitím výpočetní kapacity jedné z replik určených pouze ke čtení, místo aby byly spouštěny na replice umožňující č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 Business Critical mohou aplikace využít výhod z hlediska výkonu pomocí této dodatečné kapacity, a to bez dalších nákladů.

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í hyperscale pojmenované repliky poskytují nezávislé škálování, izolaci přístupu, izolaci úloh, podporu pro různé scénáře škálování čtecích operací 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 v jedné sekundární replice vysoké dostupnosti, je možné použít několik sekundárních replik s vysokou dostupností (HA ).

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 pro převzetí služeb při selhání může naslouchací proces skupiny převzetí služeb při selhání v režimu pouze pro čtení poskytovat podobné funkce.

Následující diagram znázorňuje funkci pro databáze úrovně Premium a Business Critical a spravované instance SQL.

Diagram znázorňující repliky jen pro čtení

Funkce škálování čtení je ve výchozím nastavení povolena pro nové databáze Premium, Business Critical a Hyperscale.

Poznámka:

Škálování čtení je vždy povoleno v úrovni Business Critical pro spravovanou instanci 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 pro Azure SQL Database, pokud chcete zajistit, aby se aplikace připojovala k primární replice bez ohledu na nastavení v SQL připojovacím řetězci, musíte explicitně zakázat read scale-out při vytváření databáze nebo při změně její konfigurace. Pokud například upgradujete databázi z úrovně Standard nebo Obecný účel na úroveň Premium nebo Podnikově kritický a chcete zajistit, aby všechna vaše připojení nadále směřovala na primární repliku, zakažte škálování čtení. Podrobnosti o tom, jak jej zakázat, najdete v tématu Povolení a zakázání škálování č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. Pro všechny typy replik však platí, že čtení z repliky určené jen pro čtení je vždy asynchronní vůči primární replice. V rámci relace připojené k replice jen pro čtení jsou čtení vždy transakčně 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 zápisu (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řipojte se k replice určené pouze pro čtení

Když pro databázi povolíte škálování pro čtení, možnost ApplicationIntent v připojovacím řetězci poskytovaném klientem určuje, jestli je připojení směrováno na repliku pro zápis nebo na repliku pouze pro čtení. Konkrétně, pokud je hodnota ApplicationIntent nastavena na ReadWrite (výchozí hodnota), připojení se směruje na repliku pro čtení a zápis. Toto chování je stejné jako chování, pokud ApplicationIntent není součástí připojovací řetězec. Pokud je ApplicationIntent hodnota ReadOnly, připojení se přesměruje na repliku pouze 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=<password>;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:

Snímek obrazovky s tlačítkem Možnosti aplikace SSMS

Vyberte Další parametry připojení a zadejte ApplicationIntent=ReadOnlya pak vyberte Připojit:

Snímek obrazovky s dalšími parametry připojení SSMS

Některý z následujících připojovacích řetězců připojí klienta k replice pro čtení i zápis (položky ve špičatých závorkách nahraďte správnými hodnotami pro vaše prostředí a vynechejte špičaté závorky):

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

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

Ověřte, že připojení je k replice pouze 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řipojeni k replice jen pro čtení.

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

Poznámka:

V úrovních služeb Premium a Business Critical je v daném okamžiku přístupný pouze jeden z replik pouze pro čtení. Hyperscale podporuje více replik jen pro čtení.

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

Můžete monitorovat repliky jen pro čtení, včetně zobrazení dynamické správy, rozšířených událostí a sledování databáze (Preview).

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 zásobníku znovu a rychlost obnovy slouží jako ukazatele latence propagace dat na replice pouze 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í dynamické správy sys.resource_stats a sys.elastic_pool_resource_stats v logické databázi master poskytují údaje o využití prostředků primární repliky.

Monitorujte repliky 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 a Azure SQL Managed Instance se však definice relací rozšířených událostí v oboru databáze, které jsou vytvořeny a pozměněny na primární replice, replikují na repliky jen pro čtení, včetně geografických replik, a zaznamenávají události na těchto replikách.

Ve službě Azure SQL Database je možné spustit a zastavit rozšířenou relaci událostí na replice jen pro čtení, která je založená na definici relace z primární repliky, a zastavit ji nezávisle na relaci na primární replice.

Pokud chcete v Azure SQL Managed Instance spustit trasování na replice jen pro čtení, musíte nejprve spustit trasování na primární replice, abyste mohli trasování spustit na replice jen pro čtení. Pokud trasování na primární replice nespustíte, při pokusu o spuštění trasování na replice jen pro čtení se zobrazí následující chyba:

Msg 3906, úroveň 16, stav 2, řádek 1. Nepodařilo se aktualizovat databázi "master", protože databáze je pouze pro čtení.

Po spuštění trasování nejprve na primární replice pak na replice jen pro čtení můžete trasování na primární replice zastavit.

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

  1. Připojte Průzkumník objektů SSMS nebo okno dotazu k replice jen pro čtení.
  2. Zastavte relaci na replice pouze pro čtení výběrem možnosti Zastavit relaci v místní nabídce relace v Průzkumníku objektů nebo spuštěním ALTER EVENT SESSION [session-name-here] ON DATABASE STATE = STOP; v okně dotazu.
  3. Připojte Průzkumník objektů nebo okno dotazu k primární replice.
  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í

Transakce na replikách s přístupem jen pro čtení vždy používají úroveň izolace transakce snímku, bez ohledu na úroveň izolace transakce relace a bez ohledu na jakékoli návrhy 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 platí, že pokud transakce izolace snímku přistupuje k metadatům objektů, které byly změněny v jiné souběžné transakci, může se zobrazit chyba 3961, transakce izolace snímku selhala v databázi "název databáze", 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. Je zakázáno, protože metadata nejsou ve verzi. 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 pouze pro čtení potřebují přístup k metadatům pro objekty, na které v dotazu odkazují (tabulky, indexy, statistiky atd.). Ve vzácných případech, pokud je metadata objektu změněna na primární replice, zatímco dotaz drží zámek na stejném objektu na replice pouze pro čtení, může dotaz blokovat proces, který aplikuje změny z primární repliky na repliku pouze 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é mohou sloužit jako cíle pro převzetí služeb při selhání (sekundární repliky v úrovních Premium a Business Critical, repliky hyperscale s vysokou dostupností a všechny geografické repliky), by to také zpozdilo obnovu databáze v případě selhání, což by způsobilo delší výpadek, než se očekávalo.

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 obdrží chybu 1219, Vaše relace byla odpojena kvůli operaci DDL s vysokou prioritou nebo chybu 3947, transakce byla zrušena, protože sekundární výpočetní jednotka selhala v dohnání operací redo. Zkuste transakci zopakovat.

Vzhledem k tomu, že transakce na replikách jen pro čtení vždy používají úroveň izolace transakce snímku, může dlouhotrvající dotaz na replice jen pro čtení blokovat stínové nebo trvalé úložiště verzí (PVS), pokud čte nedávno odstraněné řádky nebo starší verze řádků. Zpoždění při čištění PVS nebo stínových kopií může mít vliv na úlohy na primární replice. Další informace o řešení potíží se zpožděními čištění PVS najdete v tématu Monitorování a řešení potíží s akcelerovaným obnovením databáze.

Naopak pokud dlouhotrvající dotaz na repliku jen pro čtení čte nedávno odstraněné řádky nebo starší verze řádků a tyto řádky nebo verze už nemusí být dostupné na primární replice (například kvůli operaci škálování), dotaz se ukončí s chybou 3948, transakce byla ukončena kvůli změně stavu konfigurace nebo dostupnosti repliky, anebo kvůli odstranění "ghost" záznamů na primární a sekundární replice dostupnosti, které mohou být potřebné pro dotazy spuštěné v rámci izolace snímků. Opakujte transakci.

Poznámka:

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

Návod

V úrovních služby Premium a Business Critical se při připojení na repliky redo_queue_size a redo_rate pouze pro čtení dají k monitorování procesu synchronizace dat použít sloupce v zobrazení dynamické správy sys.dm_database_replica_states, které slouží jako indikátory latence šíření dat na replice pouze pro čtení.

Povolení a zakázání škálování čtení pro službu SQL Database

U služby SQL Managed Instance je škálování čtení automaticky povoleno na úrovni služby Business Critical a není dostupné na úrovni služby General Purpose. Zakázání a opětovné rozšíření kapacity čtení není možné.

U služby SQL Database je ve výchozím nastavení povoleno škálování pro čtení na úrovních Premium, Business Critical a Hyperscale. Nelze povolit škálování čtení 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í portálu Azure a Azure PowerShell zakázat a znovu povolit škálování čtení v úrovních služby Premium nebo Business Critical. Tyto možnosti nejsou pro spravovanou instanci SQL dostupné, protože škálování pro čtení nelze zakázat.

Poznámka:

U jednoduchých databází a databází elastického fondu je možnost zakázat škálování čtení, aby byla zajištěna zpětná kompatibilita. U spravovaných instancí Business Critical nelze zakázat čtení škálovat.

portál Azure

U služby Azure SQL Database můžete spravovat nastavení škálování čtení na podokně Compute + Úložiště, které je dostupné v části Nastavení. Pomocí Azure portálu nelze povolit nebo zakázat škálování čtení pro spravovanou instanci Azure SQL.

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 PowerShellu Azure Resource Manageru (AzureRM) už nepřijímá opravy chyb. 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 vydání Azure PowerShellu z prosince 2016 nebo novější verzi. 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í škálování čtení pro službu SQL Managed Instance není dostupné.

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 rozšířením čtení nebo změnit nastavení existující databáze, použijte následující metodu s vlastností readScale nastavenou na Enabled nebo Disabled, jak je uvedeno 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.

Použijte databázi tempdb na replice pouze 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žijte rozšíření č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 rozšiřováním kapacity pro čtení, vaše relace s ApplicationIntent=ReadOnly se směrují do jedné z replik s vysokou dostupností stejným způsobem jako v primární zapisovatelné databázi. Relace bez ApplicationIntent=ReadOnly jsou směrovány na primární repliku geograficky replikované sekundární repliky, která je také pouze 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 pouze pro čtení. Geografické repliky je možné vytvořit v libovolné oblasti Azure, včetně oblasti primární databáze.

Poznámka:

Neexistuje automatické střídání ani žádné jiné směrování s vyrovnáváním zatížení mezi replikami sekundární databáze s geografickou replikací, kromě případu, kdy Hyperscale geografická replika má více než jednu repliku 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 pouze pro čtení: