如何以编程方式检查 SSAS database/cube 是否正在处理?
How can I programmatically check if an SSAS database/cube is processing?
我有一个应用程序可以更新一个小维度并重建一个属于更大立方体的度量值组。
早上的构建有时需要一两个小时。我想从应用程序检查此特定数据库中是否正在进行任何处理,并向用户发回一条消息,告知他们需要等待。
我检查过的 AMO 对象都有一个 State 属性,但这似乎只反映了当前状态,并且似乎对可能的处理一无所知继续。我认为这是因为处理完成后对象被替换了。
我现在看到的唯一选择是根据 this MSDN article 启动自定义跟踪,让它 运行 一会儿,然后检查是否有任何进度事件。
我认为,出于显而易见的原因,这不是解决我的问题的可靠方法。有没有更好的办法?我希望像数据库对象上的 "IsProcessing" 标志一样简单。
另一个可能的想法是查询活动会话 DMV 并查看命令中是否有 "Process" 文本。我还是觉得不够踏实。
感谢任何和所有建议。
可能最好的方法是查看是否有处理锁。我没有大量测试不同的 LOCK_TYPE 值,但我认为如果此查询 returns 有任何行,则您的多维数据集正在处理中。
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
)
我有一个应用程序可以更新一个小维度并重建一个属于更大立方体的度量值组。
早上的构建有时需要一两个小时。我想从应用程序检查此特定数据库中是否正在进行任何处理,并向用户发回一条消息,告知他们需要等待。
我检查过的 AMO 对象都有一个 State 属性,但这似乎只反映了当前状态,并且似乎对可能的处理一无所知继续。我认为这是因为处理完成后对象被替换了。
我现在看到的唯一选择是根据 this MSDN article 启动自定义跟踪,让它 运行 一会儿,然后检查是否有任何进度事件。
我认为,出于显而易见的原因,这不是解决我的问题的可靠方法。有没有更好的办法?我希望像数据库对象上的 "IsProcessing" 标志一样简单。
另一个可能的想法是查询活动会话 DMV 并查看命令中是否有 "Process" 文本。我还是觉得不够踏实。
感谢任何和所有建议。
可能最好的方法是查看是否有处理锁。我没有大量测试不同的 LOCK_TYPE 值,但我认为如果此查询 returns 有任何行,则您的多维数据集正在处理中。
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
)