在我们的应用程序中,我们有一个主数据库“ 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
可以请您分享一下您的想法吗?
答案 0 :(得分:0)
SQL Azure具有逻辑为您在线/自动执行各种操作(备份,升级等)的逻辑。每个副本都需要IO,因此存在限制,因为计算机没有无限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'