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

时间:2015-06-24 15:32:11

标签: c# .net sql-server ssas olap

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

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

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

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

我认为,由于显而易见的原因,这不是我问题的可靠解决方案。有没有更好的办法?我希望得到一些简单的东西,如#34; IsProcessing"数据库对象上的标志。

另一个潜在的想法是查询活动会话DMV并查看是否有任何"进程"命令中的文本。对我来说仍然没有感觉到坚实。

赞赏任何建议。

1 个答案:

答案 0 :(得分:2)

可能最好的方法是查看是否存在处理锁定。我还没有测试过不同的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
    )