2012-08-10 52 views
8

एक समस्या है जब कई उपयोगकर्ता एक ही घन को एक साथ संसाधित कर सकते हैं और परिणामस्वरूप घन की प्रक्रिया विफल हो जाती है। तो मुझे यह जांचने की ज़रूरत है कि वर्तमान पल पर कुछ घन प्रसंस्करण कर रहा है या नहीं।यह निर्धारित करने के लिए कि अब कौन सा एसएसएएस क्यूब प्रसंस्करण कर रहा है?

उत्तर

7

मुझे नहीं लगता कि आप किसी घन को संसाधित होने से रोक सकते हैं अगर कोई और इसे पहले से संसाधित कर रहा है।

SELECT CUBE_NAME, LAST_DATA_UPDATE FROM $System.MDSCHEMA_CUBES 

या realted एसक्यूएल सर्वर उदाहरण पर sys.process तालिका जाँच अगर यह चल रहा है देखने के लिए: आप क्या कर सकते "सहायता" पिछली बार जब घन संसाधित किया गया था जांच करने के लिए एक MDX क्वेरी है:

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 अपडेट किया गया था। दूसरा अनुरोध यह निर्धारित करने में मदद नहीं करता कि कौन सी घन प्रसंस्करण कर रहा है, लेकिन यह दिखाता है कि विश्लेषण सेवाएं कुछ कर रही हैं। मैं इसे शांत कर रहा हूं जब तक कि किसी अन्य परिस्थितियों में मदद मिलती है। – Alekzander

-1

यदि कोई घन प्रसंस्करण हो रहा है तो आपको "एमएसडीर्च" नामक टास्क मैनेजर में नौकरी चलने वाली नौकरी दिखाई देगी। सुनिश्चित नहीं है कि आप कैसे बता सकते हैं कि कौन सा है।

+0

धन्यवाद! मैं इसे देख लूंगा। – Alekzander

1

मुझे इसी तरह की समस्या थी और एसएसएएस सर्वर पर प्रदत्त 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 तत्वों का एक गुच्छा होना चाहिए

<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 तत्व के तहत नोट करें। माइक्रोसॉफ्ट documentation के मुताबिक, LOCK_TYPE में से 4 प्रोसेसिंग कार्य के कारण एक लिखित लॉक इंगित करता है। इसलिए यदि आप LOCK_TYPE 4 और LOCK_OBJECT_ID/Object/CubeID क्वेरी परिणामों में दिए गए row तत्व के लिए रुचि रखने वाले घन की आईडी से मेल खाते हैं तो आपको यह पता लगाने में सक्षम होना चाहिए कि क्या घन संसाधित किया जा रहा है।

0

शायद पहले से सूचीबद्ध किए गए लोगों के लिए बेहतर दृष्टिकोण SQL सर्वर प्रोफाइलर विश्लेषण सर्वर पर गतिविधि देखने के लिए उपयोग करना होगा। जैसा कि पहले से कहा गया है, वर्तमान लोकप्रिय उत्तर में दो त्रुटियां हैं, पहला विकल्प केवल घन संसाधित होने के आखिरी बार दिखाता है। और दूसरा विकल्प केवल दिखाता है कि कुछ चल रहा है या नहीं। लेकिन यह आपको नहीं बताता कि क्या चल रहा है और क्या होगा यदि आपका घन SQL सर्वर से प्रसंस्करण नहीं कर रहा था लेकिन एक अलग डेटा स्रोत?

SQL सर्वर प्रोफाइलर का उपयोग न केवल आपको बताएगा कि कुछ प्रसंस्करण हो रहा है लेकिन यह भी प्रसंस्करण के विवरण के बारे में बताएगा। अधिकांश घटनाएं जिन्हें आप फ़िल्टर कर सकते हैं। देखें प्रगति रिपोर्ट वर्तमान घटनाएं यदि आप वास्तविक समय की जानकारी चाहते हैं ... यह आमतौर पर डेटा की अग्नि-खुराक से अधिक जानकारी प्राप्त करने के लिए बहुत अधिक है, लेकिन आपको अच्छी तरह से पता चल जाएगा कि कम से कम एक प्रक्रिया चल रही है। देखें प्रगति रिपोर्ट शुरू करें और समाप्त करें घटनाएं केवल वर्तमान में संसाधित होने जैसी बेहतर जानकारी प्राप्त करने के लिए, विभाजन स्तर तक भी। अच्छी जानकारी वाले अन्य कार्यक्रमों में कमांड स्टार्ट/एंड और क्वेरी प्रारंभ/समाप्ति शामिल हैं।

2

उपयोग इस कोड चल प्रक्रियाओं को चुनने के लिए: (OLAP में इस पर अमल)

select * 

from $system.discover_Sessions 

where session_Status = 1 

और यह कोड prossesess चल रद्द करने के लिए!कृपया उदाहरण की तरह चल रहा है SESSISONS_SPID को पीआईडी ​​बदलने के लिए:

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

    <SPID>92436</SPID> 

    <CancelAssociated>1</CancelAssociated> 

</Cancel< 
+0

धन्यवाद! यह वास्तव में यह निर्धारित करने में मदद करता है कि कौन सा घन प्रसंस्करण कर रहा है! – Alekzander