我们已经创建了一些新的SSAS表格模型,它们直接从Oracle获取数据。但是经过一些测试,我们发现,使用真实的客户数据(包含几百万行数据),处理时间接近4小时。我们的目标是将它们保持在15分钟以下(由于现有系统的性能)。我们从Oracle表中获取数据,因此查询性能不是瓶颈。
是否有通用的设计指南/最佳实践来处理这种情况?
请检查您的应用程序侧阵列获取大小,因为您可能会遇到网络延迟。**数组提取大小注意:根据Oracle文档,“提取缓冲区大小”是应用程序端的内存设置,它会影响单个提取返回的行数。通常,您可以通过一次提取(也称为数组提取大小)来平衡返回的行数与需要提取的行数之间的平衡。
与需要返回的行数相比,较低的数组获取大小将表现为处理每个获取所需的网络和客户端处理增加的延迟(即,每个网络往返的高成本[SQL * Net协议]) 。
如果是这种情况,那么在Oracle方面,您可能会在“来自客户端的SQL * Net消息”上看到很高的等待。 [当会话正在等待来自客户端的消息到达时,会话将发布此等待事件。通常,这意味着会话只是处于空闲状态,但是,在客户端/服务器环境中,这也可能意味着客户端进程运行缓慢或存在网络延迟。此等待事件的高等待时间不会降低数据库性能。]
正如我想说的:“ SQL * Net是一个健谈协议”;因此,即使Oracle可以完成其查询处理,过多的网络往返也会导致客户端的响应时间变慢。如果将数据放入应用程序中所花费的时间比数据库运行SQL所花费的时间长得多,则应该期望低数组提取大小可能会导致速度变慢。在这种情况下,应用程序侧处理时间也可能是导致速度缓慢的一个因素[您可以研究应用程序特定的方法来对应用程序侧处理进行故障排除/调试]。
数组获取大小既不是Oracle帐户的属性,也不是Oracle副会话设置。数组获取大小只能在客户端设置。客户端将使用的数组提取大小没有数据库设置。每个客户端应用程序都有不同的机制来指定数组提取大小: