以下部分介绍在 Service Manager 数据仓库中可能需要对联机分析处理 (OLAP) 数据多维数据集进行故障排除的常见问题。
处理失败
尽管 DWRepository 数据库中存在安全措施以确保数据完整性,但它们无法完全防止出现处理错误。 最常见的处理错误是 DimensionKeyNotFound 异常。 由于 SQL Server Analysis Server(SSAS)的维度在默认情况下每 60 分钟处理一次,因此在处理事实度量值组时,维度键可能尚未存在。 在这种情况下,处理逻辑会默认使用 ProcessUpdate 任务重新处理 SSAS 维度,然后最多重新处理该事实两次以解决关键错误。
有时重新处理可能会失败,但这种情况不常见。 这种失败的可能原因如下:
只有数据仓库存储库才会强制使用外键来确保数据的完整性。 出于性能考虑,数据市场没有任何外键。 由于加载过程使用 ActiveX 数据对象方法将数据从存储库批量移动到数据市场,因此由于时间问题,事实数据可能在维度键之前加载。 若要解决此问题,必须再次运行加载过程以移动现有的维度键。
在多种数据市场情况中,每个数据市场的所有维度都会将主数据仓库数据市场设定为目标。 这将可减小 OLAP 多维数据集的大小和缩短处理时间。 但是,Operations Manager 或 Configuration Manager 数据市场中的事实可能会针对主数据仓库数据市场中尚不存在的维度键。 这种情况下,必须对主数据市场运行加载作业,以解决将 Operations Manager 或 Configuration Manager 数据市场设定为目标的多维数据集的处理失败问题。
对 MDX 自定义进行故障排除
由于许多多维数据集自定义需要多维表达式(MDX)的工作知识,因此在用于 OLAP 多维数据集自定义的初始 MDX 表达式中出现语法错误很常见。 可能需要进行多次尝试后,表达式才能满足你的需求。 在使用 CubeExtension 将 MDX 表达式添加到 OLAP 多维数据集或在 SystemCenterCube 元素中定义该表达式之前,应使用 Business Intelligence Development Studio (BIDS) 或 SSAS 在 OLAP 多维数据集上测试 MDX 表达式,同时不保存更改。
不过,如果使用 CubeExtension 在管理包中添加 MDX 表达式时该表达式中发生错误,则可以卸载多维数据集扩展以还原对 OLAP 多维数据集所做的任何更改。 如果使用 SystemCenterCube 元素定义表达式,则必须卸载管理包,然后从 SSAS 手动删除 OLAP 多维数据集,然后才能进行任何更正并重新部署 OLAP 多维数据集管理包。 因此,应使用 CubeExtension 元素定义多维数据集自定义项。
OLAP 多维数据集管理包部署失败
你可能会遇到要浏览 WorkItems Assigned To User 度量值组,然后要切分特定部门中的所有用户这种情况。 当你尝试对 UserDim执行筛选时,没有任何反应,也没有返回任何数据。 这可能是令人困惑的,因为 UserDim 与度量值组有关系。
在这种情况下,请记住,在多维模型中,同一个数据库维度可以有多个角色。 我们称这些维度为角色扮演维度。 例如,时间维度在描述航班信息的 OLAP 多维数据集中可多次使用。 这种情况中的不同角色扮演维度可以是 Departure Time 和 Arrival Time,其中这两者都将 Time 维度设定为目标。
在 WorkItems Assigned To User 示例中,用户维度的给定角色扮演名称实际上是 AssignedToUser。 如果用户按此特定维度筛选,而不是“UserDim”,他们将返回正确的信息。
BIDS 有一项非常有用的功能(称为“维度用法”选项卡),该选项卡显示维度与 OLAP 多维数据集之间的关系,以便你能够确定哪些维度可用于对 OLAP 多维数据集进行切片和切块。 此外,在 WorkItems Assigned To User 示例中, UserDim 与 WorkItemAssignedToUser 度量值组之间不存在关系,而 UserDim(AssignedToUser) 与联接属性为 UserDimKey 的度量值组之间存在关系。 在这种情况下,你会看到角色扮演名称在“维度用法”选项卡的括号内突出显示。
Service Manager 没有维度使用情况选项卡功能。 因此,你将需要查看 BIDS 以确切地确定哪些维度可对特定的多维数据集进行筛选。
无法在远程 SSAS 服务器上处理 OLAP 多维数据集
在某些情况下,在远程 SSAS 服务器上处理 OLAP 多维数据集可能会失败,因为防火墙未正确配置。 SSAS 的默认实例使用 TCP/IP 端口 2383,而且在防火墙中必须取消阻止此端口才可进行访问。 若要取消阻止该端口,请运行下面的命令行说明:
C:\Windows\system32>set port=2383
C:\Windows\system32>netsh advfirewall firewall add rule name="Analysis Services" protocol=TCP dir=in localport=2383 action=allow
OLAP 多维数据集处理停止
有多种原因会导致 OLAP 多维数据集处理停止。 必须首先确保服务器具有足够的 RAM,尤其是在数据仓库和 SSAS 服务器托管在同一服务器上的情况,以便有足够的内存来运行数据仓库提取、转换和加载(ETL)和多维数据集处理作业。 这里列出了一些可能的解决方案:
在 Microsoft SQL Server 2008 Analysis Services 中有已知死锁问题。 解决方法是在处理还未停止之前增加处理线程池中的线程数。 如果系统已停止,解决方法是重启 System Center Management 服务和 Analysis Services 服务,然后将多维数据集处理工作项重置为状态 3,这意味着未启动,以便 Service Manager 工作流引擎可以重新启动它。
注意
若要确定相关的多维数据集处理工作项,可以对 DWStagingAndConfig 数据库运行以下查询。 这些查询单独显示;但是,可以轻松地将它们联接在一个查询中:
select processId from infra.process where processname like 'Process.{CubeName}' select batchid from infra.batch where processId = {ProcessId from previous query} select * from infra.workitem(nolock) where BatchId = {BatchId from previous query} update infra.workitem set statusid = 3 where workitemId = {workitemId from previous query)
检查 SSAS 服务上的 CoordinatorExecutionMode 属性,并确保设置正确。 你可以在 SQL Server 论坛上阅读有关此问题的更多信息。
DWMaintenance 任务在“ManageCubePartitions”或“ManageCubeTranslations”步骤停止
在此情况下,最常见的原因是 SSAS 服务器没有响应。 对于上一部分“OLAP 多维数据集处理停止”的第一步,解决方法是相同的。若要确定相关的多维数据集处理工作项,可以对 DWStagingAndConfig 数据库运行以下查询。 请注意,这些查询将逐个显示;但可以轻松地在一个查询中将其联接起来:
select processid from infra.process where processname = 'DWMaintenance'
select * from infra.ProcessModule where ProcessId = {ProcessId from previous query} (Note the ProcessModuleId where the VertexName is ManageCubePartitions/ManageCubeTranslaions)
Select * from infra.batch where ProcessId = {ProcessId from previous query} (Note the BatchId from the largest batch)
select * from infra.WorkItem where BatchId = {BatchId from previous query}
update infra.workitem set statusid = 3 where workitemId = {workitemId for the step that is not responding with the corresponding processmoduleid for ManageCubePartitions/ManageCubeTranslations)
后续步骤
- 使用管理包创建 OLAP 数据立方体。