Použití replik jen pro čtení k přesměrování zpracování úloh dotazů jen pro čtení
Platí pro: Azure SQL Database Azure 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.
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í k replice 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 ReadOnly
hodnotaApplicationIntent
, 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
Vyberte Další parametry připojení a zadejte ApplicationIntent=ReadOnly
a pak vyberte Připojit.
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 a Azure SQL Managed Instance se však definice relací rozšířených událostí v oboru databáze vytvářejí a mění v primární replice repliky jen pro čtení na repliky jen pro čtení, včetně geografických replik, a zaznamenávají události na replikách jen pro čtení.
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, level 16, State 2, Line 1 Se nepodařilo aktualizovat "hlavní" databázi, protože databáze je jen 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 vynechat relaci události na replice jen pro čtení, postupujte takto:
- Připojte Průzkumník objektů SSMS nebo okno dotazu k replice jen pro čtení.
- 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. - Připojte Průzkumník objektů nebo okno dotazu k primární replice.
- 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
U služby 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.