Azure SQL - автоматическая настройка с гео-репликацией - сервер в неопределенном состоянии и хранилище запросов достигло предела емкости - PullRequest
0 голосов
/ 06 июня 2018

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

На реплике, когда я пытаюсь сделать то же самое, я сталкиваюсь со следующими проблемами.

База данных наследует настройки отсервер, но сервер находится в неопределенном состоянии.Укажите состояние автоматической настройки на сервере.

И

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

Однако на сервере параметры настройки on, поэтому я не понимаю этого "неопределенного состояния".Более того, почему я смотрю на Query Store, настроенный в свойствах обеих баз данных в SSMS, они абсолютно одинаковы с 9 МБ свободного места из 10 МБ.

Примечание: обе базы данных настроены на базовом тарифном плане 5 DTU..

ОБНОВЛЕНИЕ

Пока основным режимом работы хранилища запросов базы данных является Чтение-запись, реплика доступна только для чтения.Кажется, я не могу изменить его (я не мог из диалогового окна свойств базы данных в SSMS).

Достаточно справедливо, но как этот же запрос может быть в 10 раз быстрее на первичном сервере, чем на реплике.Разве оптимизация не копируется по всему?

ОБНОВЛЕНИЕ 2

На самом деле хранилище запросов доступно для просмотра в SSMS, и я вижу, что они идентичны в обеих БД.Я думаю, что разница во времени ответа, которую я наблюдаю, не связана.

ОБНОВЛЕНИЕ 3

Я отметил сообщение @ vCillusion как ответ, поскольку он / она заслуживает кредитов,Тем не менее, он слишком подробен в отношении фактической проблемы.

Моя реплика доступна только для чтения и поэтому не может быть автоматически настроена, так как для этого потребуется запись в хранилище запросов.Azure не смог собрать какие-либо данные в хранилище запросов только для чтения, что привело к вводящему в заблуждение (и неверному) сообщению об ошибке, когда хранилище запросов достигает своей емкости.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

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

0 голосов
/ 07 июня 2018

Мы получаем это сообщение, только когда хранилище запросов находится в режиме только для чтения.Дважды проверьте конфигурацию магазина запросов.В соответствии с MSDN вам может потребоваться учитывать следующее:

  1. Для восстановления хранилища запросов попробуйте явно установить режим чтения-записи и перепроверить фактическое состояние.

    ALTER DATABASE [QueryStoreDB]   
    SET QUERY_STORE (OPERATION_MODE = READ_WRITE);    
    GO  
    
    SELECT actual_state_desc, desired_state_desc, current_storage_size_mb,   
    max_storage_size_mb, readonly_reason, interval_length_minutes,   
    stale_query_threshold_days, size_based_cleanup_mode_desc,   
    query_capture_mode_desc  
    FROM sys.database_query_store_options;  
    
  2. Если проблема не устранена, это указывает на повреждение данных хранилища запросов и продолжается на диске.Мы можем восстановить хранилище запросов, выполнив хранимую процедуру sp_query_store_consistency_check в соответствующей базе данных.

  3. Если это не помогло, вы можете попытаться очистить хранилище запросов, прежде чем запрашивать режим чтения-записи.

    ALTER DATABASE [QueryStoreDB]   
    SET QUERY_STORE CLEAR;  
    GO  
    
    ALTER DATABASE [QueryStoreDB]   
    SET QUERY_STORE (OPERATION_MODE = READ_WRITE);    
    GO  
    
    SELECT actual_state_desc, desired_state_desc, current_storage_size_mb,   
        max_storage_size_mb, readonly_reason, interval_length_minutes,   
        stale_query_threshold_days, size_based_cleanup_mode_desc,   
        query_capture_mode_desc  
    FROM sys.database_query_store_options;
    

Если вы проверили его, и он находится в режиме чтения-записи, то здесь мы можем столкнуться с некоторой ошибкой.Пожалуйста, оставьте отзыв об этом в Microsoft.

Дополнительные ограничения в хранилище запросов:

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

На данный момент он не работает с базами данных только для чтения (включая реплики AG только для чтения).Поскольку читаемые вторичные реплики доступны только для чтения, хранилище запросов в этих вторичных репликах также доступно только для чтения.Это означает, что статистика времени выполнения для запросов, выполняемых в этих репликах, не записывается в хранилище запросов.

  1. Проверьте, что база данных не доступна только для чтения.
  2. Хранилище запросов не работало для системных баз данных, таких как master или tempdb
  3. Проверьте, достаточно ли основной файловой группы памяти, поскольку данные хранятся только в основной файловой группе
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...