在 Azure SQL 数据库上的插入速度非常慢



我在Azure SQL数据库上使用Microsoft Sync-Framework 2.1。我正在为同步预配的表有大约 1M 条记录。创建同步范围时,同步框架会创建一个XXX_tracking表,每个原始记录一行。在 Azure 上创建此表非常慢。 正在执行的查询如下所示:

INSERT INTO [Transactions_tracking] 
([Id], [create_scope_local_id], [local_create_peer_key], [local_create_peer_timestamp], [update_scope_local_id], [local_update_peer_key]
, [sync_row_is_tombstone], [PointOfSaleId], [ExecutedTime]) 
SELECT [base].[Id], NULL, 0, @@DBTS+1, NULL, 0, 0, [base].[PointOfSaleId], [base].[ExecutedTime] 
FROM [Transactions] [base] LEFT OUTER JOIN [Transactions_tracking] [side] ON [base].[Id] = [side].[Id] WHERE [side].[Id] IS NULL; 

在SQL Express上,这需要19秒,而在具有50个DTU的Azure上,这需要619秒,我真的无法解释。

有什么想法吗? 谢谢特拉维斯

可能是大容量加载进程达到了 DTU 限制,并且正在发生限制。高级层适用于 I/O 密集型工作负荷,可以在这些类型的工作负荷运行之前纵向扩展到高级层,并在这些工作负荷不再存在时缩减到原始层。

高级层如何为 IO 操作和事务提供更好的性能的一个示例是将标准 S1 与高级 P2 进行比较。标准 S1 的插入限制为每分钟 1.4 MB,而高级 P2 的插入限制为每分钟 13.5 MB。

有时可以使用"等待延迟"语句来限制自己的进程,但仅当问题是插入的突发暂时超过 DTU 限制时,才会这样做。 如果数据一次超过 DTU 限制数小时,则只需要更多 DTU。

此处的 Azure 文档还讨论了使用批处理来提高插入性能的重要性。

最新更新