如何以编程方式检查 SSAS 数据库/多维数据集是不是正在处理?

Posted

技术标签:

【中文标题】如何以编程方式检查 SSAS 数据库/多维数据集是不是正在处理?【英文标题】:How can I programmatically check if an SSAS database/cube is processing?如何以编程方式检查 SSAS 数据库/多维数据集是否正在处理? 【发布时间】:2015-06-24 15:32:10 【问题描述】:

我有一个应用程序,它将更新一个小维度并重建一个度量值组,该度量值组是一个更大的多维数据集的一部分。

早上构建有时可能需要一两个小时。我想从应用程序中检查此特定数据库中是否正在进行任何处理,并向用户发送一条消息,告知他们需要等待。

我检查过的 AMO 对象都有一个 State 属性,但这似乎只反映了当前状态,并且似乎对可能正在进行的处理一无所知。我认为这是因为处理完成后对象被替换。

我现在看到的唯一选择是根据this MSDN article 启动自定义跟踪,让它运行一段时间,然后检查是否有任何进度事件。

出于显而易见的原因,我认为这不是解决我的问题的可靠方法。有没有更好的办法?我希望像数据库对象上的“IsProcessing”标志这样简单的东西。

另一个可能的想法是查询活动会话 DMV 并查看命令中是否有“进程”文本。我还是觉得不靠谱。

任何和所有建议都表示赞赏。

【问题讨论】:

【参考方案1】:

可能最好的方法是查看是否存在处理锁。我还没有大量测试过不同的LOCK_TYPE 值,但我认为如果此查询返回任何行,则说明您的多维数据集正在处理中。

    SELECT *
    FROM $SYSTEM.DISCOVER_LOCKS
    WHERE LOCK_STATUS = 1
    AND LOCK_OBJECT_ID = '<Object><DatabaseID>YourDatabaseID</DatabaseID></Object>'
    AND (
     LOCK_TYPE = 2
     OR LOCK_TYPE = 4
     OR LOCK_TYPE = 10
     OR LOCK_TYPE = 16
    )

【讨论】:

感谢您的回复,我会试一试的。这可能是一个愚蠢的后续问题,但我看到 LOCK_OBJECT_ID 位于数据库级别。我们是否假设如果正在处理单个度量值组,数据库级别仍然会有锁? 是的。对其进行测试,但我尝试处理度量值组并确实获得了数据库级锁定。

以上是关于如何以编程方式检查 SSAS 数据库/多维数据集是不是正在处理?的主要内容,如果未能解决你的问题,请参考以下文章

SSAS 维度属性在多维数据集浏览器 (BIDS) 中不可见

逆向工程多维数据集以使用 SSAS 2008 构建关系数据库

SSAS 多维数据集 Excel 数据透视表隐藏字段

如何执行与 SSAS 多维数据集在红移上的相同机制?

如何获取 SSAS 多维数据集维度和维度属性的列表

SSAS 多维数据集处理