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

Inserts on Azure SQL Database very slow

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

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,而在 azure 上有 50 个 DTU 需要 619s,我真的无法解释.

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

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

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

您有时可以通过使用 "wait for delay" 语句来限制您自己的进程,但前提是您的插入突然超出 DTU 限制。如果数据一次超过数小时的 DTU 限制,您只需要更多的 DTU。

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