Použití replik jen pro čtení k vyrovnávání zatížení úloh dotazů jen pro čteníUse read-only replicas to load-balance read-only query workloads

Poznámka

Tento článek je aktualizovaný a využívá nový modul Az Azure PowerShellu.This article has been updated to use the new Azure PowerShell Az module. Můžete dál využívat modul AzureRM, který bude dostávat opravy chyb nejméně do prosince 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Další informace o kompatibilitě nového modulu Az a modulu AzureRM najdete v tématu Seznámení s novým modulem Az Azure PowerShellu.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Pokyny k instalaci modulu Az najdete v tématu věnovaném instalaci Azure PowerShellu.For Az module installation instructions, see Install Azure PowerShell.

V rámci architektury vysoké dostupnostise každá databáze na úrovni služby Premium a pro důležité obchodní informace automaticky zřídí s primární replikou a několika sekundárními replikami.As part of the High Availability architecture, each database in the Premium and Business Critical service tier is automatically provisioned with a primary replica and several secondary replicas. Sekundární repliky se zřídí se stejnou výpočetní velikostí jako primární replika.The secondary replicas are provisioned with the same compute size as the primary replica. Funkce škálování čtení na více instancí umožňuje vyrovnávat zatížení SQL Database úloh jen pro čtení pomocí kapacity jedné z replik jen pro čtení namísto sdílení repliky pro čtení i zápis.The Read Scale-Out feature allows you to load-balance SQL Database read-only workloads using the capacity of one of the read-only replicas instead of sharing the read-write replica. Úloha jen pro čtení díky tomu bude izolovaná od hlavní úlohy pro čtení i zápis a nebude mít vliv na její výkon.This way the read-only workload will be isolated from the main read-write workload and will not affect its performance. Tato funkce je určená pro aplikace, které zahrnují logicky oddělené úlohy jen pro čtení, jako je například analýza.The feature is intended for the applications that include logically separated read-only workloads, such as analytics. V úrovních služeb 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ů.In the Premium and Business Critical service tiers, applications could gain performance benefits using this additional capacity at no extra cost.

Funkce škálování pro čtení je k dispozici také v úrovni služby škálování na více instancí, pokud je vytvořena alespoň jedna sekundární replika.The Read Scale-Out feature is also available in the Hyperscale service tier when at least one secondary replica is created. Více sekundárních replik lze použít, pokud úlohy jen pro čtení vyžadují více prostředků, než je k dispozici v jedné sekundární replice.Multiple secondary replicas can be used if read-only workloads require more resources than available on one secondary replica. Architektura vysoké dostupnosti pro úrovně služeb Basic, Standard a Pro obecné účely nezahrnuje žádné repliky.The High Availability architecture of Basic, Standard, and General Purpose service tiers does not include any replicas. Funkce škálování pro čtení na více instancí není v těchto úrovních služby k dispozici.The Read Scale-Out feature is not available in these service tiers.

Následující diagram znázorňuje použití databáze Pro důležité obchodní informace.The following diagram illustrates it using a Business Critical database.

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 v databázi s měřítkem.The Read Scale-Out feature is enabled by default on new Premium, Business Critical, and Hyperscale databases. V případě velkého rozsahu je pro nové databáze ve výchozím nastavení vytvořena jedna sekundární replika.For Hyperscale, one secondary replica is created by default for new databases. Pokud je připojovací řetězec SQL nakonfigurován pomocí ApplicationIntent=ReadOnly, aplikace bude bránu přesměrována do repliky určené jen pro čtení této databáze.If your SQL connection string is configured with ApplicationIntent=ReadOnly, the application will be redirected by the gateway to a read-only replica of that database. Informace o použití vlastnosti ApplicationIntent naleznete v tématu určení záměru aplikace.For information on how to use the ApplicationIntent property, see Specifying Application Intent.

Pokud chcete zajistit, aby se aplikace připojovala k primární replice bez ohledu na nastavení ApplicationIntent 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 při změně její konfigurace.If you wish to ensure that the application connects to the primary replica regardless of the ApplicationIntent setting in the SQL connection string, you must explicitly disable read scale-out when creating the database or when altering its configuration. Pokud například upgradujete databázi ze úrovně Standard nebo Pro obecné účely na úroveň Premium, Pro důležité obchodní informace nebo úrovně škálování 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í.For example, if you upgrade your database from Standard or General Purpose tier to Premium, Business Critical or Hyperscale tier and want to make sure all your connections continue to go to the primary replica, disable Read Scale-out. For details on how to disable it, see Enable and disable Read Scale-Out.

Poznámka

Dotazy na úložiště dat, rozšířené události, funkce SQL Profiler a audit nejsou podporovány v replikách jen pro čtení.Query Data Store, Extended Events, SQL Profiler and Audit features are not supported on the read-only replicas.

Konzistence datData consistency

Jednou z výhod repliky je, že repliky jsou vždycky v konzistentním stavu, ale v různých časových okamžicích může dojít k malé latenci mezi různými replikami.One of the benefits of replicas is that the replicas are always in the transactionally consistent state, but at different points in time there may be some small latency between different replicas. Škálování na více instancí podporuje konzistenci na úrovni relace.Read Scale-Out supports session-level consistency. To znamená, že pokud se relace jen pro čtení znovu připojí po chybě připojení způsobené nedostupností repliky, může být přesměrována do repliky, která není 100%, s replikou pro čtení i zápis.It means, if the read-only session reconnects after a connection error caused by replica unavailability, it may be redirected to a replica that is not 100% up-to-date with the read-write replica. Podobně platí, že pokud aplikace zapisuje data pomocí relace čtení i zápisu a hned ji načte pomocí relace jen pro čtení, je možné, že nejnovější aktualizace nejsou hned viditelné v replice.Likewise, if an application writes data using a read-write session and immediately reads it using a read-only session, it is possible that the latest updates are not immediately visible on the replica. Latence je způsobena operací opakování asynchronního transakčního protokolu.The latency is caused by an asynchronous transaction log redo operation.

Poznámka

Latence replikace v rámci oblasti je nízká a tato situace je vzácná.Replication latencies within the region are low and this situation is rare.

Připojení k replice jen pro čteníConnect to a read-only replica

Povolíte-li pro databázi škálování na více instancí, možnost ApplicationIntent v připojovacím řetězci, kterou poskytuje klient, určí, zda je připojení směrováno do repliky zápisu nebo do repliky jen pro čtení.When you enable Read Scale-Out for a database, the ApplicationIntent option in the connection string provided by the client dictates whether the connection is routed to the write replica or to a read-only replica. Konkrétně Pokud je hodnota ApplicationIntent ReadWrite (výchozí hodnota), připojení bude Přesměrováno na repliku pro čtení a zápis databáze.Specifically, if the ApplicationIntent value is ReadWrite (the default value), the connection will be directed to the database’s read-write replica. To je stejné jako stávající chování.This is identical to existing behavior. Pokud je hodnota ApplicationIntent ReadOnly, připojení se směruje do repliky jen pro čtení.If the ApplicationIntent value is ReadOnly, the connection is routed to a read-only replica.

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):For example, the following connection string connects the client to a read-only replica (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

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):Either of the following connection strings connects the client to a read-write replica (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

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íVerify that a connection is to a read-only replica

Spuštěním následujícího dotazu můžete ověřit, zda jste připojeni k replice, která je jen pro čtení.You can verify whether you are connected to a read-only replica by running the following query. Vrátí READ_ONLY, když se připojí k replice jen pro čtení.It will return READ_ONLY when connected to a read-only replica.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')

Poznámka

V jednom okamžiku pouze jedna z replik AlwaysON je přístupná pro relace jen pro čtení.At any given time only one of the AlwaysON replicas is accessible by the ReadOnly sessions.

Monitorování a řešení potíží s replikou jen pro čteníMonitoring and troubleshooting read-only replica

Když jste připojeni k replice jen pro čtení, můžete k metrikám výkonu přistupovat pomocí sys.dm_db_resource_stats DMV.When connected to a read-only replica, you can access the performance metrics using the sys.dm_db_resource_stats DMV. Pro přístup ke statistickým údajům o plánu dotazů použijte sys.dm_exec_query_stats, sys.dm_exec_query_plan a sys.dm_exec_sql_text zobrazení dynamické správy.To access query plan statistics, use the sys.dm_exec_query_stats, sys.dm_exec_query_plan and sys.dm_exec_sql_text DMVs.

Poznámka

DMV sys.resource_stats v logické hlavní databázi vrátí využití CPU a data úložiště primární repliky.The DMV sys.resource_stats in the logical master database returns CPU usage and storage data of the primary replica.

Povolit a zakázat horizontální navýšení kapacity čteníEnable and disable Read Scale-Out

Ve výchozím nastavení je škálování čtení na více instancí povolené na úrovních Premium, Pro důležité obchodní informace a škálování služby.Read Scale-Out is enabled by default on Premium, Business Critical and Hyperscale service tiers. U úrovní služeb Basic, Standard a Pro obecné účely není možné povolit horizontální navýšení kapacity čtení.Read Scale-Out cannot be enabled in Basic, Standard, or General Purpose service tiers. Pro databáze v rámci škálování s nakonfigurovanou instancí s 0 je automatické škálování na více instancí zakázané.Read Scale-Out is automatically disabled on Hyperscale databases configured with 0 replicas.

Můžete zakázat a znovu povolit horizontální navýšení kapacity pro čtení v izolovaných databázích a databázích elastických fondů na úrovni Premium nebo Pro důležité obchodní informace pomocí následujících metod.You can disable and re-enable Read Scale-Out on single databases and elastic pool databases in Premium or Business Critical service tier using the following methods.

Poznámka

Možnost zakázat horizontální navýšení kapacity čtení je k dispozici kvůli zpětné kompatibilitě.The ability to disable Read Scale-Out is provided for backward compatibility.

portál AzureAzure portal

V okně Konfigurovat databázi můžete spravovat nastavení škálování pro čtení.You can manage the Read Scale-out setting on the Configure database blade.

PowerShellPowerShell

Důležité

Modul Azure Resource Manager PowerShellu (RM) je stále podporován Azure SQL Database, ale všechny budoucí vývojové prostředí jsou k dispozici pro modul AZ. SQL.The PowerShell Azure Resource Manager (RM) module is still supported by Azure SQL Database, but all future development is for the Az.Sql module. V modulu AzureRM bude i nadále docházet k opravám chyb až do prosince 2020.The AzureRM module will continue to receive bug fixes until at least December 2020. Argumenty pro příkazy v modulech AZ a v modulech AzureRm jsou v podstatě identické.The arguments for the commands in the Az module and in the AzureRm modules are substantially identical. Další informace o kompatibilitě najdete v tématu představení nového Azure PowerShell AZ Module.For more about their compatibility, see Introducing the new Azure PowerShell Az module.

Správa škálování čtení na více instancí v Azure PowerShell vyžaduje vydání Azure PowerShell verze z prosince 2016 nebo novější.Managing Read Scale-Out in Azure PowerShell requires the December 2016 Azure PowerShell release or newer. Nejnovější verzi PowerShellu najdete v tématu Azure PowerShell.For the newest PowerShell release, see Azure PowerShell.

Můžete zakázat nebo znovu povolit horizontální navýšení kapacity čtení v Azure PowerShell vyvoláním rutiny set-AzSqlDatabase a předáním požadované hodnoty – Enabled nebo Disabled--pro parametr -ReadScale.You can disable or re-enable Read Scale-Out in Azure PowerShell by invoking the Set-AzSqlDatabase cmdlet and passing in the desired value – Enabled or Disabled -- for the -ReadScale parameter.

Postup zakázání horizontálního navýšení kapacity pro čtení v existující databázi (výměna položek v lomených závorkách se správnými hodnotami pro vaše prostředí a vyřazení lomených závorek):To disable read scale-out on an existing database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

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

Postup zakázání horizontálního navýšení kapacity pro čtení v nové databázi (výměna položek v lomených závorkách se správnými hodnotami pro vaše prostředí a vyřazení ostrých závorek):To disable read scale-out on a new database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

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

Opětovné povolení horizontálního navýšení kapacity pro čtení v existující databázi (výměna položek v lomených závorkách se správnými hodnotami pro vaše prostředí a vyřazení lomených závorek):To re-enable read scale-out on an existing database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

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

REST APIREST API

Pokud chcete vytvořit databázi s vypnutým škálováním pro čtení nebo změnit nastavení pro existující databázi, použijte následující metodu s vlastností readScale nastavenou na Enabled nebo Disabled jako v níže uvedené ukázkové žádosti.To create a database with read scale-out disabled, or to change the setting for an existing database, use the following method with the readScale property set to Enabled or Disabled as in the below sample request.

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řit nebo aktualizovat.For more information, see Databases - Create or Update.

Použití databáze TempDB v replice jen pro čteníUsing TempDB on read-only replica

Databáze TempDB není replikována do replik jen pro čtení.The TempDB database is not replicated to the read-only replicas. Každá replika má svou vlastní verzi databáze TempDB, která se vytvoří při vytvoření repliky.Each replica has its own version of TempDB database that is created when the replica is created. Zajišťuje, aby bylo možné databázi TempDB aktualizovatelné a upravitelné během provádění dotazu.It ensures that TempDB is updateable and can be modified during your query execution. Pokud vaše úloha jen pro čtení závisí na použití objektů TempDB, měli byste tyto objekty vytvořit jako součást skriptu dotazu.If your read-only workload depends on using TempDB objects, you should create these objects as part of your query script.

Použití škálování pro čtení u geograficky replikovaných databázíUsing Read Scale-Out with geo-replicated databases

Pokud k vyrovnávání zatížení u úloh, které jsou geograficky replikované (například jako člena skupiny převzetí služeb při selhání), používáte škálování na více instancí, ujistěte se, že je na primární i geograficky replikovaných sekundárních databázích zapnuté horizontální navýšení kapacity pro čtení.If you are using Read Scale-Out to load-balance read-only workloads on a database that is geo-replicated (for example, as a member of a failover group), make sure that read scale-out is enabled on both the primary and the geo-replicated secondary databases. Tato konfigurace zajistí, že stejné prostředí pro vyrovnávání zatížení bude pokračovat, až se vaše aplikace připojí k nové primární úrovni po převzetí služeb při selhání.This configuration will ensure that the same load-balancing experience continues when your application connects to the new primary after failover. Pokud se připojujete k geograficky replikovaným sekundárním databázím s povoleným škálováním pro čtení, budou se vaše relace s ApplicationIntent=ReadOnly směrovat na jednu z replik stejným způsobem jako připojení k primární databázi.If you are connecting to the geo-replicated secondary database with read-scale enabled, your sessions with ApplicationIntent=ReadOnly will be routed to one of the replicas the same way we route connections on the primary database. Relace bez ApplicationIntent=ReadOnly budou směrovány do primární repliky geograficky replikovaného sekundárního umístění, které je také jen pro čtení.The sessions without ApplicationIntent=ReadOnly will be routed to the primary replica of the geo-replicated secondary, which is also read-only. Vzhledem k tomu, že geograficky replikovaná sekundární databáze má jiný koncový bod než primární databáze, historicky přístup k sekundární databázi nevyžadovala nastavení ApplicationIntent=ReadOnly.Because geo-replicated secondary database has a different endpoint than the primary database, historically to access the secondary it wasn't required to set ApplicationIntent=ReadOnly. Aby se zajistila zpětná kompatibilita, sys.geo_replication_links DMV zobrazuje secondary_allow_connections=2 (jakékoli připojení klienta je povolené).To ensure backward compatibility, sys.geo_replication_links DMV shows secondary_allow_connections=2 (any client connection is allowed).

Poznámka

Kruhové dotazování nebo jakékoli jiné směrování s vyrovnáváním zatížení mezi místními replikami sekundární databáze není podporováno.Round-robin or any other load-balanced routing between the local replicas of the secondary database is not supported.

Další krokyNext steps