我在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上,这需要 19s ,而在天蓝色的50 DTU上需要 619s ,我实在无法解释。
有什么想法吗? 谢谢特拉维斯
答案 0 :(得分:1)
可能是批量加载过程达到DTU限制并且正在进行限制。高级层用于I / O密集型工作负载,您可以在这些类型的工作负载运行之前扩展到高级层,并在这些工作负载不再存在时向下扩展到原始层。
Premium Tiers如何为IO操作和事务提供更好的性能的示例可以是将标准S1与Premium P2进行比较。标准S1的插入限制为每分钟1.4 MB,其中Premium P2的插入限制为每分钟13.5 MB。
您有时可以使用"等待延迟"来限制自己的流程。声明,但只有当问题出现时,您的插入才会突然超过DTU限制。如果数据一次超过DTU限制几小时,则只需要更多DTU。
Azure文档here讨论了使用批处理来提高插入性能的重要性。