以 Oracle 作为源在 Synapse 专用池中加载 6 亿多条记录
Load 600+ million records in Synapse Dedicated Pool with Oracle as Source
我正在尝试完全加载驻留在 Oracle On-Prem 数据库中的非常大的 table(600 多万条记录)。我的目的地是 Azure Synapse 专用池。
我已经尝试过以下操作:
将 ADF 复制 activity 与源分区一起使用,因为源 table 有 22 个分区
我将 Copy Parallelism 和 DIU 提高到一个非常高的水平
不过,我只能在 3 小时内获取 1.5 亿条记录,而要求是在大约 2 小时内完成全部加载,因为在该时间范围内源将冻结给用户,以便 Synapse 可以复制数据
如何在该时间范围内完成从 Oracle 到 Synapse 的完整数据副本?
为了改变,我尝试将数据从 Oracle 加载到 ADLS Gen 2,但速度也很慢
这里有很多因素需要考虑。一些想法:
- 阅读 table 的速度有多快?有哪些索引/物化视图?是否有数据库级别的争用需要排除?
- 建议:确保数据库设置为在您正在导出的 table 上快速读取
- 你是 on-premises,本地网卡设置和吞吐量是多少?
- 建议:确保本地网络设置尽可能快
- 由于您是 on-premises,您必须使用 Self-hosted 集成运行时 (SHIR)。这台机器的规格是什么?例如,根据最低规格,8GB RAM、用于假脱机的 SSD 等。它位于哪里?例如 'near' 数据源(在同一个 on-premises 网络中)或在云中。可以通过 up to four nodes 来扩展 SHIR,但您应该通过可用的指标确保在扩展之前这是一个瓶颈。
- 建议:考虑将 SHIR 'close' 定位到数据源(即在同一网络中)
- 是 SHIR 软件版本 up-to-date?这会偶尔更新,因此最好保持更新。
- 建议:保留SHIR软件up-to-date
- 您有快速路线或通过互联网吗? ER 可能会更快
- 建议:考虑快速路线。或者考虑 Data Box 进行大型 one-off 导出。
- 您几乎肯定会直接登陆 ADLS Gen 2 或 blob 存储。直接进入数据库可能会导致那里的争用,并且您正在处理事务日志记录、DWU、资源 class 和队列争用等 Synapse 概念。在 Azure 门户中查看存储的指标以确定它是否处于压力之下。如果承受压力(我认为不太可能),请考虑多个存储帐户
- 建议:加载数据到 ADLS2。虽然这看起来像是一个额外的步骤,但它提供了一个恢复点并通过尝试同时执行提取和加载来避免争用问题。如果你能证明它运行得更快并且你绝对不需要恢复点,我只会直接加载到数据库
- 你在湖中降落是什么格式?例如,转换为镶木地板需要大量计算。降落到湖上确实会留下审计线索,如果出现问题,您可以从中恢复
- 建议:使用 parquet 作为压缩格式。您可能需要优化文件大小。
- 最终最好的办法是进行一次大批量加载(比如周末),然后使用 CDC 机制进行增量更新。这将使您能够满足您的 2 小时 window.
- 建议:考虑 one-off 大批量加载和 CDC/增量加载以保持在时间线内
总而言之,这可能是您的网络问题,但您首先需要进行大量调查,然后是我上面列出的一些选项。
wBob 提供了一个很好的总结,其中包含您需要注意的事项以提高您的传输速度。除此之外,您可以尝试将数据批量导出到数据文件块中,然后 in-parallel 将文件传输到 azure datalake 或 azure blob 存储,这样您可以最大化网络吞吐量。
一旦数据在数据湖上,您就可以扩展您的 Synapse 实例并使用 COPY 命令利用快速加载。
我在我们的组织中遇到了同样的问题,从 SQL 服务器中获取数据的最快方法是使用 bcp 进入快速存储层。
我正在尝试完全加载驻留在 Oracle On-Prem 数据库中的非常大的 table(600 多万条记录)。我的目的地是 Azure Synapse 专用池。
我已经尝试过以下操作:
将 ADF 复制 activity 与源分区一起使用,因为源 table 有 22 个分区
我将 Copy Parallelism 和 DIU 提高到一个非常高的水平
不过,我只能在 3 小时内获取 1.5 亿条记录,而要求是在大约 2 小时内完成全部加载,因为在该时间范围内源将冻结给用户,以便 Synapse 可以复制数据
如何在该时间范围内完成从 Oracle 到 Synapse 的完整数据副本?
为了改变,我尝试将数据从 Oracle 加载到 ADLS Gen 2,但速度也很慢
这里有很多因素需要考虑。一些想法:
- 阅读 table 的速度有多快?有哪些索引/物化视图?是否有数据库级别的争用需要排除?
- 建议:确保数据库设置为在您正在导出的 table 上快速读取
- 你是 on-premises,本地网卡设置和吞吐量是多少?
- 建议:确保本地网络设置尽可能快
- 由于您是 on-premises,您必须使用 Self-hosted 集成运行时 (SHIR)。这台机器的规格是什么?例如,根据最低规格,8GB RAM、用于假脱机的 SSD 等。它位于哪里?例如 'near' 数据源(在同一个 on-premises 网络中)或在云中。可以通过 up to four nodes 来扩展 SHIR,但您应该通过可用的指标确保在扩展之前这是一个瓶颈。
- 建议:考虑将 SHIR 'close' 定位到数据源(即在同一网络中)
- 是 SHIR 软件版本 up-to-date?这会偶尔更新,因此最好保持更新。
- 建议:保留SHIR软件up-to-date
- 您有快速路线或通过互联网吗? ER 可能会更快
- 建议:考虑快速路线。或者考虑 Data Box 进行大型 one-off 导出。
- 您几乎肯定会直接登陆 ADLS Gen 2 或 blob 存储。直接进入数据库可能会导致那里的争用,并且您正在处理事务日志记录、DWU、资源 class 和队列争用等 Synapse 概念。在 Azure 门户中查看存储的指标以确定它是否处于压力之下。如果承受压力(我认为不太可能),请考虑多个存储帐户
- 建议:加载数据到 ADLS2。虽然这看起来像是一个额外的步骤,但它提供了一个恢复点并通过尝试同时执行提取和加载来避免争用问题。如果你能证明它运行得更快并且你绝对不需要恢复点,我只会直接加载到数据库
- 你在湖中降落是什么格式?例如,转换为镶木地板需要大量计算。降落到湖上确实会留下审计线索,如果出现问题,您可以从中恢复
- 建议:使用 parquet 作为压缩格式。您可能需要优化文件大小。
- 最终最好的办法是进行一次大批量加载(比如周末),然后使用 CDC 机制进行增量更新。这将使您能够满足您的 2 小时 window.
- 建议:考虑 one-off 大批量加载和 CDC/增量加载以保持在时间线内
总而言之,这可能是您的网络问题,但您首先需要进行大量调查,然后是我上面列出的一些选项。
wBob 提供了一个很好的总结,其中包含您需要注意的事项以提高您的传输速度。除此之外,您可以尝试将数据批量导出到数据文件块中,然后 in-parallel 将文件传输到 azure datalake 或 azure blob 存储,这样您可以最大化网络吞吐量。
一旦数据在数据湖上,您就可以扩展您的 Synapse 实例并使用 COPY 命令利用快速加载。
我在我们的组织中遇到了同样的问题,从 SQL 服务器中获取数据的最快方法是使用 bcp 进入快速存储层。