Sys.partition.rows कॉलम कितना सही है?


14

सिस्टम दृश्य sys.partitionsमें एक स्तंभ "पंक्तियाँ" होती हैं जो किसी दिए गए विभाजन में पंक्तियों की कुल संख्या होती हैं। उस तालिका के लिए जिसका विभाजन नहीं किया गया है (या केवल एक विभाजन है कि आप इसे कैसे देखते हैं) के आधार पर यह कॉलम तालिका में पंक्तियों की संख्या देता है।

मैं उत्सुक हूं कि यह कॉलम कितना सही है और अगर मैं इसके बजाय इसका उपयोग कर सकता हूं SELECT COUNT(1) FROM TableName। मैंने कुछ प्रयोग किए हैं जहाँ एक तालिका बनाएँ और कुछ हज़ार पंक्तियाँ जोड़ें, कुछ सौ हटाएँ, कुछ हज़ार और जोड़ें आदि और गिनती हमेशा मृत रही है। हालाँकि मेरे पास लगभग 700 मिलिट्री रो और कई इंडेक्स के साथ एक टेबल है। sys.partitionsक्लस्टर किए गए इंडेक्स के लिए पंक्ति फिर से मृत हो गई है, हालांकि अन्य इंडेक्स कुछ मामूली बदलाव (+ -20k) दिखाते हैं।

क्या किसी को पता है कि इस पंक्ति की गणना कैसे की जाती है और यदि यह प्रकट होता है तो कितना सटीक है?


4
मैं अब उम्र के लिए पंक्तियों के आधार पर एक क्वेरी का उपयोग कर रहा हूं । यह नहीं देखा जा रहा है कि यह तारीख से बाहर है
बिलिंक

जवाबों:


13

पुस्तकें ऑनलाइन बताती है कि पंक्तियाँ फ़ील्ड " इस विभाजन में पंक्तियों की अनुमानित संख्या को इंगित करता है ।" इसलिए मैं उम्मीद करूंगा कि यह करीब होगा, लेकिन 100% सटीक नहीं, 100% समय।

माइकल ज़िल्बर्स्टीन ने एक नाखून की चाहsys.partitions में बेतहाशा गलत होने के उदाहरण की रिपोर्ट की । यह न कहना एक सामान्य घटना है, लेकिन यह संभव है।

sys.dm_db_index_physical_statsइसमें एक record_countफ़ील्ड शामिल है जो अधिक सटीक प्रतीत होता है, हालांकि डीएमवी को चलाने के बारे में पता होना एक REDO अवरोधन समस्या का परिणाम हो सकता है यदि आप इसे एक उदाहरण के लिए एक AlwaysOn पठनीय माध्यमिक प्रतिकृति की मेजबानी करते हुए चलाते हैं।

स्पष्टीकरण के लिए record_countक्षेत्र निम्नलिखित जानकारी दिखाता है:

रिकॉर्ड की कुल संख्या।

एक सूचकांक के लिए, IN_ROW_DATA आवंटन इकाई में बी-ट्री के वर्तमान स्तर पर कुल रिकॉर्ड लागू होते हैं।

ढेर के लिए, IN_ROW_DATA आवंटन इकाई में रिकॉर्ड की कुल संख्या।

ढेर के लिए, इस फ़ंक्शन से लौटाए गए रिकॉर्ड की संख्या उन पंक्तियों की संख्या से मेल नहीं खा सकती है, जो कि ढेर के खिलाफ एक SELECT COUNT (*) चलाकर वापस आ जाते हैं। ऐसा इसलिए है क्योंकि एक पंक्ति में कई रिकॉर्ड हो सकते हैं। उदाहरण के लिए, कुछ अद्यतन स्थितियों के तहत, एकल हीप पंक्ति में एक अग्रेषण रिकॉर्ड और अद्यतन कार्रवाई के परिणामस्वरूप एक अग्रेषित रिकॉर्ड हो सकता है। इसके अलावा, अधिकांश बड़ी LOB पंक्तियाँ LOB_DATA संग्रहण में कई रिकॉर्ड में विभाजित हैं। LOB_DATA या ROW_OVERFLOW_DATA आवंटन इकाइयों के लिए, पूर्ण आवंटन इकाई में रिकॉर्ड की कुल संख्या।

स्टैक ओवरफ्लो पर इसी तरह के सवाल पर मार्टिन स्मिथ का जवाब भी देखें ।


1

BOL वास्तव में इस कॉलम के लिए कहता है "इस विभाजन में पंक्तियों की अनुमानित संख्या को इंगित करता है।" और अनुमानित बहुत अनुमानित है। मैंने पहले ही देखा कि एक निश्चित विभाजन में मेरा 1 रिकॉर्ड था। sy.partitions.rows 4048 पंक्तियों का संकेत दे रहा था। इस रिकॉर्ड को हटाने के बाद भी यह 4048 पंक्तियों का संकेत दे रहा था, यहां तक ​​कि सभी अनुक्रमों आदि के पुनर्निर्माण के बाद भी। इसलिए एक निष्कर्ष, अगर आप इस पर भरोसा करना चाहते हैं, तो नहीं।


कृपया, अपने प्रश्न को उस उद्धरण का स्रोत लिंक प्रदान करें। यह आपके उत्तर में सुधार करेगा;)
रोनाल्डो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.