हम गुण एक भी एक्सएमएल नोड XML पार्सर दुर्घटनाओं से पहले हो सकता है की अधिकतम संख्या पर एसक्यूएल सर्वर 2008 में दीवार से टकरा गए हैं।एसक्यूएल सर्वर 2008 त्रुटि - XML पार्सिंग: दस्तावेज़ पार्स आवश्यक बहुत अधिक स्मृति
त्रुटि हम प्राप्त कर रहे हैं है:
Msg 6303, Level 16, State 1, Line 1
XML parsing: Document parsing required too much memory
कौन सा एक छोटे से भ्रामक है। स्ट्रिंग को किसी XML डेटा प्रकार (या तालिका कॉलम) में कनवर्ट करते समय समस्या हो रही है।
SELECT CONVERT(XML, '<DataNode><Data attr1="a" attr2="b" XXXXX /></DataNode>')
कहाँ XXXXX वास्तव में एक और 8191 गुण है।
कुल में हमारे डाटासेट 10,066 विशेषताओं के साथ शुरू करने के लिए होता है। जब हम गुणों की संख्या को 8,192 तक कम करते हैं, तो यह ठीक काम करता है। हालांकि 8,193 गुण दुर्घटनाग्रस्त हो जाते हैं।
यह कुछ भी करने के लिए विशेष रूप से डेटा का आकार से कोई लेना देना नहीं लगता है -
तो, है (100 एमबी या 60KB यह कोई बात नहीं हम एक ही असफल/सफलता विशेषता गणना के आधार पर मिलता है) इस सीमा को बदलने के लिए एसक्यूएल सर्वर के साथ कुछ भी किया जा सकता है?
हमारी सी # आवेदन इस सीमा नहीं है तो सी # में पूरी तरह से वैध एक्सएमएल दस्तावेजों एसक्यूएल सर्वर के XML डेटा स्तंभों में जमा नहीं किया जा सकता है।
कोई भी मदद जो कोई भी पेशकश कर सकता है उसकी सराहना की जाएगी। डेटा-स्ट्रक्चर को इस बिंदु पर बदला नहीं जा सकता है क्योंकि इसे सैकड़ों घटकों के साथ एक संपूर्ण अनुप्रयोग ढांचे की डेटा प्रोसेसिंग कार्यक्षमता के पुन: लिखने की आवश्यकता होगी।
पुनश्च: मैं पहले से ही कैसे हास्यास्पद स्थिति है के प्रबंधन की सलाह दी एक एकल नोड के बजाय एक पेड़ के रूप में विशेषताओं के रूप में एक आवेदन भंडार डेटा, लेकिन यह मैं क्या के साथ काम करने के लिए है जब :-(
संपादित: हम एसक्यूएल सर्वर पर इस की कोशिश की है 2GB RAM के साथ एक सर्वर और 32GB राम के साथ एक सर्वर पर 2008 32 और 64-बिट संस्करण - सभी संस्करणों और वातावरण में एक ही मुद्दा है
अद्यतन:।
मैंने trie किया है यह SQL सर्वर 2012 में है, और यह विफल रहता है जब 8,193 विशेषताएँ होती हैं और स्ट्रिंग की लंबाई किसी दिए गए आकार (परीक्षण स्ट्रिंग की लंबाई 833K) पर भी होती है, लेकिन जब समान लंबाई स्ट्रिंग में केवल 8,192 गुण होते हैं तो काम करता है।
हालांकि मैं 12,000 विशेषताओं के साथ एक बहुत छोटे स्ट्रिंग (193K) है और यह एसक्यूएल सर्वर 2012 में काम करता है, और SQL सर्वर 2008)
इसलिए, यह विशेषताओं की संख्या का एक संयोजन हो गया लगता है जब स्ट्रिंग कास्ट एक निश्चित आकार से अधिक है। यह और अधिक रोचक हो जाता है!
अभी तक फीडबैक के लिए धन्यवाद!
अद्यतन 2:
छोटे तार (270k) मैं अभी भी 16,384 से विशेषता सीमा तक नहीं पहुंच के साथ आगे के परीक्षण के बाद ... 16,385 विशेषताओं में विफल रहता है! तो, स्ट्रिंग लंबाई के संयोजन के आधार पर यह निश्चित रूप से 8 के गुणों की वृद्धि में हो रहा है !!
आप सी # आवेदन करने के लिए सिर्फ एक varchar (max) वापसी कर सके और एप्लिकेशन उचित XML स्वरूप में परिवर्तित करते देखा है? – Tim
दुर्भाग्यवश समस्या सी # के साथ नहीं है, हम XML सर्वर में एक्सएमएल कॉलम में एक्सएमएल डालने की कोशिश कर रहे हैं और यह त्रुटि प्राप्त करने की कोशिश कर रहे गुणों की संख्या के कारण यह त्रुटि प्राप्त कर रहे हैं। सी # में यह 8,192 विशेषता सीमा नहीं है जो SQL सर्वर का एक्सएमएल पार्स है। – doublehelix
आह - मुझे गलत समझा गया। क्षमा करें :( – Tim