达到每个数据库的数据库副本限制。数据库X不能有超过10个并发数据库副本(Azure SQL)

时间:2019-02-13 07:27:44

标签: sql azure-sql-database

在我们的应用程序中,我们有一个主数据库“ X”。对于每个新客户,我们将创建主数据库“ X”的新数据库副本。

我正在使用下面的SQL命令,该命令将针对Azure SQL服务器执行。

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 :(得分:0)

SQL Azure具有逻辑为您在线/自动执行各种操作(备份,升级等)的逻辑。每个副本都需要IO,因此存在限制,因为计算机没有无限iops。 (随着我们努力改善服务,获取更新的硬件等,这些限制可能会随着时间而改变。)

关于您可以选择的选项,您可以:

  • 从数据库备份中还原N个数据库(该数据库仍具有IO限制,但根据您的预留大小,它们可能更高)
  • 考虑使用单个源并行复制模型以分层创建所需的内容(从一个复制2个,然后从刚复制的每个复制2个,等等)
  • 根据您从系统中获得的限制,逐步存放副本。
  • 在复制过程中为源和目标尝试更大的保留大小,以获取更多的IOPS并减少执行操作的时间。

答案 1 :(得分:0)

除了Connor的答案外,您还可以考虑在Azure存储上存储该主数据库的dacpac或bacpac,一旦提交了25个并发数据库副本,就可以开始从Azure存储还原dacpac。

您还可以监视以下查询的state_desc列上正在显示COPYING的数据库副本的数量,发送第一批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'