Дополнительные сведения см. в статье "Использование реплик только для чтения с целью разгрузить рабочие нагрузки от запросов только на чтение"

Применимо к:База данных SQL Azure Управляемый экземпляр SQL Azure

В рамках архитектуры высокой доступности каждая отдельная база данных или база данных эластичного пула в уровне "Премиум" и критически важный для бизнеса уровня служб автоматически подготавливается с помощью основной реплика записи для чтения и одной или нескольких дополнительных реплика. Вторичные реплики подготавливаются с тем же объемом вычислительных ресурсов, что и первичная реплика. Благодаря функции горизонтального увеличения масштаба для чтения можно распределять рабочие нагрузки базы данных SQL только для чтения за счет емкости одной из реплик только для чтения вместо совместного использования реплики для чтения и записи. Таким образом, некоторые рабочие нагрузки, доступные только для чтения, могут быть изолированы от рабочих нагрузок чтения и записи и не влияют на их производительность. Эта возможность предназначена для приложений, включающих логически разделенные рабочие нагрузки только для чтения, например, для аналитики. На уровнях служб категорий "Премиум" и "критически важный для бизнеса" приложения могут повысить производительность с помощью этой дополнительной емкости без лишних затрат.

При добавлении хотя бы одной вторичной реплики также доступна функция масштабирования для чтения на уровне служб "Гипермасштабирование". Гипермасштабирование вторичных именованных реплика обеспечивает независимое масштабирование, изоляцию доступа, изоляцию рабочей нагрузки, поддержку различных сценариев масштабирования чтения и других преимуществ. Несколько вторичных реплик HA можно использовать для рабочих нагрузок с балансировкой нагрузки только для чтения, для которых требуется больше ресурсов, чем доступно на одной вторичной реплике HA.

Архитектура высокого уровня доступности уровней "Базовый", "Стандартный" и "общего назначения" не включает ни одной реплики. Функция горизонтального масштабирования чтения недоступна на этих уровнях служб. Однако при использовании База данных SQL Azure гео-реплика могут предоставлять аналогичные функциональные возможности на этих уровнях служб. При использовании Управляемый экземпляр SQL Azure и групп отработки отказа прослушиватель группы отработки отказа может предоставлять аналогичные функции соответственно.

На следующей схеме показана функция для баз данных и управляемых экземпляров уровней "Премиум" и "Критически важный для бизнеса".

Diagram showing readonly replicas.

Функция масштабирования для чтения по умолчанию включена для новых баз данных уровней "Премиум", "Критически важный для бизнеса" и "Гипермасштабирование".

Примечание.

Горизонтальное масштабирование чтения всегда включено на уровне служб критически важный для бизнеса Управляемый экземпляр SQL и для баз данных с гипермасштабированием по крайней мере с одним дополнительным реплика.

Если строка подключения SQL настроеноApplicationIntent=ReadOnly, приложение перенаправляется в доступную только для чтения реплика этой базы данных или управляемого экземпляра. Сведения об использовании ApplicationIntent свойства см. в разделе Указание намерения приложения.

Только для База данных SQL Azure, если вы хотите убедиться, что приложение подключается к основному реплика независимо от ApplicationIntent параметра в СТРОКА ПОДКЛЮЧЕНИЯ SQL, необходимо явно отключить горизонтальное масштабирование чтения при создании базы данных или при изменении его конфигурации. Например, если вы обновите базу данных с уровня "Стандартный" или "Общего назначения" до уровня "Премиум" или "Критически важный для бизнеса" и хотите убедиться, что все подключения продолжают работать с первичной репликой, отключите масштабирование для чтения (см. раздел Включение и выключение масштабирования для чтения).

Примечание.

Хранилище запросов и SQL Profiler не поддерживаются в репликах только для чтения.

Согласованность данных

Изменения, внесенные в основную реплику, сохраняются в доступных только для чтения репликах, синхронно или асинхронно в зависимости от типа реплики. Однако для всех типов реплик чтение из реплики, доступной только для чтения, всегда выполняется асинхронно с точки зрения первичной реплики. В сеансе, подключенном к реплике только для чтения, операции чтения всегда являются транзакционно согласованными. Поскольку задержка распространения данных является переменной, различные реплики могут возвращать данные в несколько разные моменты времени относительно первичной и каждой последующей. Если реплика только для чтения становится недоступной и сеанс повторно подключается, он может подключиться к реплике, которая находится в моменте времени, отличном от исходной реплики. Аналогичным образом, если приложение изменяет данные с помощью сеанса чтения и записи в основном и немедленно считывает его с помощью сеанса только для чтения в реплика только для чтения, возможно, что последние изменения не сразу видны.

Типичная задержка распространения данных между первичной репликой и репликами только для чтения варьируется в диапазоне от десятков миллисекунд до 10 секунд. Однако нет фиксированной верхней границы задержки распространения данных. Такие условия, как высокий уровень использования ресурсов в реплике, могут значительно увеличить задержку. Приложения, требующие гарантированной согласованности данных в сеансах или немедленного чтения зафиксированных данных, должны использовать первичную реплику.

Примечание.

Задержка распространения данных включает время, необходимое для отправки и сохранения (если применимо) записей журналов во вторичную реплика. Он также включает время, необходимое для повтора (применения) этих записей журнала к страницам данных. Чтобы обеспечить согласованность данных, изменения не отображаются до тех пор, пока запись журнала фиксации транзакций не будет применена. Когда рабочая нагрузка использует более крупные транзакции, увеличивается эффективная задержка распространения данных.

Сведения о мониторинге задержки распространения данных см. в статье "Мониторинг и устранение неполадок только для чтения" реплика.

Подключение к реплике только для чтения

При включении масштабирования для чтения для базы данных предоставляемый клиентом параметр ApplicationIntent в строке подключения определяет, куда направляется подключение: к реплике для записи-чтения или к реплике только для чтения. В частности, если ApplicationIntent значение равно ReadWrite (значение по умолчанию), подключение направляется в реплика чтения и записи. Это идентично поведению, если ApplicationIntent он не включен в строка подключения. Если значение ApplicationIntentReadOnly, подключение направляется к реплике, доступной только для чтения.

Например, следующая строка подключения позволяет подключить клиента к реплике только для чтения (замените элементы в угловых скобках правильными значениями для среды и удалите угловые скобки):

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

Чтобы подключиться к реплика только для чтения с помощью SQL Server Management Studio (SSMS), выберите "Параметры"

Screenshot showing the SSMS Options button.

Выберите дополнительные параметры Подключение ion и введите ApplicationIntent=ReadOnly и выберите Подключение

Screenshot showing SSMS Additional Connection Parameters.

Обе приведенные ниже строки подключения подключают подключить клиента к реплике для чтения и записи (замените элементы в угловых скобках правильными значениями для среды и удалите угловые скобки):

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;

Убедитесь, что подключение выполняется к реплике только для чтения

Можно проверить, подключены ли вы к реплике только для чтения, выполнив следующий запрос в контексте базы данных. Он возвращает READ_ONLY при подключении к реплика только для чтения.

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

Примечание.

В уровнях служб "Премиум" и "критически важный для бизнеса" доступна только одна реплика только для чтения в любой конкретный момент времени. Уровень "Гипермасштабирование" поддерживает несколько реплик только для чтения.

Мониторинг и устранение неполадок реплика только для чтения

При подключении к реплике только для чтения динамические административные представления (DMV) отображают состояние реплики и могут запрашиваться для целей мониторинга и устранения неполадок. Ядро базы данных обеспечивает несколько представлений для показа широкого спектра данных мониторинга.

Для мониторинга реплик и устранения неполадок с ними обычно используются следующие представления:

Имя. Характер использования
sys.dm_db_resource_stats Предоставляет метрики использования ресурсов за последний час, включая ЦП, операции ввода-вывода данных и использование записи журнала относительно ограничений цели службы.
sys.dm_os_wait_stats Предоставляет совокупную статистику ожидания для экземпляра ядра базы данных.
sys.dm_hadr_database_replica_states Предоставляет состояние работоспособности реплики и статистику синхронизации. Размер очереди повтора и скорость повтора служат индикаторами задержки распространения данных в реплике только для чтения.
sys.dm_os_performance_counters Предоставляет счетчики производительности ядра базы данных.
sys.dm_exec_query_stats Предоставляет статистику выполнения по запросу, например количество выполнений, использованное время ЦП и т. д.
sys.dm_exec_query_plan() Предоставляет кэшированные планы запросов.
sys.dm_exec_sql_text() Предоставляет текст запроса для кэшированного плана запроса.
sys.dm_exec_query_profiles Предоставляет ход выполнения запросов в режиме реального времени в ходе выполнения запросов.
sys.dm_exec_query_plan_stats() Предоставляет последний известный фактический план выполнения, включая статистику времени выполнения для запроса.
sys.dm_io_virtual_file_stats() Предоставляет статистику операций ввода-вывода, пропускной способности и задержки хранилища для всех файлов базы данных.

Примечание.

sys.elastic_pool_resource_stats Динамические sys.resource_stats административные представления в логической master базе данных возвращают данные об использовании ресурсов первичного реплика.

Мониторинг реплика только для чтения с помощью расширенных событий

При подключении к реплика только для чтения невозможно создать расширенный сеанс событий. Однако в базе данных Azure SQL определения сеансов расширенных событий уровня базы данных, созданные и измененные на первичной реплике, реплицируются в реплики только для чтения, включая геореплики, и записывают события в репликах только для чтения.

Расширенный сеанс событий для реплика только для чтения, основанный на определении сеанса из основного реплика, может быть запущен и остановлен независимо от сеанса на первичном реплика.

Чтобы удалить сеанс событий в реплика только для чтения, выполните следующие действия.

  1. Подключение обозреватель объектов SSMS или окно запроса к реплика только для чтения.
  2. Остановите сеанс в реплика только для чтения, выбрав команду Остановить сеанс в контекстном меню сеанса в обозреватель объектов или выполнив в ALTER EVENT SESSION [session-name-here] ON DATABASE STATE = STOP; окне запроса.
  3. Подключение обозреватель объектов или окно запроса к основному реплика.
  4. Удалите сеанс в основном реплика, выбрав "Удалить" в контекстном меню сеанса или выполнив выполнениеDROP EVENT SESSION [session-name-here] ON DATABASE;

Уровень изоляции транзакций для реплик только для чтения

Транзакции в репликах только для чтения всегда используют уровень изоляции транзакций моментального снимка, независимо от уровня изоляции транзакций сеанса и любых указаний запроса. Изоляция моментальных снимков использует управление версиями строк во избежание ситуаций с блокировкой, в которых сеансы чтения блокируют сеансы записи.

В редких случаях, если транзакция изоляции моментального снимка обращается к метаданным объекта, которые были изменены в другой параллельной транзакции, она может получить ошибку 3961, "Сбой транзакции изоляции моментального снимка в базе данных '%. * ls', так как объект, к которому обращается инструкция, был изменен инструкцией DDL в другой параллельной транзакции с момента запуска этой транзакции. Это запрещено, так как управление версиями метаданных не осуществляется. Параллельное обновление метаданных может привести к несогласованности при использовании смешанного режима с изоляцией моментальных снимков".

Длительные запросы к репликам только для чтения

Запросы, выполняющиеся в репликах только для чтения, должны иметь доступ к метаданным для объектов, на которые ссылается запрос (таблицы, индексы, статистика и т. д.). В редких случаях, если метаданные объекта изменяются на первичной реплике, в то время как сам запрос удерживает блокировку того же объекта в реплике только для чтения, этот запрос может заблокировать процесс, который применяет изменения из первичной реплики к реплике только для чтения. Если такой запрос выполняется в течение длительного времени, то реплика только для чтения может расходиться в синхронизации с первичной репликой. Для реплик, которые являются потенциальными целями отработки отказа (вторичные реплики уровней "Премиум" и "Критически важный для бизнеса", реплики HA уровня "Гипермасштабирование", а также все геореплики), это также приведет к задержке восстановления базы данных, если произойдет отработка отказа, что приведет к более длительному, чем ожидалось, времени простоя.

Если длительный запрос к реплике только для чтения, прямо или косвенно вызывает такую блокировку, он может быть автоматически завершен, чтобы избежать чрезмерной задержки данных и потенциального воздействия на доступность базы данных. Сеанс получает ошибку 1219: "Сеанс был отключен из-за операции DDL с высоким приоритетом" или ошибкой 3947", "Транзакция была прервана, так как вторичный вычислительный ресурс не удалось выполнить повтор. Повторите транзакцию".

Примечание.

Если при выполнении запросов к реплике только для чтения появляется сообщение об ошибке 3961, 1219 или 3947, повторите запрос. Кроме того, не выполняйте операции, изменяющие метаданные объекта (изменения схемы, обслуживание индекса, обновление статистики и т. д.) на первичной реплике, пока на вторичных репликах выполняются длительные запросы.

Совет

В уровнях служб "Премиум" и "критически важный для бизнеса" при подключении к реплике только для чтения столбцы redo_queue_size и redo_rate в динамическом административном представлении sys.dm_database_replica_states могут использоваться для мониторинга процесса синхронизации данных, выступая в качестве индикаторов задержки распространения данных в реплике только для чтения.

Включение и отключение горизонтального масштабирования чтения для База данных SQL

Для Управляемый экземпляр SQL горизонтальное масштабирование чтения автоматически включается на уровне служб критически важный для бизнеса и недоступен на уровне служб общего назначения. Отключение и повторное масштабирование чтения невозможно.

Для База данных SQL масштабирование чтения по умолчанию включено на уровнях служб "Премиум", критически важный для бизнеса и "Гипермасштабирование". Горизонтальное масштабирование чтения невозможно включить на уровнях служб "Базовый", "Стандартный" или "Общего назначения". Масштабирование для чтения автоматически отключается для баз данных уровня "Гипермасштабирование", для которых не настроены вторичные реплики.

Для отдельных и объединенных баз данных в База данных SQL Azure можно отключить и повторно включить горизонтальное масштабирование чтения на уровнях служб "Премиум" или критически важный для бизнеса с помощью портал Azure и Azure PowerShell. Эти параметры недоступны для Управляемый экземпляр SQL, так как горизонтальное масштабирование чтения невозможно отключить.

Примечание.

Для отдельных баз данных и баз данных эластичных пулов возможность отключения масштабирования для чтения предоставляется для обеспечения обратной совместимости. Невозможно отключить горизонтальное увеличение масштаба для чтения для управляемых экземпляров уровня "критически важный для бизнеса".

Портал Azure

Для База данных SQL Azure можно управлять параметром горизонтального масштабирования чтения в области базы данных вычислений и хранилища, доступной в Параметры. Использование портал Azure для включения или отключения горизонтального масштабирования чтения недоступно для Управляемый экземпляр SQL Azure.

PowerShell

Важно!

Модуль PowerShell Azure Resource Manager по-прежнему поддерживается, но вся дальнейшая разработка сосредоточена на модуле Az.Sql. Исправление ошибок для модуля Azure Resource Manager будет выпускаться как минимум до декабря 2020 г. Аргументы команд в модулях Az и Azure Resource Manager практически идентичны. Дополнительные сведения о совместимости см. в статье Введение в новый модуль Azure PowerShell Az.

Для управления масштабированием для чтения в Azure PowerShell требуется выпуск от декабря 2016 Azure PowerShell или более поздней версии. Последнюю версию Azure PowerShell см. здесь.

В База данных SQL Azure можно отключить или повторно включить горизонтальное масштабирование чтения в Azure PowerShell путем вызова командлета Set-AzSqlDatabase и передачи требуемого значения (EnabledилиDisabled) для -ReadScale параметра. Отключение горизонтального масштабирования чтения для Управляемый экземпляр SQL недоступно.

Чтобы выключить для имеющейся базы данных функцию масштабирования для чтения (замените элементы в угловых скобках правильными значениями для среды и удалите эти угловые скобки):

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

Чтобы выключить для новой базы данных функцию масштабирования для чтения (замените элементы в угловых скобках правильными значениями для среды и удалите эти угловые скобки):

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

Чтобы повторно включить для имеющейся базы данных функцию масштабирования для чтения (замените элементы в угловых скобках правильными значениями для среды и удалите эти угловые скобки):

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

REST API

Чтобы создать базу данных с выключенным масштабированием для чтения или изменить параметр для существующей базы данных, используйте следующий метод со свойством readScale, для которого задано значение Enabled или Disabled, как в следующем примере запроса.

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

Дополнительные сведения см. в разделе Базы данных. Создание или обновление.

tempdb Использование базы данных в реплика только для чтения

База tempdb данных на основном реплика не реплика реплика в реплика только для чтения. Каждая реплика имеет собственную базу данных tempdb, созданную при формировании реплики. Это гарантирует обновление tempdb и может изменяться во время выполнения запроса. Если ваша рабочая нагрузка только для чтения зависит от использования объектов tempdb, вы должны создавать эти объекты как часть той же рабочей нагрузки при подключении к реплике только для чтения.

Использование горизонтального масштабирования чтения с гео-реплика базами данных

Геореплицированные вторичные базы данных имеют ту же архитектуру HA, что и первичные базы данных. Если вы подключаетесь к гео-реплика базе данных-получателю с поддержкой горизонтального масштабирования чтения, сеансы с ApplicationIntent=ReadOnly поддержкой горизонтального масштабирования перенаправляются в одну из реплика высокой доступности таким же образом, как они направляются в основной базе данных, доступной для записи. Сеансы без ApplicationIntent=ReadOnly перенаправления на первичный реплика гео-реплика вторичной, которая также доступна только для чтения.

Таким образом, создавая геореплику, вы можете предоставить несколько дополнительных реплик только для чтения для первичной базы данных для чтения и записи. Каждая дополнительная геореплика предоставляет еще один набор реплик только для чтения. Геореплики можно создавать в любом регионе Azure, включая регион первичной базы данных-источника.

Примечание.

Не существует автоматического циклического перебора или какой-либо другой маршрутизации с балансировкой нагрузки между репликами геореплицированной вторичной базы данных, кроме георепликации уровня "Гипермасштабирование" более чем с одной репликой HA. В этом случае сеансы с намерением только для чтения распределяются по всем репликам HA геореплики.

Поддержка функций для реплик только для чтения

Ниже приведен список действий некоторых функций для реплика только для чтения:

  • Аудит доступных только для чтения реплик включен автоматически. Дополнительные сведения об иерархии папок хранения, соглашения об именовании и формате журнала см. в разделе База данных SQL Формат журнала аудита.
  • Аналитика производительности запросов использует данные из хранилище запросов, которые в настоящее время не отслеживают действия только для чтения реплика. Аналитика производительности запросов не отображает запросы, выполняемые в реплика только для чтения.
  • Автоматическая настройка зависит от хранилища запросов, как подробно описано в документации по автоматической настройке. Автоматическая настройка работает только для рабочих нагрузок, выполняющихся на первичной реплике.

Следующие шаги