Дополнительные сведения см. в статье "Использование реплик только для чтения с целью разгрузить рабочие нагрузки от запросов только на чтение"
Область применения:База данных SQL Azure
Управляемый экземпляр SQL Azure
В рамках архитектуры с высоким уровнем доступности каждая отдельная база данных или база данных эластичного пула на уровне служб "Премиум" и критически важный для бизнеса автоматически подготавливается с первичной реплика чтения и записи и одной или несколькими вторичными репликами только для чтения. Вторичные реплики подготавливаются с тем же объемом вычислительных ресурсов, что и первичная реплика. Благодаря функции горизонтального увеличения масштаба для чтения можно распределять рабочие нагрузки базы данных SQL только для чтения за счет емкости одной из реплик только для чтения вместо совместного использования реплики для чтения и записи. Таким образом, некоторые рабочие нагрузки, доступные только для чтения, можно изолировать от рабочих нагрузок чтения и записи и не повлиять на их производительность. Эта возможность предназначена для приложений, включающих логически разделенные рабочие нагрузки только для чтения, например, для аналитики. На уровнях служб категорий "Премиум" и "критически важный для бизнеса" приложения могут повысить производительность с помощью этой дополнительной емкости без лишних затрат.
При добавлении хотя бы одной вторичной реплики также доступна функция масштабирования для чтения на уровне служб "Гипермасштабирование". Вторичные именованные реплики с гипермасштабированием обеспечивают независимое масштабирование, изоляцию доступа, изоляцию рабочей нагрузки, поддержку различных сценариев горизонтального масштабирования на чтение и другие преимущества. Несколько вторичных реплик HA можно использовать для рабочих нагрузок с балансировкой нагрузки только для чтения, для которых требуется больше ресурсов, чем доступно на одной вторичной реплике HA.
Архитектура высокого уровня доступности уровней "Базовый", "Стандартный" и "общего назначения" не включает ни одной реплики. Функция горизонтального увеличения масштаба для чтения недоступна на этих уровнях служб. Однако при использовании базы данных Azure SQL геореплики могут предоставлять аналогичные функции на этих уровнях служб. При использовании Управляемый экземпляр SQL Azure и групп отработки отказа прослушиватель группы отработки отказа только для чтения может предоставлять аналогичные функции соответственно.
На следующей схеме показана функция для баз данных и управляемых экземпляров уровней "Премиум" и "Критически важный для бизнеса".
Функция масштабирования для чтения по умолчанию включена для новых баз данных уровней "Премиум", "Критически важный для бизнеса" и "Гипермасштабирование".
Примечание
Горизонтальное масштабирование на чтение всегда включено на уровне служб критически важный для бизнеса Управляемый экземпляр SQL и для баз данных с гипермасштабированием по крайней мере с одним дополнительным реплика.
Если строка подключения SQL настроена с ApplicationIntent=ReadOnly
помощью , приложение перенаправляется на доступную только для чтения реплика этой базы данных или управляемого экземпляра. Сведения об использовании ApplicationIntent
свойства см. в разделе Указание намерения приложения.
Только для Azure SQL Database, если вы хотите убедиться, что приложение подключается к основному реплика независимо от ApplicationIntent
параметра в строке подключения SQL, необходимо явно отключить горизонтальное масштабирование для чтения при создании базы данных или при изменении ее конфигурации. Например, если вы обновите базу данных с уровня "Стандартный" или "Общего назначения" до уровня "Премиум" или "Критически важный для бизнеса" и хотите убедиться, что все подключения продолжают работать с первичной репликой, отключите масштабирование для чтения (см. раздел Включение и выключение масштабирования для чтения).
Примечание
Хранилище запросов и SQL Profiler не поддерживаются в репликах только для чтения.
Согласованность данных
Изменения, внесенные в основную реплику, сохраняются в доступных только для чтения репликах, синхронно или асинхронно в зависимости от типа реплики. Однако для всех типов реплик чтение из реплики, доступной только для чтения, всегда выполняется асинхронно с точки зрения первичной реплики. В сеансе, подключенном к реплике только для чтения, операции чтения всегда являются транзакционно согласованными. Поскольку задержка распространения данных является переменной, различные реплики могут возвращать данные в несколько разные моменты времени относительно первичной и каждой последующей. Если реплика только для чтения становится недоступной и сеанс повторно подключается, он может подключиться к реплике, которая находится в моменте времени, отличном от исходной реплики. Аналогичным образом, если приложение изменяет данные с помощью сеанса чтения и записи на основном сервере и немедленно считывает их с помощью сеанса только для чтения на реплика, возможно, последние изменения не сразу видны.
Типичная задержка распространения данных между первичной репликой и репликами только для чтения варьируется в диапазоне от десятков миллисекунд до 10 секунд. Однако нет фиксированной верхней границы задержки распространения данных. Такие условия, как высокий уровень использования ресурсов в реплике, могут значительно увеличить задержку. Приложения, требующие гарантированной согласованности данных в сеансах или немедленного чтения зафиксированных данных, должны использовать первичную реплику.
Примечание
Задержка распространения данных включает время, необходимое для отправки и сохранения (если применимо) записей журнала на дополнительный реплика. Сюда также входит время, необходимое для повторного выполнения (применения) этих записей журнала к страницам данных. Чтобы обеспечить согласованность данных, изменения не отображаются, пока не будет применена запись журнала фиксации транзакций. Когда рабочая нагрузка использует большие транзакции, увеличивается эффективная задержка распространения данных.
Сведения о мониторинге задержки распространения данных см. в разделе Мониторинг и устранение неполадок реплики только для чтения.
Подключение к реплике только для чтения
При включении масштабирования для чтения для базы данных предоставляемый клиентом параметр ApplicationIntent
в строке подключения определяет, куда направляется подключение: к реплике для записи-чтения или к реплике только для чтения. В частности, если ApplicationIntent
значение равно ReadWrite
(значение по умолчанию), подключение направляется к реплика чтения и записи. Это идентично поведению, если ApplicationIntent
не включается в строку подключения. Если значение ApplicationIntent
— ReadOnly
, подключение направляется к реплике, доступной только для чтения.
Например, следующая строка подключения позволяет подключить клиента к реплике только для чтения (замените элементы в угловых скобках правильными значениями для среды и удалите угловые скобки):
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), выберите Параметры.
Выберите Дополнительные параметры подключения , а затем введите ApplicationIntent=ReadOnly
и нажмите кнопку Подключить.
Обе приведенные ниже строки подключения подключают подключить клиента к реплике для чтения и записи (замените элементы в угловых скобках правильными значениями для среды и удалите угловые скобки):
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.resource_stats
представления и sys.elastic_pool_resource_stats
в логической master
базе данных возвращают данные об использовании ресурсов основного реплика.
Мониторинг реплик только для чтения с помощью расширенных событий
Расширенный сеанс событий невозможно создать при подключении к реплика только для чтения. Однако в базе данных Azure SQL определения сеансов расширенных событий уровня базы данных, созданные и измененные на первичной реплике, реплицируются в реплики только для чтения, включая геореплики, и записывают события в репликах только для чтения.
Сеанс расширенного события в реплике только для чтения, основанной на определении сеанса из первичной реплики, может запускаться и останавливаться независимо от первичной реплики. Когда сеанс расширенных событий удаляется на первичной реплике, он также удаляется на всех репликах только для чтения.
Уровень изоляции транзакций для реплик только для чтения
Транзакции в репликах только для чтения всегда используют уровень изоляции транзакций моментального снимка, независимо от уровня изоляции транзакций сеанса и любых указаний запроса. Изоляция моментальных снимков использует управление версиями строк во избежание ситуаций с блокировкой, в которых сеансы чтения блокируют сеансы записи.
В редких случаях, если транзакция изоляции моментального снимка обращается к метаданным объекта, которые были изменены в другой параллельной транзакции, она может получить ошибку 3961, "Сбой транзакции изоляции моментального снимка в базе данных '%. * ls', так как объект, к которому обращается инструкция, был изменен инструкцией DDL в другой параллельной транзакции с момента запуска этой транзакции. Это запрещено, так как управление версиями метаданных не осуществляется. Параллельное обновление метаданных может привести к несогласованности при использовании смешанного режима с изоляцией моментальных снимков".
Длительные запросы к репликам только для чтения
Запросы, выполняющиеся в репликах только для чтения, должны иметь доступ к метаданным для объектов, на которые ссылается запрос (таблицы, индексы, статистика и т. д.). В редких случаях, если метаданные объекта изменяются на первичной реплике, в то время как сам запрос удерживает блокировку того же объекта в реплике только для чтения, этот запрос может заблокировать процесс, который применяет изменения из первичной реплики к реплике только для чтения. Если такой запрос выполняется в течение длительного времени, то реплика только для чтения может расходиться в синхронизации с первичной репликой. Для реплик, которые являются потенциальными целями отработки отказа (вторичные реплики уровней "Премиум" и "Критически важный для бизнеса", реплики HA уровня "Гипермасштабирование", а также все геореплики), это также приведет к задержке восстановления базы данных, если произойдет отработка отказа, что приведет к более длительному, чем ожидалось, времени простоя.
Если длительный запрос к реплике только для чтения, прямо или косвенно вызывает такую блокировку, он может быть автоматически завершен, чтобы избежать чрезмерной задержки данных и потенциального воздействия на доступность базы данных. Сеанс получает ошибку 1219 " Ваш сеанс был отключен из-за операции DDL с высоким приоритетом" или ошибку 3947", "Транзакция была прервана, так как вторичному вычислению не удалось выполнить повтор. Повторите транзакцию".
Примечание
Если при выполнении запросов к реплике только для чтения появляется сообщение об ошибке 3961, 1219 или 3947, повторите запрос. Кроме того, не выполняйте операции, изменяющие метаданные объекта (изменения схемы, обслуживание индекса, обновление статистики и т. д.) на первичной реплике, пока на вторичных репликах выполняются длительные запросы.
Совет
В уровнях служб "Премиум" и "критически важный для бизнеса" при подключении к реплике только для чтения столбцы redo_queue_size
и redo_rate
в динамическом административном представлении sys.dm_database_replica_states могут использоваться для мониторинга процесса синхронизации данных, выступая в качестве индикаторов задержки распространения данных в реплике только для чтения.
Включение и отключение горизонтального увеличения масштаба чтения для База данных SQL
Для Управляемый экземпляр SQL на уровне служб критически важный для бизнеса автоматически включается горизонтальное масштабирование для чтения и недоступно на уровне служб общего назначения. Отключение и повторное масштабирование для чтения невозможно.
Для База данных SQL горизонтальное масштабирование на чтение включено по умолчанию на уровнях служб "Премиум", критически важный для бизнеса и Гипермасштабирование. Горизонтальное масштабирование для чтения нельзя включить на уровнях служб "Базовый", "Стандартный" или "общего назначения". Масштабирование для чтения автоматически отключается для баз данных уровня "Гипермасштабирование", для которых не настроены вторичные реплики.
Для отдельных баз данных и баз данных в пуле в базе данных Azure SQL можно отключить и повторно включить горизонтальное масштабирование на чтение на уровнях служб "Премиум" или критически важный для бизнеса с помощью портал Azure и Azure PowerShell. Эти параметры недоступны для Управляемый экземпляр SQL так как нельзя отключить горизонтальное увеличение масштаба для чтения.
Примечание
Для отдельных баз данных и баз данных эластичных пулов возможность отключения масштабирования для чтения предоставляется для обеспечения обратной совместимости. Невозможно отключить горизонтальное увеличение масштаба для чтения для управляемых экземпляров уровня "критически важный для бизнеса".
Портал Azure
Для базы данных Azure SQL можно управлять параметром горизонтального масштабирования на чтение на панели Вычисления и хранилище базы данных, доступной в разделе Параметры. Использование портал 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 см. здесь.
В Azure SQL Database можно отключить или повторно включить горизонтальное увеличение масштаба чтения в 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 формат журнала аудита.
- Анализ производительности запросов основан на данных из хранилище запросов, который в настоящее время не отслеживает действия в реплика только для чтения. Анализ производительности запросов не отображает запросы, выполняемые в реплика только для чтения.
- Автоматическая настройка зависит от хранилища запросов, как подробно описано в документации по автоматической настройке. Автоматическая настройка работает только для рабочих нагрузок, выполняющихся на первичной реплике.
Дальнейшие действия
- Дополнительные сведения о предложении для гипермасштабирования Базы данных SQL см. в разделе Уровень службы "Гипермасштабирование".