在两个 Azure SQL 数据库之间传输视图数据的最快方法是什么?

What is the fastest way to transfer view data between two Azure SQL Databases?

我需要将一个只读 Azure SQL 数据库中多个视图中包含的数据传输到同一逻辑服务器上另一个 Azure SQL 数据库中的相应表。这些表将用于与充当集线器的目标服务器进行数据同步,因此这是一个每天重复多次的过程。每个视图大约有 20 万行,这些行会增长。两个数据库都分配了足够的 DTU,因此它们不会在此过程中达到最大值。

使用外部表或批量复制在技术上很简单,但性能太慢。

-外部 tables/Elastic 查询复制一个视图大约需要 12-15 分钟

-通过云 shell 上的 Powershell 或 Azure 函数进行批量复制速度更快,但在 Azure 逻辑应用程序中 运行ning 时超时,因为它需要超过 120单个视图副本 运行 秒。这意味着后续步骤不会触发。

从 SQL 托管实例进行事务复制是一种选择,但它会显着增加成本。

这是一个悬而未决的问题,但是批量复制功能是否尽可能快,还是我错过了另一个选项?

函数代码本身就是一个标准的c#批量拷贝

string Source = <Source Connection>; 
string Destination =  <DestinationConnection>;
 using (SqlConnection sourceCon = new SqlConnection(Source))  
  {  
        SqlCommand cmd = new SqlCommand("SELECT  * FROM [dbo].[SOURCE_VIEW]", sourceCon);  
        sourceCon.Open();  
        using (SqlDataReader rdr = cmd.ExecuteReader())  
        {  
              using (SqlConnection destinationCon = new SqlConnection(Destination))  
              {  
                    using (SqlBulkCopy bc = new SqlBulkCopy(destinationCon))  
                    {  
                          bc.BatchSize = 10000;   
                          bc.DestinationTableName = "[dbo].[DESTINATION_TABLE]";    
                          destinationCon.Open();  
                          bc.WriteToServer(rdr);   
                    }  
              }  
        }  
  }

您是否考虑过使用 Data Factory

它具有传输大数据的快速性能。参考:Copy performance and scalability achievable using ADF:

您可以从本教程中学习:Copy and transform data in Azure SQL Database by using Azure Data Factory

本文概述了如何使用 Azure 数据工厂中的复制 Activity 从 Azure SQL 数据库中复制数据,以及如何使用数据流在 Azure SQL 数据库中转换数据.

数据工厂有许多组件可以帮助您将数据从多个视图复制到一个管道中的另一个 Azure SQL 数据库。

希望对您有所帮助。