当多个用户可以同时处理同一个多维数据集时,结果是多维数据集处理失败。因此,我需要检查当前是否正在处理某些多维数据集。
我认为如果其他人已经在处理多维数据集,则可以防止它被处理。您可以对“帮助”执行的操作是运行MDX查询以检查上次处理多维数据集的时间:
SELECT CUBE_NAME, LAST_DATA_UPDATE FROM $System.MDSCHEMA_CUBES
或检查已设置的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来监视Analysis Server上的活动。如前所述,当前流行的答案有两个缺陷,第一个选项仅显示处理多维数据集的最后时间。第二个选项仅显示是否正在运行。但这并不能告诉您正在运行什么,以及如果您的多维数据集不是从SQL Server而是从另一个数据源处理的,该怎么办?
使用SQL Server Profiler不仅会告诉您正在处理的内容,还会告诉您正在处理的内容的详细信息。您可以过滤掉的大多数事件。如果需要实时信息,请观看Progress Report Current事件...通常,大量的数据无法从中获取实时信息,但是您将至少知道一个过程正在进行中上。仅观看Progress Report Begin and End]事件,以获取更好的信息,例如当前正在处理的信息,甚至包括分区级别。其他具有良好信息的事件包括Command Begin / End和Query Begin / End。
该查询在SSMS(SQL Server Management Studio)中运行良好,是否可以使用jdbc驱动程序执行?我试图使用olap4j或mssql驱动程序,它总是抛出异常
如果正在处理多维数据集,您将在任务管理器中看到一个名为“ MSDARCH”的作业。不确定如何分辨哪一个。