Azure SQL 数据库和 SQL 托管实例导入/导出服务需要很长时间来导入或导出数据库

适用于:Azure SQL 数据库Azure SQL 托管实例

使用导入/导出服务时,相关过程花费的时间可能比预期要长。 本文介绍此延迟的可能原因和替代解决方法。

Azure SQL 数据库导入/导出服务

Azure SQL 数据库导入/导出服务是一项在每个 Azure 数据中心运行的基于 REST 的 Web 服务。 在 Azure 门户中使用导入或导出数据库选项移动数据库时,会调用该服务。 此服务提供免费的请求排队和计算服务以在 Azure SQL 数据库和 Azure Blob 存储之间执行导入和导出操作。

这些导入和导出操作不代表传统的物理数据库备份,而是代表对使用特殊 BACPAC 格式的数据库进行的逻辑备份。 有了 BACPAC 格式,就不必使用 Microsoft SQL Server 版本、Azure SQL 数据库版本和 Azure SQL 托管实例版本之间可能存在差异的物理格式。

什么导致此过程中出现的延迟?

Azure SQL 数据库导入/导出服务为每个区域提供有限数量的计算虚拟机 (VM) 来处理导入和导出操作。 计算 VM 按区域托管,确保导入或导出避免跨区域带宽延迟和收费。 如果在同一区域中同时发出过多请求,则可能会在处理这些操作时出现显著延迟。 完成请求所需的时间可能短至数秒,也可能长达许多小时。

此外,由于导入/导出服务执行数据库的逻辑备份,因此与传统的物理数据库备份相比,它的完成时间更依赖于数据库中的对象数量。

注意

分配资源并开始处理请求后,服务会在两天后自动取消请求。

如果数据库导出仅用于从意外数据删除进行的恢复,则所有 Azure SQL 数据库版本都会提供从系统生成的备份进行自助还原的功能。 但是,如果因为其他原因而需要这些导出,并且需要持续情况下更快或可预测性更强的导入/导出性能,请考虑以下选项:

导出或导入数据库时要考虑的事项

  • 本文讨论的所有方法使用数据库事务单位 (DTU) 或 CPU 配额,导致 Azure SQL 数据库服务进行相关限制。 可以在 Azure 门户中查看数据库的 DTU 统计信息。 如果数据库达到其资源限制,请升级服务层级以添加更多资源。
  • 理想情况下,应该在数据库所在区域的 VM 中运行客户端应用程序(例如 sqlpackage 实用工具或自定义 DAC 应用程序)。 否则,可能会遇到与网络延迟相关的性能问题。
  • 在没有聚集索引的情况下导出大型表可能会很慢,甚至会导致故障。 出现此行为的原因是:表不能拆分,因此无法以并行方式导出, 而只能在单个事务中导出,这导致在导出过程中出现性能降低的情况,并且存在故障的可能,大型表尤其如此。

导出数据库时的注意事项