2012-08-10 41 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