簡體   English   中英

達到每個數據庫的數據庫副本限制。 數據庫X不能有超過10個並發數據庫副本(Azure SQL)

[英]Database copy limit per database reached. The database X cannot have more than 10 concurrent database copies (Azure SQL)

在我們的應用程序中,我們有一個主數據庫“ 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

能否請您分享一下您的想法?

SQL Azure具有為您在線/自動執行各種操作(備份,升級等)的邏輯。 每個副本都需要IO,因此存在限制,因為計算機沒有無限iops。 (隨着我們努力改善服務,獲取更新的硬件等,這些限制可能會隨着時間的推移而有所變化。)

就您有什么選擇而言,您可以:

  • 從數據庫備份還原N個數據庫(該數據庫仍具有IO限制,但根據您的預留大小,它們可能更高)
  • 考慮使用單個源並行復制模型以分層創建所需的模型(從一個復制2個,然后從剛復制的每個復制2個,等等)
  • 根據您從系統獲得的限制,逐步淘汰副本。
  • 嘗試在復制期間為源和目標設置更大的保留空間,以獲取更多的IOPS並減少執行操作的時間。

除了Connor答案外,您還可以考慮在Azure存儲上存儲該主數據庫的dacpac或bacpac,一旦提交了25個並發數據庫副本,就可以開始從Azure Storage還原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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM