2012-08-10 17 views
8

複数のユーザーが同じキューブを同時に処理でき、キューブの処理が失敗すると問題が発生します。だから私は、特定のキューブが現在の時点で処理しているかどうかを確認する必要があります。処理中のSSAS Cubeを確認する方法は?

答えて

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

+0

問題はありません。あなたが助けてくれれば、答えとしてansマークを投票してください。 – Diego

+0

最初のリクエストでは、CUBEが更新された時刻に関する情報しか表示されません。 2番目の要求は処理中のキューブを判断するのに役立たないが、Analysis Servicesが何かを行っていることを示しています。 私はそれが別の状況で役立つようにshureです。 – Alekzander

-1

キューブが処理されている場合は、タスクマネージャで実行中のジョブが「MSDARCH」と表示されます。あなたがどの人にどのように話すことができるかわからない。

+0

ありがとうございます!私はそれを確認します。 – Alekzander

1

SSASサーバーで提供されているDISCOVER_LOCKS行セットを使用すると、同様の問題が発生し、解決されました。

<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> 
:サーバーが復帰すると、このような種類の見える row要素の束があるはずXMLで

<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> 

:これを行うには、まず以下のXMLAサーバに問い合わせをします

この例では、Object要素はLOCK_OBJECT_IDとなり、LOCK_TYPE要素になります。 Microsoft documentationによれば、LOCK_TYPEは処理タスクによる書き込みロックを示します。したがって、LOCK_TYPEが4で、キュー結果がrowのキューブのIDと一致する場合、LOCK_OBJECT_ID/Object/CubeIDがキューブが処理されているかどうかを知ることができます。

0

既にリストされている方法の方が良い方法は、SQL Server Profilerを使用して、Analysis Serverのアクティビティを監視することです。既に述べたように、現在の一般的な回答には2つの欠陥があります。最初のオプションは、キューブが処理された最後の時間のみを示します。 2番目のオプションは、何かが実行されている場合のみ表示されます。しかし、何が実行されているのか、キューブがSQLサーバーではなく別のデータソースで処理していた場合はどうなるでしょうか?

SQL Server Profilerを使用すると、何かが処理されているだけでなく、処理されているものの詳細も表示されます。ほとんどのイベントを除外できます。 Progress Report Currentリアルタイムの情報が必要な場合はイベント...実際に情報を取得するには、通常はあまりにも多くのデータが必要ですが、少なくともプロセスが進行していることはよく分かります。 進捗レポート開始および終了イベントは、現在処理されているもののようなより良い情報を取得するためにのみ、パーティションレベルまでですらあります。良好な情報を持つ他のイベントには、コマンド開始/終了およびクエリ開始/終了が含まれます。 (OLAPでこれを実行する)

select * 

from $system.discover_Sessions 

where session_Status = 1 

そして、このコードを実行しているprossesessをキャンセルする:実行中のプロセスを選択する

2

使用このコード!例のようにSESSISONS_SPID を実行するPIDを変更してください:

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

    <SPID>92436</SPID> 

    <CancelAssociated>1</CancelAssociated> 

</Cancel< 
+0

ありがとう!どのキューブが処理中であるかを判断するのに本当に役立ちます! – Alekzander

関連する問題