将大型数据从Oracle加载到表格模型的最佳实践

将大型数据从Oracle加载到表格模型的最佳实践,oracle,ssis,ssas,data-warehouse,ssas-tabular,Oracle,Ssis,Ssas,Data Warehouse,Ssas Tabular,我们创建了一些新的SSAS表格模型,这些模型直接从Oracle获取数据。但是经过一些测试,我们发现对于真实的客户数据(有数百万行数据),处理时间接近4小时。我们的目标是将它们保持在15分钟以内(由于现有的系统性能)。我们从Oracle表获取数据,因此查询性能不是瓶颈 是否有任何通用的设计指南/最佳实践来处理这种情况?检查您的应用程序端阵列获取大小,因为您可能会遇到网络延迟。 **数组获取大小注意: 根据Oracle文档,Fetch Buffer Size是一个应用程序端内存设置,它影响单个Fet

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


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

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

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

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

正如我喜欢说的:“SQL*Net是一个聊天协议”;因此,即使Oracle可以完成查询处理,过多的网络往返也会导致客户端的响应时间变慢。如果将数据获取到应用程序中所用的时间比数据库运行SQL所用的时间长得多,那么低数组获取大小可能会导致速度缓慢;在这种情况下,应用程序端处理时间也可能是导致缓慢的一个因素[您可以研究特定于应用程序的方法来排除故障/调整应用程序端处理]

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

  • 信息学:??配置。文件参数???在连接处设置或 结果集级别?? 干邑
  • SQL*Plus:设置数组大小n
  • 语句中的Java/JDBC:setFetchSize(int rows)/*方法, PreparedStatement、CallableStatement和ResultSet对象*/ 属性对象放置方法“defaultRowPrefetch” 指向Oracle JDBC DefaultRowPrefetch的另一个链接
  • .Net Oracle.Net开发人员指南FetchSize属性表示 ODP.NET分配给缓存的总内存大小(字节) 从数据库往返获取的数据。FetchSize属性可以 在OracleCommand、OracleDataReader或OracleRefCursor上设置 对象,视情况而定。它控制的获取大小 使用OracleDataAdapter填充数据集或数据表
  • ODBC驱动程序:??类似于:SetRowsetSize

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

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

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

正如我喜欢说的:“SQL*Net是一个聊天协议”;因此,即使Oracle可以完成查询处理,过多的网络往返也会导致客户端的响应时间变慢。如果将数据获取到应用程序中所用的时间比数据库运行SQL所用的时间长得多,那么低数组获取大小可能会导致速度缓慢;在这种情况下,应用程序端处理时间也可能是导致缓慢的一个因素[您可以研究特定于应用程序的方法来排除故障/调整应用程序端处理]

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

  • 信息学:??配置。文件参数???在连接处设置或 结果集级别?? 干邑
  • SQL*Plus:设置数组大小n
  • 语句中的Java/JDBC:setFetchSize(int rows)/*方法, PreparedStatement、CallableStatement和ResultSet对象*/ 属性对象放置方法“defaultRowPrefetch” 指向Oracle JDBC DefaultRowPrefetch的另一个链接
  • .Net Oracle.Net开发人员指南FetchSize属性