Přesměrování zatížení dotazů jen pro čtení pomocí replik jen pro čtení

PLATÍ PRO: Azure SQL Database Azure SQL Managed Instance

v rámci architektury vysoké dostupnostije každá samostatná databáze, databáze elastického fondu a spravovaná instance v Premium a Pro důležité obchodní informace úroveň služby automaticky zřízena s primární replikou pro čtení a zápis a několika sekundárními replikami jen pro čtení. Sekundární repliky se zřídí se stejnou výpočetní velikostí jako primární replika. Funkce škálování čtení na více instancí umožňuje přesměrovat úlohy jen pro čtení pomocí výpočetní kapacity jedné z replik jen pro čtení namísto jejich spuštění v replice pro čtení i zápis. Tímto způsobem mohou být některé úlohy jen pro čtení izolované od úloh pro čtení a zápis a nebudou mít vliv na jejich výkon. Tato funkce je určená pro aplikace, které zahrnují logicky oddělené úlohy jen pro čtení, jako je například analýza. v úrovních služby Premium a Pro důležité obchodní informace můžou aplikace získat výhody výkonu na základě této další kapacity bez dalších poplatků.

Funkce škálování na více instancí je k dispozici také v úrovni služby škálování na více instancí, pokud je přidána alespoň jedna sekundární replika . Sekundární pojmenované repliky s velkými objemy dat poskytují nezávislé škálování, izolaci přístupu, izolaci úloh, obrovské škálování čtení a další výhody. Pro úlohy vyrovnávání zatížení, které vyžadují více prostředků, než je k dispozici v jedné sekundární replice HA, lze použít více sekundárních replik ha .

Architektura vysoké dostupnosti pro úrovně služeb Basic, Standard a Pro obecné účely nezahrnuje žádné repliky. Funkce škálování pro čtení na více instancí není v těchto úrovních služby k dispozici. Geografické repliky ale můžou v těchto úrovních služeb poskytovat podobné funkce.

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

Repliky jen pro čtení

funkce škálování čtení na více instancí je ve výchozím nastavení povolená pro nové databáze Premium, Pro důležité obchodní informace a škálování.

Poznámka

V úrovni služby Pro důležité obchodní informace Managed instance je škálování pro čtení zapnuté a pro databáze ve velkém měřítku s aspoň jednou sekundární replikou.

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

pokud chcete zajistit, aby se aplikace připojovala k primární replice bez ohledu na ApplicationIntent nastavení v připojovacím řetězci SQL, je nutné explicitně zakázat horizontální navýšení kapacity čtení při vytváření databáze nebo změny konfigurace. pokud například upgradujete databázi ze úrovně Standard nebo Pro obecné účely na 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 pro čtení.

Poznámka

v replikách jen pro čtení nejsou podporované funkce pro úložiště dotazů a SQL profileru.

Konzistence dat

Změny dat provedené v primární replice se šíří asynchronně do replik jen pro čtení. V rámci relace připojené k replice, která je jen pro čtení, jsou čtení vždycky v souladu s akcemi. Nicméně vzhledem k tomu, že latence šíření dat je proměnná, můžou různé repliky vracet data v mírném rozdílovém čase relativně k primárnímu a druhému. Pokud replika jen pro čtení nebude k dispozici 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 čtení i zápisu a hned ji načte pomocí relace jen pro čtení, je možné, že nejnovější změny nejsou hned viditelné v replice jen pro čtení.

Obvyklá latence šíření dat mezi primární replikou a replikami jen pro čtení se liší v rozsahu od desítkové milisekundy po jednociferné číslo sekund. Neexistují však žádné pevné horní meze latence šíření dat. Podmínky, jako je například vysoké využití prostředků v replice, mohou výrazně prodloužit latenci. Aplikace, které vyžadují zaručenou konzistenci dat napříč relacemi, nebo vyžadují, aby potvrzená data byla okamžitě čitelná, měla by používat primární repliku.

Poznámka

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í repliky jen pro čtení

Pokud pro databázi povolíte škálování pro čtení, ApplicationIntent možnost v připojovacím řetězci poskytovaná klientem určí, zda je připojení směrováno do repliky zápisu nebo do repliky jen pro čtení. Konkrétně, pokud ApplicationIntent je hodnota ReadWrite (výchozí hodnota), připojení bude Přesměrováno na repliku pro čtení i zápis. Jedná se o shodu s chováním, když není ApplicationIntent součástí připojovacího řetězce. Pokud ApplicationIntent je hodnota ReadOnly , připojení se směruje do repliky jen pro čtení.

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

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

Některý z následujících připojovacích řetězců připojí klienta k replice pro čtení i zápis (nahrazující položky v lomených závorkách se správnými hodnotami pro vaše prostředí a vyřazením lomených závorek):

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í, zda je připojení k replice jen pro čtení

Spuštěním následujícího dotazu v kontextu vaší databáze můžete ověřit, zda jste připojeni k replice jen pro čtení. Pokud jste připojeni k replice jen pro čtení, vrátí se READ_ONLY.

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

Poznámka

v rámci Premium a Pro důležité obchodní informace úrovní služeb jsou v daném okamžiku k dispozici pouze jedna replika jen pro čtení. Škálovatelné rozšíření podporuje více replik jen pro čtení.

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

Pokud jste připojeni k replice jen pro čtení, zobrazení dynamické správy (zobrazení dynamické správy) odráží stav repliky a lze k nim zadat dotaz pro účely monitorování a řešení potíží. Databázový stroj nabízí více zobrazení, která zveřejňují širokou škálu monitorovaných dat.

Pro monitorování replik 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ě CPU, v/v v/v, a využití zápisu do protokolu vzhledem k omezením cíle služby.
sys.dm_os_wait_stats Poskytuje agregované statistiky čekání pro instanci databázového stroje.
sys.dm_database_replica_states Poskytuje stav repliky a statistiku synchronizace. Velikost fronty znovu a rychlost opakování slouží jako indikátory latence šíření dat v replice jen pro čtení.
sys.dm_os_performance_counters Poskytuje čítače výkonu databázového stroje.
sys.dm_exec_query_stats Poskytuje statistiku spouštění podle dotazů, jako je počet spuštění, použ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ů v mezipaměti.
sys.dm_exec_query_profiles Poskytuje dotaz v reálném čase během provádění dotazů.
sys.dm_exec_query_plan_stats () Poskytuje poslední známý skutečný plán spuštění včetně statistik za běhu pro dotaz.
sys.dm_io_virtual_file_stats () Poskytuje statistiku vstupně-výstupních operací úložiště, propustnosti a latence pro všechny soubory databáze.

Poznámka

sys.resource_statsZobrazení dynamické správy a sys.elastic_pool_resource_stats v logické hlavní databázi vrátí data o využití prostředků primární repliky.

Monitorování replik jen pro čtení s rozšířenými událostmi

Relaci rozšířené události nelze vytvořit, je-li připojena k replice určené jen pro čtení. v Azure SQL Database však definice relací rozšířených událostí , které byly vytvořeny a změněny v primární replice, replikovány do replik jen pro čtení, včetně geografických replik a zachytí události do replik jen pro čtení.

Relace rozšířené události v replice jen pro čtení, která je založena na definici relace z primární repliky, může být spuštěna a zastavena nezávisle na primární replice. Když je relace rozšířené události na primární replice Vyřazená, vynechává se taky u všech replik jen pro čtení.

Úroveň izolace transakce v replikách jen pro čtení

Dotazy, které jsou spouštěny v replikách jen pro čtení, jsou vždy mapovány na úroveň izolace transakce snímku . Izolace snímku používá správu verzí řádků, aby nedocházelo k blokování scénářů, kde čtenáři blokují zapisovače.

Ve výjimečných případech, pokud transakce izolace snímku přistupuje k metadatům objektů, které byly upraveny v jiné souběžné transakci, může docházet k chybě 3961, v databázi%. * ls se nezdařila transakce izolace snímku, protože objekt, k němuž byl přístup proveden příkazem, byl od spuštění této transakce ZMĚNĚN příkazem DDL v jiné souběžné transakci. 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ímku. "

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

Dotazy, které běží na replikách jen pro čtení, musí mít přístup k metadatům pro objekty, na které se odkazuje v dotazu (tabulky, indexy, statistiky atd.). Ve výjimečných případech platí, že pokud se metadata objektu mění v primární replice, zatímco dotaz drží zámek na stejném objektu repliky jen pro čtení, může dotaz blokovat proces, který aplikuje změny z primární repliky do repliky jen pro čtení. Pokud by byl takový dotaz po dlouhou dobu spuštěný, mohl by být replika jen pro čtení výrazně nesynchronizovaná s primární replikou. pro repliky, které jsou potenciálními cíli převzetí služeb při selhání (sekundární repliky v Premium a Pro důležité obchodní informace úrovně služeb, repliky HA s vysokou úrovní a všechny geografické repliky), by taky mohlo dojít k zpoždění obnovení databáze v případě, že dojde k převzetí služeb při selhání, což by způsobilo delší výpadek.

Pokud dlouhotrvající dotaz na repliku jen pro čtení přímo nebo nepřímo způsobuje tento druh blokování, může být automaticky ukončen, aby nedocházelo k nadměrné latenci dat a potenciálnímu dopadu na dostupnost databáze. V relaci se zobrazí chyba 1219, "Vaše relace byla odpojena z důvodu operace DDL s vysokou prioritou" nebo "Chyba 3947", "transakce byla přerušena, protože sekundární výpočet nedokázal zachytit znovu. Opakujte transakci. "

Poznámka

Pokud při spouštění dotazů na repliku jen pro čtení dojde k chybě 3961, 1219 nebo 3947, zkuste dotaz zopakovat. Další možností je zabránit operacím, které upraví metadata objektu (změny schématu, údržba indexu, aktualizace statistiky atd.) v primární replice, zatímco Dlouhotrvající dotazy se spouštějí na sekundárních replikách.

Tip

v Premium a Pro důležité obchodní informace úrovně služeb, když jsou připojeni k replice jen pro čtení, je redo_queue_size redo_rate možné použít sloupce a v sys.dm_database_replica_states DMV k monitorování procesu synchronizace dat, který slouží jako indikátory latence šíření dat v replice jen pro čtení.

Povolit a zakázat horizontální navýšení kapacity čtení

u Premium, Pro důležité obchodní informace a úrovní služeb s škálovatelným škálováním je ve výchozím nastavení povolené škálování čtení na více instancí. U úrovní služeb Basic, Standard a Pro obecné účely není možné povolit horizontální navýšení kapacity čtení. Pro databáze v rámci škálování s nulovými sekundárními replikami se automaticky zakáže škálování na více instancí.

Pomocí následujících metod můžete zakázat a znovu povolit škálování čtení u databází s jedním a elastickým fondem v Premium nebo Pro důležité obchodní informace služeb.

Poznámka

U databází s jedním fondem a databází elastického fondu je k dispozici možnost zakázat škálování čtení na více verzí kvůli zpětné kompatibilitě. U spravovaných instancí není možné u Pro důležité obchodní informace čtení zakázat škálování na více instancí.

portál Azure

Nastavení horizontálního navýšení velikosti pro čtení můžete spravovat v okně Konfigurace databáze.

PowerShell

Důležité

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

Správa škálování čtení na více Azure PowerShell vyžaduje verzi z prosince 2016 Azure PowerShell nebo novější. Nejnovější verzi PowerShellu najdete v tématu Azure PowerShell.

Škálování čtení v sadě Azure PowerShell můžete zakázat nebo znovu povolit vyvoláním rutiny Set-AzSqlDatabase a předáním požadované hodnoty ( nebo Enabled ) pro parametr Disabled -ReadScale .

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

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

Zakázání horizontálního navýšení velikosti čtení u nové databáze (nahrazení položek v hranatých závorkách správnými hodnotami pro vaše prostředí a vyhození lomených závorek):

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

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

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

REST API

Pokud chcete vytvořit databázi se zakázaným horizontálním navýšením velikosti čtení nebo změnit nastavení pro existující databázi, použijte následující metodu s vlastností nastavenou na nebo jako v následujícím ukázkovém readScale Enabled Disabled 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 najdete v tématu Databáze – Vytvoření nebo aktualizace.

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

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

Použití horizontálního navýšení velikosti čtení s geograficky replikovanou databází

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 velikosti pro čtení, vaše relace s se budou směrovat do jedné z replik s vysokou dostupností stejným způsobem, jakým se směrují na primární ApplicationIntent=ReadOnly zapisovatelné databázi. Relace bez se budou směrovat na primární repliku geograficky replikované sekundární databáze, která je také jen ApplicationIntent=ReadOnly pro čtení.

Tímto způsobem může vytvoření geografické repliky poskytnout více 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 jakékoli oblasti Azure, včetně oblasti primární databáze.

Poznámka

Mezi replikami geograficky replikované sekundární databáze s výjimkou geografické repliky Hyperscale s více než jednou replikou s ha-ka neexistuje žádné automatické kruhové dotazování ani jiné směrování s vyrovnáváním zatížení. V takovém případě se relace se záměrem jen pro čtení distribuují na všechny repliky geografické repliky s hašecí přístupem.

Podpora funkcí na replikách jen pro čtení

Seznam chování některých funkcí v replikách jen pro čtení je uvedený níže:

  • Auditování replik jen pro čtení je povoleno automaticky. Další podrobnosti o hierarchii složek úložiště, konvencích vytváření názvů a formátu protokolu najdete v SQL Database protokolu auditu.
  • Query Performance Insight spoléhá na data z úložiště dotazů, které v současné době nesleduje aktivitu na replice jen pro čtení. Query Performance Insight nebude zobrazovat dotazy, které se spouští v replice jen pro čtení.
  • Automatické ladění spoléhá na úložiště dotazů, jak je podrobně podrobně na dokumentu o automatickém ladění. Automatické ladění funguje jenom pro úlohy spuštěné na primární replice.

Další kroky