如何增量处理 SSAS 多维数据集以加快速度?
How to incrementally process a SSAS cube for speed-up?
我需要的是减少使用 AMO 的 SSAS 多维数据集的处理时间,同时将数据添加到数据仓库中的事实 table。
根据 Microsoft 关于 SSAS 的文档:
处理添加
"For dimensions, adds new members and updates dimension attribute captions and descriptions. For measure groups and partitions, adds newly available fact data and process only to the relevant partitions."
进程已满
"Processes an Analysis Services object and all the objects that it contains. When Process Full is executed against an object that has already been processed, Analysis Services drops all data in the object, and then processes the object. This kind of processing is required when a structural change has been made to an object, for example, when an attribute hierarchy is added, deleted, or renamed."
因此,使用以下代码,无论数据仓库中的数据量如何,我至少可以使每条记录的处理时间相似。
var start = DateTime.Now;
var query = "SELECT [dbo].[FactGradingResult].* FROM [dbo].[FactGradingResult] WHERE ([Id] = "+ grading2.Id+")";
ptn.Process(ProcessType.ProcessAdd,
new QueryBinding(dsv.DataSourceID, query));
var end = ptn.LastProcessed;
swch2 = (end - start).TotalMilliseconds;
但是 ProcessAdd 仍然需要大约 900 毫秒来使用单行事实更新多维数据集 table。这是使用 Windows Server 2012 的 8 核 2.5GHz 机器的 SSAS ProcessAdd 的典型时间吗?如果不是,我如何才能将每行的多维数据集处理时间提高到 table?
我相信具有正确分区的进程添加会为您做到这一点。不是这方面的专家,但这里有一个关于如何在 SQL 周六我去的星期六的演示。 http://www.sqlsaturday.com/SessionDownload.aspx?suid=3708
根据您对多维数据集实时刷新的说明,我建议您权衡哪个对您更重要。查询性能更重要吗?然后继续您正在做的事情,因为 MOLAP 查询性能将优于我在下面的 ROLAP 建议。
但是,如果更重要的是让新数据进入多维数据集的延迟为零,那么我建议您切换到一些包括 ROLAP 的方法。
为了进一步描述 ROLAP 方法,我建议创建一个 MOLAP 分区,其中包含您的事实 table 到昨天为止的所有数据。然后创建第二个分区,将其设置为 StorageMode=ROLAP 并过滤到今天到达的任何行。然后每天晚上,适当地更改分区定义并重新处理第一个分区。确保所有维度都是 MOLAP,因为我假设它们不需要实时更改。 (出于性能原因,我会避免使用 ROLAP 维度。)
您可能必须按照 here 所述在连接字符串上设置 "Real Time OLAP=true" 属性。
我需要的是减少使用 AMO 的 SSAS 多维数据集的处理时间,同时将数据添加到数据仓库中的事实 table。
根据 Microsoft 关于 SSAS 的文档:
处理添加
"For dimensions, adds new members and updates dimension attribute captions and descriptions. For measure groups and partitions, adds newly available fact data and process only to the relevant partitions."
进程已满
"Processes an Analysis Services object and all the objects that it contains. When Process Full is executed against an object that has already been processed, Analysis Services drops all data in the object, and then processes the object. This kind of processing is required when a structural change has been made to an object, for example, when an attribute hierarchy is added, deleted, or renamed."
因此,使用以下代码,无论数据仓库中的数据量如何,我至少可以使每条记录的处理时间相似。
var start = DateTime.Now;
var query = "SELECT [dbo].[FactGradingResult].* FROM [dbo].[FactGradingResult] WHERE ([Id] = "+ grading2.Id+")";
ptn.Process(ProcessType.ProcessAdd,
new QueryBinding(dsv.DataSourceID, query));
var end = ptn.LastProcessed;
swch2 = (end - start).TotalMilliseconds;
但是 ProcessAdd 仍然需要大约 900 毫秒来使用单行事实更新多维数据集 table。这是使用 Windows Server 2012 的 8 核 2.5GHz 机器的 SSAS ProcessAdd 的典型时间吗?如果不是,我如何才能将每行的多维数据集处理时间提高到 table?
我相信具有正确分区的进程添加会为您做到这一点。不是这方面的专家,但这里有一个关于如何在 SQL 周六我去的星期六的演示。 http://www.sqlsaturday.com/SessionDownload.aspx?suid=3708
根据您对多维数据集实时刷新的说明,我建议您权衡哪个对您更重要。查询性能更重要吗?然后继续您正在做的事情,因为 MOLAP 查询性能将优于我在下面的 ROLAP 建议。
但是,如果更重要的是让新数据进入多维数据集的延迟为零,那么我建议您切换到一些包括 ROLAP 的方法。
为了进一步描述 ROLAP 方法,我建议创建一个 MOLAP 分区,其中包含您的事实 table 到昨天为止的所有数据。然后创建第二个分区,将其设置为 StorageMode=ROLAP 并过滤到今天到达的任何行。然后每天晚上,适当地更改分区定义并重新处理第一个分区。确保所有维度都是 MOLAP,因为我假设它们不需要实时更改。 (出于性能原因,我会避免使用 ROLAP 维度。)
您可能必须按照 here 所述在连接字符串上设置 "Real Time OLAP=true" 属性。