如何确定现在正在处理哪个SSAS Cube?

时间:2012-08-10 09:53:56

标签: sql-server-2008-r2 ssas olap

当多个用户同时处理同一个多维数据集并因此处理多维数据集失败时,会出现问题。所以我需要检查某个立方体是否正在处理。

5 个答案:

答案 0 :(得分:7)

我不认为如果其他人已在处理它,您可以阻止处理多维数据集。您可以执行“帮助”操作是运行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

答案 1 :(得分:2)

我遇到了类似的问题,并使用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>

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

答案 2 :(得分: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<

答案 3 :(得分:0)

对于已经列出的方法,可能更好的方法是使用 SQL Server Profiler 来监视Analysis Server上的活动。如前所述,当前流行的答案有两个缺陷,第一个选项仅显示多维数据集处理的最后时间。第二个选项仅显示某些内容是否正在运行。但它并没有告诉你正在运行的是什么,如果你的多维数据集不是从SQL服务器处理而是另外一个数据源怎么办?

利用SQL Server Profiler不仅会告诉您某些内容是否正在处理,还会告诉您处理内容的详细信息。您可以过滤掉大多数事件。如果您需要实时信息,请观看进度报告当前事件...通常过多的数据流量来获取实际信息,但您必须我们知道至少有一个过程正在进行中。观看进度报告开始和结束事件,以获取更好的信息,例如当前正在处理的信息,甚至是分区级别。其他包含良好信息的活动包括命令开始/结束查询开始/结束

答案 4 :(得分:-1)

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