sql server - Is accessing rows with varbinary data via LINQ causing a timeout? How to fix? -
मेरे पास SQL में अनेक तालिकाओं हैं एक नियंत्रण (एक सामान्य CRUD ऑब्जेक्ट की तरह) और एक अटैचमेंट है। एफके के माध्यम से अनुलग्नक संदर्भ नियंत्रण (कई अनुलग्नक हो सकते हैं) संलग्नक भी शामिल है, अन्य बातों के साथ एक नाम और फ़ाइल डेटा के साथ एक varbinary स्तंभ।
LINQ के माध्यम से, नियंत्रण एक संलग्नक संपत्ति है।
मेरे पास एक नियंत्रण दृश्य (एमवीसी) है जो मौजूदा अनुलग्नकों की सूची सहित बहुत सारी जानकारी प्रदर्शित करता है यही कारण है कि सूची एक सहायक विधि के माध्यम से किया जाता है:
सार्वजनिक स्थैतिक स्ट्रिंग FileBox (इस HtmlHelper सहायक, स्ट्रिंग नाम, IEnumerable & LT; Models.Attachment & gt; फ़ाइलें, bool लिखने योग्य) {...}
यह समारोह संलग्नक के माध्यम से लूप और लगाव के नाम के साथ एक बिना क्रम वाली सूची बाहर लिखते हैं
कभी कभी, मैं एक टाइमआउट त्रुटि मिलता है, और यहाँ कि त्रुटि का एक टुकड़ा है। < / P>
System.Data.SqlClient.SqlException: टाइमआउट की समय सीमा समाप्त हो गई है। समय समाप्ति अवधि का संचालन पूरा होने से पहले समाप्त हो गया है या सर्वर प्रतिसाद नहीं दे रहा है। ... System.Data.Linq.EntitySet`1.GetEnumerator पर System.Data.Linq.EntitySet`1.Load () पर System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext () () पर पर IRSoxCompliance.Helpers.Html.FileBox पर System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext () (HtmlHelper सहायक, स्ट्रिंग नाम, IEnumerable`1 फ़ाइलें, बूलियन लिखने योग्य) C: \ दस्तावेज़ और सेटिंग्स \ प्रशासक \ My Documents \ दृश्य स्टूडियो 2008 \ प्रोजेक्ट्स \ आईआरएसओक्सकंपलिया \ आईआरएसओक्ससीप्लिपेशन \ आईआरएसओक्ससीम्पलांस \ हेल्पर्स \ एचटीएमएल सीएस: एएसपी.एव.एवीज़_एडिट_control_एडिट_टेस्ट_ एस्पक्स .__ पर लाइन 228 सी। \ Inetpub \ wwwroot \ views \ Edit \ Control_Edit_Test.aspx में रेंडर__control1 (एचटीएमटीईटीईआरआईआर __ डब्ल्यू, कंट्रोल पैरामीटर कंटेनर): लाइन 109 ...
-
क्या मैं यह मानना सही हूं कि इन समय-सीमाएं इस तथ्य के कारण हैं, जबकि नियंत्रण पहले से ही लोड किया गया है, अटैचमेंट पंक्तियों को आलसी-लोड किया गया है, और केवल सहायताकर्ता से लोड किया जा रहा है? और यह ज्यादातर इस तथ्य के कारण है कि मैं शायद 50 एमबी के आंकड़ों को प्राप्त कर रहा हूं जिनकी मुझे ज़रूरत नहीं है?
-
मैं इसे कैसे रोकूं? क) मैं तालिका को बंटवारे से बचना चाहूंगा बी) क्या मैं नियंत्रण पर एक अटैचमेंट आंशिक संपत्ति बना सकता हूँ जो एक नया वर्ग देता है जिसमें बाइनरी है लेकिन सब कुछ है? ग) ऐसा प्रतीत होता है कि मैं सिर्फ बाइनरी कॉलम पर 'देरी से लोड' चालू कर सकता हूं। यह काम करेगा? यदि ऐसा है तो - मैंने इसे डीबीएमएल में कुछ भी नहीं बदलने का एक मुद्दा बनाया है, क्योंकि मुझे एक टेबल साफ़ करने की आदत है और फिर पुनः लोड हो रहा है। इसलिए मैं इस सेटिंग को खो दूंगा। क्या यह सुनिश्चित करने का कोई तरीका है कि मैं इसे खोना नहीं चाहूंगा? क्या मैं इसे अपने आंशिक से सेट कर सकता हूं? या शायद एक यूनिट टेस्ट जो यह कह सकती है कि यह चालू है?
समाधान : जवाब के आधार पर, मुझे एहसास हुआ कि:
foreach (नियंत्रण फ़ाइल में अनुलग्नक फ़ाइल) {response.write (file.name); }
मैं बजाय कार्य करें:
foreach (स्ट्रिंग controls.Attachments.Select (एक = & gt में फ़ाइल नाम, a.name)) {प्रतिक्रिया। लिखने (फ़ाइल नाम); }
यद्यपि मैंने वर्बबलरी कॉलम को स्थगित करने के लिए समाप्त कर दिया, उम्मीद है कि मुझे यह विकल्प सेट करने के लिए नहीं भूलना चाहिए फिर से मुझे अपना डीबीएमएल फ़ाइल रीसेट करनी चाहिए।
धन्यवाद
-
आप सही हैं कि Linq आलसी अपने संलग्नक लोड हो रहा है चाहे वह डेटाबेस से varbinary डेटा को नीचे खींच रहा है क्वेरी पर निर्भर करता है। क्या आप इसे पोस्ट कर सकते हैं?
-
आपको समस्या सुलझाने के लिए अपने डेटाबेस की संरचना बदलने की आवश्यकता नहीं है। सुनिश्चित करें कि आपकी क्वेरी वर्बलरी फ़ील्ड को छू नहीं रही है - आपको यह सुनिश्चित करने के लिए एक उपयुक्त चयन / प्रक्षेपण की आवश्यकता होगी। इसके अलावा, अगर आप जानते हैं कि आप हमेशा एक नियंत्रक से जुड़े सभी अनुलग्नक प्राप्त करने जा रहे हैं, तो आप लोडवेथ का उपयोग करने के लिए लिनक को निर्देश दे सकते हैं कि मांग पर आलसी लोड होने के बजाय इसे एक बार प्राप्त करें। इससे काम पूरा करने के लिए आवश्यक डेटाबेस दौर की यात्राओं में कटौती होगी।
यह भी जांचने के लायक है कि टेबल पर आपकी अनुक्रमणिका ठीक है ।
अपने डेटाबेस पर बिंदु SQL क्वेरी एनालाइज़र पर क्या हो रहा है और फिर कोड को चलाने के लिए कुछ वास्तविक जानकारी प्राप्त करें। आप वास्तव में देखेंगे कि एसक्यूएल डाटाबेस कैसे मार रहा है और प्रबंधन स्टूडियो में हड़प कर इसे चलाने के लिए देख सकते हैं कि कौन से डेटा को वापस खींच लिया जा रहा है।
आशा है कि यह थोड़ी मदद करता है।
Comments
Post a Comment