OPENQUERY MDX 查询在多维数据集处理期间非常慢

OPENQUERY MDX query is very slow during cube processing

我在 SSAS 服务器上有多个多维数据集,很少有 10GB 以上的多维数据集。 .NET 应用程序之一正在通过 OPENQUERY 访问相对较小的多维数据集 <1GB 多维数据集。

当其中一个大立方体正在处理 (36GB+) .NET 应用程序超时时,因为存在默认超时(30 秒),我可以增加超时,但这意味着用户将不得不等待 1 到 5 分钟查询完成。如果我 运行 直接查询相同的 MDX(SSMS 或 ADOMD),我在相同情况下得到的结果 <1s。

MSOLAP 提供程序允许 InProcess=true。更改应用程序以使用 ADOMD 不是可行的选择,因为它会占用太多资源。

我尝试使用 Resource Governor 并将处理与应用程序查询和其他请求分开 - 它部分缓解了问题,现在不是每个查询超时 - 只是其中的大部分。

还有什么我可以做的来帮助 SQL Server 和 SSAS 相处吗?

PS。在查看服务器上发生的情况时,我注意到 SQL 服务器上有很多 ODBC(和相关)等待。在我看来,当多维数据集正在处理和访问来自 SQL 服务器的数据时,它 "blocks" OPENQUERY 通过 OLEDB/ODBC 提供商向多维数据集请求。我得出这个结论是因为即使我通过 Resource Governor 确保有足够的空闲 CPU 和内存来处理 .NET App 请求,它仍然会发生,服务器似乎不那么忙(减少 CPU/Memory 使用)

编辑:

每个 .NET 应用程序调用 运行 对 SSAS 的少量 MDX 查询 运行 - 每个查询 return 不超过 100 行。所有这些都在临时表中组合成最终结果。现在,我知道开始和优化代码是合乎逻辑的地方,但是代码是我们最不想更改的东西。它经过了很好的测试,并且在其他方​​面表现良好。

我正在寻找配置和基础架构方面的想法。

我们在存储过程中为 mdx 使用 OPENQUERY 时遇到了非常相似的阻塞和超时问题。

大约 2 年前,我们切换到开源 CLR 解决方案 - 我们现在以与 OPENQUERY 类似的方式使用这些存储过程,但没有问题!!

目前可以在这里找到:

https://olapextensions.codeplex.com/