Достигнуто ограничение на количество копий базы данных.База данных X не может иметь более 10 одновременных копий базы данных (Azure SQL) - PullRequest
0 голосов
/ 13 февраля 2019

В нашем приложении у нас есть основная база данных 'X'.Для каждого нового клиента мы создадим новую копию базы данных основной базы данных «X».

Я использую следующую команду SQL, которая будет выполняться на SQL-сервере Azure.

CREATE DATABASE [NEW NAME] AS COPY OF [MASTER DB]

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

У меня проблемы в следующем сценарии.

Я пытаюсь создать 70 клиентов.После создания 25 клиентов я получаю сообщение об ошибке ниже.

Database copy limit per database reached. The database 'BlankDBClient' cannot have more than 10 concurrent database copies

Не могли бы вы поделиться своими мыслями по этому поводу?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

В дополнение к ответу Коннора вы можете указать, что dacpac или bacpac этой основной базы данных хранятся в хранилище Azure, и как только вы отправите 25 одновременных копий базы данных, вы можете начать восстановление dacpac из хранилища Azure.

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

   Select
     [sys].[databases].[name], 
       [sys].[databases].[state_desc], 
       [sys].[dm_database_copies].[start_date], 
       [sys].[dm_database_copies].[modify_date], 
       [sys].[dm_database_copies].[percent_complete],
             [sys].[dm_database_copies].[error_code], 
       [sys].[dm_database_copies].[error_desc], 
       [sys].[dm_database_copies].[error_severity], 
       [sys].[dm_database_copies].[error_state]
   From
      [sys].[databases]
   Left
 Outer
 Join
 [sys].[dm_database_copies] 
   On
    [sys].[databases].[database_id] = [sys].[dm_database_copies].[database_id]
   Where
   [sys].[databases].[state_desc] = 'COPYING'


SELECT state_desc, * 
FROM sys.databases 
WHERE [state_desc] = 'COPYING'
0 голосов
/ 13 февраля 2019

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

С точки зрения возможных вариантов вы можете:

  • Восстановите N баз данных из резервной копии базы данных (в которой все еще будут ограничения IO, но они могут быть выше для вас в зависимости от размера резервирования)
  • Рассмотрим модели для параллельного копирования с использованием единого источника для иерархического создания того, что вам нужно (копия 2 с одного, затем копия 2 с каждого из только что скопированных и т. д.)
  • Постепенно копируйте копии в зависимости от ограничений, которые вы получаете из системы.
  • Попробуйтебольший размер резервирования для источника и цели во время копирования, чтобы получить больше операций ввода-вывода в секунду и сократить время выполнения операций.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...