当多个用户可以同时处理同一个多维数据集并导致多维数据集处理失败时会出现问题。所以我需要检查某个多维数据集当前是否正在处理。
4 回答
如果其他人已经在处理它,我认为你不能阻止它被处理。您可以对“帮助”执行的操作是运行 MDX 查询以检查上次处理多维数据集的时间:
SELECT CUBE_NAME, LAST_DATA_UPDATE FROM $System.MDSCHEMA_CUBES
或检查 realted sql server 实例上的 sys.process 表以查看它是否正在运行:
select spid, ecid, blocked, cmd, loginame, db_name(dbid) Db, nt_username, net_library, hostname, physical_io,
login_time, last_batch, cpu, status, open_tran, program_name
from master.dbo.sysprocesses
where spid > 50
and loginame <> 'sa'
and program_name like '%Analysis%'
order by physical_io desc
go
使用此代码选择正在运行的进程:(在 OLAP 中执行)
select *
from $system.discover_Sessions
where session_Status = 1
并且此代码取消运行过程!请将 PID 更改为运行 SESSISONS_SPID,例如:
<Cancel xmlns ="http://schemas.microsoft.com/analysisservices/2003/engine">
<SPID>92436</SPID>
<CancelAssociated>1</CancelAssociated>
</Cancel<
对于已经列出的方法,可能更好的方法是使用SQL Server Profiler来观察分析服务器上的活动。如前所述,当前流行的答案有两个缺陷,第一个选项仅显示最后一次处理多维数据集。第二个选项仅显示是否正在运行。但它并没有告诉您正在运行什么以及如果您的多维数据集不是从 SQL 服务器而是从不同的数据源处理的怎么办?
使用 SQL Server Profiler 不仅会告诉您是否正在处理某些内容,还会告诉您正在处理的内容的详细信息。您可以过滤掉的大多数事件。如果您想要实时信息,请观看进度报告当前事件...通常需要大量数据才能从中获取真实信息,但您会很清楚,至少有一个过程正在进行。仅观看进度报告开始和结束事件以获得更好的信息,例如当前正在处理的内容,甚至可以深入到分区级别。其他具有良好信息的事件包括Command Begin/End和Query Begin/End。
如果正在处理多维数据集,您将在任务管理器中看到一个名为“MSDARCH”的作业正在运行。不知道你怎么能分辨出哪一个。