由于内存不足,处理 SSAS 表格模型失败
Processing SSAS Tabular model fails because of not enough memory
我有一台48GB内存的服务器,上面安装了sql服务器分析服务(表格模式),2016标准版SP1 CU7。
我可以从 visual studio 部署表格模型。
我可以手动 运行 一个 XMLA 脚本:
{
"refresh": {
"type": "full",
"objects": [
{
"database": "MyCube"
}
]
}
}
但是当我 运行 来自 sql 代理作业的脚本时,我得到这个错误:
the JSON DDL request failed with the following error: Failed to execute XMLA. Error returned: 'There's not enough memory to complete this operation. Please try again later when there may be more memory available.'.. at Microsoft.AnalysisServices.Xmla.XmlaClient.CheckForSoapFault
处理前内存约4GB,在处理立方体的过程中增加,但当达到约18.5GB时,失败。
有人知道解决办法吗?
如果您是 运行 标准版,SQL Server 2016 中的 Analysis Services Tabular 实例限制为 16GB 内存,如 here 所述。企业版取消了该上限。
当你完成一个完整的过程时,你会保留一个多维数据集的工作副本,并在后台处理一个卷影副本。卷影副本准备就绪后,它将替换工作副本。基本上,这意味着在处理时,您需要的内存量是多维数据集大小的两倍。当 SSAS 标准版的每个实例有 16 GB 的限制时,这可能会成为一个问题。
一个解决方案是先用 clearValues 做一个过程,这会清空立方体,然后再做完整的过程。此处有更多详细信息 http://byobi.com/2016/12/how-much-ram-do-i-need-for-my-ssas-tabular-server/
或者另一个是使用 SSAS 服务器的 Memory\VertiPaqPagingPolicy 设置。在此处查看更多详细信息 https://www.jamesserra.com/archive/2012/05/what-happens-when-a-ssas-tabular-model-exceeds-memory/ and here https://www.sqlbi.com/articles/memory-settings-in-tabular-instances-of-analysis-services/
当然,另一种解决方案是升级到企业版。
为了跟进 Greg 的评论,我在工作中遇到了类似的问题,解决方法不是刷新数据库,而是 table 刷新。我创造了 2 SQL 个职位。我的表格模型有 40 tables。因此,根据 tables 的大小,我在一个作业中刷新 x 数量的 tables,在其他作业中刷新 y 数量的 table。如果您愿意,您可以创建 2 个以上的 SQL 个职位,每个职位的 table 个职位较少。这将减少内存负载。
您可以通过对表进行分区来处理数据的小子集,这可以在 SSMS 中处理。 Article 很好地概述了如何实现这一点。
我有一台48GB内存的服务器,上面安装了sql服务器分析服务(表格模式),2016标准版SP1 CU7。
我可以从 visual studio 部署表格模型。
我可以手动 运行 一个 XMLA 脚本:
{
"refresh": {
"type": "full",
"objects": [
{
"database": "MyCube"
}
]
}
}
但是当我 运行 来自 sql 代理作业的脚本时,我得到这个错误:
the JSON DDL request failed with the following error: Failed to execute XMLA. Error returned: 'There's not enough memory to complete this operation. Please try again later when there may be more memory available.'.. at Microsoft.AnalysisServices.Xmla.XmlaClient.CheckForSoapFault
处理前内存约4GB,在处理立方体的过程中增加,但当达到约18.5GB时,失败。
有人知道解决办法吗?
如果您是 运行 标准版,SQL Server 2016 中的 Analysis Services Tabular 实例限制为 16GB 内存,如 here 所述。企业版取消了该上限。
当你完成一个完整的过程时,你会保留一个多维数据集的工作副本,并在后台处理一个卷影副本。卷影副本准备就绪后,它将替换工作副本。基本上,这意味着在处理时,您需要的内存量是多维数据集大小的两倍。当 SSAS 标准版的每个实例有 16 GB 的限制时,这可能会成为一个问题。
一个解决方案是先用 clearValues 做一个过程,这会清空立方体,然后再做完整的过程。此处有更多详细信息 http://byobi.com/2016/12/how-much-ram-do-i-need-for-my-ssas-tabular-server/
或者另一个是使用 SSAS 服务器的 Memory\VertiPaqPagingPolicy 设置。在此处查看更多详细信息 https://www.jamesserra.com/archive/2012/05/what-happens-when-a-ssas-tabular-model-exceeds-memory/ and here https://www.sqlbi.com/articles/memory-settings-in-tabular-instances-of-analysis-services/
当然,另一种解决方案是升级到企业版。
为了跟进 Greg 的评论,我在工作中遇到了类似的问题,解决方法不是刷新数据库,而是 table 刷新。我创造了 2 SQL 个职位。我的表格模型有 40 tables。因此,根据 tables 的大小,我在一个作业中刷新 x 数量的 tables,在其他作业中刷新 y 数量的 table。如果您愿意,您可以创建 2 个以上的 SQL 个职位,每个职位的 table 个职位较少。这将减少内存负载。
您可以通过对表进行分区来处理数据的小子集,这可以在 SSMS 中处理。 Article 很好地概述了如何实现这一点。