【问题标题】:Best practices for loading large data from Oracle to Tabular model将大数据从 Oracle 加载到表格模型的最佳实践
【发布时间】:2020-03-20 18:05:13
【问题描述】:

我们创建了一些直接从 Oracle 获取数据的新 SSAS 表格模型。但经过一些测试,我们发现使用真实的客户数据(几百万行数据),处理时间接近 4 小时。我们的目标是将它们保持在大约 15 分钟以下(由于现有系统性能)。我们从 Oracle 表中获取数据,因此查询性能不是瓶颈。

是否有任何通用设计指南/最佳实践来处理这种情况?

【问题讨论】:

  • 实际上我们确实有相当多的 RAM 和 CPU,这是我们认为的延迟的巨大数据集和 ssas 数据加载的 oracle。
  • Oracle 和 SSAS 上的 128 Gb 应该足够了。我们正在寻找其他人可能常用来解决如此大量数据加载的架构模式。
  • 我们发现将 SQL Server 作为“暂存数据库”极大地提高了性能。我们正在考虑使用 SSIS 进行增量加载。
  • 我使用/看到的标准模式是 Oracle > Staging > SSAS
  • @Jonee 谢谢,是的,这对我们来说似乎也是最可行的模式。

标签: oracle ssis ssas data-warehouse ssas-tabular


【解决方案1】:

检查您的应用程序端数组获取大小,因为您可能会遇到网络延迟。 ** 数组获取大小注意: 根据 Oracle 文档,Fetch Buffer Size 是一个应用程序端内存设置,它影响单个 fetch 返回的行数。通常,您可以平衡单次提取(也称为数组提取大小)返回的行数和需要提取的行数。

与需要返回的行数相比,较小的数组提取大小将表现为处理每次提取所需的网络和客户端处理增加造成的延迟(即每次网络往返的高成本 [SQL*Net 协议] )。

如果是这种情况,在 Oracle 端,您可能会看到“来自客户端的 SQL*Net 消息”的等待时间非常长。 [此等待事件由会话在等待来自客户端的消息到达时发布。通常,这意味着会话只是处于空闲状态,但是,在客户端/服务器环境中,这也可能意味着客户端进程运行缓慢或存在网络延迟延迟。此等待事件的高等待时间不会降低数据库性能。]

正如我喜欢说的:“SQL*Net 是一个健谈的协议”;因此,即使 Oracle 可以完成对查询的处理,过多的网络往返也会导致客户端的响应时间变慢。如果将数据放入应用程序所用的时间比数据库运行 SQL 所用的时间长得多,那么人们应该预料到,较小的数组获取大小可能会导致速度变慢;在这种情况下,应用端处理时间也可能是导致缓慢的一个因素[您可以查看应用特定的方法来解决/调整应用端处理]。

数组获取大小不是 Oracle 帐户的属性,也不是 Oracle 端会话设置。数组获取大小只能在客户端设置;客户端将使用的数组获取大小没有 DB 设置。每个客户端应用程序都有不同的机制来指定数组获取大小:

【讨论】:

  • 我们仔细评估了参数,但我们认为速度缓慢是因为数据量巨大。
  • @GayanDasanayake 大量数据将使数组获取大小变得更加重要。您还可以研究优化“会话数据单元”SDU;最大化 SDU 的大小将转化为更低的网络开销。
  • powerquery m-partions 似乎不支持 fetchSize 属性docs.microsoft.com/en-us/powerquery-m/oracle-database
  • @GayanDasanayake 很遗憾,我的经验主要是使用 Oracle 数据库,所以我无法在 PowerQuery 方面提供帮助。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 2012-02-19
  • 1970-01-01
  • 2014-06-16
  • 2017-05-30
  • 1970-01-01
  • 2014-02-13
  • 2018-10-22
相关资源
最近更新 更多