多个用户可以同时处理相同的多维数据集并因此处理多维数据集失败而出现问题。所以我需要检查当前是否正在处理某个多维数据集。如何确定现在正在处理哪个SSAS立方体?
回答
我不认为你可以防止处理立方体,如果其他人已经处理它。你可以做的“帮助”。在运行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
我有类似的问题,并通过使用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_ID
和LOCK_TYPE
元素下的Object
元素。根据Microsoft documentation,4的LOCK_TYPE
表示由于处理任务而导致的写入锁定。因此,如果LOCK_TYPE
为4,并且LOCK_OBJECT_ID/Object/CubeID
与查询结果中给定row
元素感兴趣的多维数据集的ID相匹配,则应该能够确定是否正在处理多维数据集。
对于已列出的可能更好的方法是使用SQL Server Profiler观察分析服务器上的活动。如前所述,目前流行的答案有两个缺陷,第一个选项仅显示立方体已经处理的最后时间。而第二个选项只显示是否正在运行。但它并没有告诉你什么在运行,以及如果你的多维数据集不是从SQL服务器处理,而是从不同的数据源处理呢?
利用SQL Server Profiler不仅可以告诉你是否正在处理某些内容,还会告诉你处理内容的细节。大部分事件可以过滤掉。手表进度报告当前事件,如果你想要的是实时信息...通常太多的数据的消息来获得真正的信息,但你会知道至少有一个过程正在进行。观看进度报告开始和结束事件仅用于获取更好的信息,例如当前正在处理的内容,甚至是分区级别。其他具有良好信息的事件包括:命令开始/结束和查询开始/结束。
使用此代码来选择正在运行的进程:(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<
谢谢!它确实有助于确定哪个多维数据集正在处理! – Alekzander 2014-10-13 11:03:53
- 1. 确定处理SSAS立方体的最大频率的准则?
- 2. SSAS立方体度量不正确
- 3. SSAS:如何设计我的立方体
- 4. SSAS立方体分组
- 5. SSAS:来自多个立方体实例的中央立方体
- 6. 正确的方式来实现独立的Grails批处理?
- 7. 确定哪些面朝观众在3D立方体
- 8. Opengl 3D立方体将无法在Windows上正确呈现
- 9. .text()立即正在处理
- 10. JPA如何确定哪个类正在调用方法?
- 11. SSAS MDX - 如何改变在立方体中总结作品的方式?
- 12. 如何正确处理javascript重定向?
- 13. 如何确定哪些功能正在使用哪个头?
- 14. 如何识别某个HTTPD进程正在处理哪个URL?
- 15. ssas立方体:数据如何被拉出?
- 16. 如何用0代替SSAS立方体中的空值
- 17. 如何使我的SSAS立方体生产准备就绪
- 18. 如何在mayavi中正确显示包含非立方体素的体积
- 19. 如何确定正在呈现哪些JSP页面?
- 20. 如何正确处理EntityExistsException?
- 21. 如何正确处理KeyErrors
- 22. 如何正确处理
- 23. 如何正确处理httpStatuscode
- 24. 如何正确处理ThreadInterruptedException?
- 25. Android:处理多个字体文件 - 正确的方法
- 26. 如何正确处理这个意图
- 27. 如何正确处理这个IOException?
- 28. 如何确定正在运行的urxvt正在使用哪种字体?
- 29. SQL SSAS计算的成员显示#NUM!在立方体?
- 30. 在xmla结构中创建ssas立方体
迭戈,谢谢您的回答! – Alekzander 2012-08-10 11:49:06
没有问题,记住投票答案标记为答案,如果它帮助你 – Diego 2012-08-10 11:54:40
第一次请求只给出关于更新多维数据集时的信息。 第二个请求无助于确定正在处理哪个多维数据集,但它表明Analysis Services正在执行某些操作。 我很舒服,在另一种情况下有帮助。 – Alekzander 2012-08-10 12:04:48