2012-08-10 111 views

回答

7

我不认为你可以防止处理立方体,如果其他人已经处理它。你可以做的“帮助”。在运行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 
+0

迭戈,谢谢您的回答! – Alekzander 2012-08-10 11:49:06

+0

没有问题,记住投票答案标记为答案,如果它帮助你 – Diego 2012-08-10 11:54:40

+0

第一次请求只给出关于更新多维数据集时的信息。 第二个请求无助于确定正在处理哪个多维数据集,但它表明Analysis Services正在执行某些操作。 我很舒服,在另一种情况下有帮助。 – Alekzander 2012-08-10 12:04:48

-1

如果正在处理多维数据集,您将看到在任务管理器中运行的名为“MSDARCH”的作业。不知道你怎么知道哪一个。

+0

谢谢!我会检查它。 – Alekzander 2012-09-21 16:46:57

1

我有类似的问题,并通过使用SSAS服务器上提供的DISCOVER_LOCKS行集解决它。要做到这一点,首先进行如下XMLA查询到服务器:

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"> 
    <RequestType>DISCOVER_LOCKS</RequestType> 
    <Restrictions> 
    <RestrictionList> 
     <!-- I tried using this, but it wasn't working and Microsoft documentation was little help. --> 
    </RestrictionList> 
    </Restrictions> 
    <Properties> 
    <PropertyList> 
     <Catalog>My_SSAS_Database</Catalog> 
     <Format>Tabular</Format> 
    </PropertyList> 
    </Properties> 
</Discover> 

在XML服务器返回的,应该有一堆row元素,看起来有点像这样:

<row> 
    <SPID>388303</SPID> 
    <LOCK_ID>0CC320DB-6B71-4341-B484-8D0A6C403AB9</LOCK_ID> 
    <LOCK_TRANSACTION_ID>335C5EE8-83C3-44D5-A653-655F933A0D2D</LOCK_TRANSACTION_ID> 
    <LOCK_OBJECT_ID> 
    <Object> 
     <DatabaseID>My_SSAS_Database</DatabaseID> 
     <CubeID>My_Cube</CubeID> 
     <MeasureGroupID>My_Measure_Group</MeasureGroupID> 
     <PartitionID>My_Partition</PartitionID> 
    </Object> 
    </LOCK_OBJECT_ID> 
    <LOCK_STATUS>1</LOCK_STATUS> 
    <LOCK_TYPE>4</LOCK_TYPE> 
    <LOCK_CREATION_TIME>2014-02-04T22:22:07.71</LOCK_CREATION_TIME> 
    <LOCK_GRANT_TIME>2014-02-04T22:22:07.71</LOCK_GRANT_TIME> 
</row> 

在此示例中,请注意LOCK_OBJECT_IDLOCK_TYPE元素下的Object元素。根据Microsoft documentation,4的LOCK_TYPE表示由于处理任务而导致的写入锁定。因此,如果LOCK_TYPE为4,并且LOCK_OBJECT_ID/Object/CubeID与查询结果中给定row元素感兴趣的多维数据集的ID相匹配,则应该能够确定是否正在处理多维数据集。

0

对于已列出的可能更好的方法是使用SQL Server Profiler观察分析服务器上的活动。如前所述,目前流行的答案有两个缺陷,第一个选项仅显示立方体已经处理的最后时间。而第二个选项只显示是否正在运行。但它并没有告诉你什么在运行,以及如果你的多维数据集不是从SQL服务器处理,而是从不同的数据源处理呢?

利用SQL Server Profiler不仅可以告诉你是否正在处理某些内容,还会告诉你处理内容的细节。大部分事件可以过滤掉。手表进度报告当前事件,如果你想要的是实时信息...通常太多的数据的消息来获得真正的信息,但你会知道至少有一个过程正在进行。观看进度报告开始和结束事件仅用于获取更好的信息,例如当前正在处理的内容,甚至是分区级别。其他具有良好信息的事件包括:命令开始/结束查询开始/结束

2

使用此代码来选择正在运行的进程:(OLAP中执行此)

select * 

from $system.discover_Sessions 

where session_Status = 1 

而且这个代码取消运行prossesess!请更改PID运行SESSISONS_SPID 像例如:

<Cancel xmlns ="http://schemas.microsoft.com/analysisservices/2003/engine"> 

    <SPID>92436</SPID> 

    <CancelAssociated>1</CancelAssociated> 

</Cancel< 
+0

谢谢!它确实有助于确定哪个多维数据集正在处理! – Alekzander 2014-10-13 11:03:53