如何以编程方式检查 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) 中不可见