हीप में फ्रैग्मेन्टेशन मीन्स का क्या मतलब है
ढेर में विखंडन मूल्य जो आपको DMV avg_fragmentation_in_percent
से क्वेरी करके कॉलम से मिलता sys.dm_db_index_physical_stats
है
अनुक्रमणिका के लिए तार्किक विखंडन, या IN_ROW_DATA आवंटन इकाई में ढेर के लिए विखंडन ।
इसके अलावा उसी BOL का कहना है कि
यह ढेर के पत्तों के पन्नों में बाहर के क्रम का प्रतिशत है। एक आउट-ऑफ-ऑर्डर सीमा वह होती है जिसके लिए वह सीमा जिसमें ढेर के लिए वर्तमान पृष्ठ होता है, उस सीमा के बाद भौतिक रूप से अगला सीमा नहीं होती है जिसमें पिछला पृष्ठ होता है।
तो आप देख सकते हैं कि यह ढेर के लिए आवंटित पृष्ठों में मौजूद मुक्त स्थान नहीं है, लेकिन विखंडन बनाने वाले पृष्ठों का अलग-अलग क्रम है ।
इसका परीक्षण छोटे परीक्षण द्वारा किया जा सकता है। हमें एक ढेर तालिका बनाएं और उसमें कुछ रिकॉर्ड डालें और फिर विखंडन की जांच करें।
create table dbo.HeapTest
(
Id INT not NULL Default (1),
Col1 char(5000) Not null Default ('Heaps Are Cool')
)
SET NOCOUNT ON
Insert into dbo.Heaptest default values
go 50
select index_type_desc,avg_fragmentation_in_percent,fragment_count,
avg_page_space_used_in_percent,record_count
from sys.dm_db_index_physical_stats(db_id(),object_id('dbo.HeapTest','U'),0,default,'detailed')
तो इसमें 50 रिकॉर्ड के साथ हीप टेबल बनाई गई है। नीचे डीएमवी sysinos_db_index_physical आँकड़े क्वेरी के बाद विखंडन कैसा दिखता है
आप देख सकते हैं avg_fragmentation_in_percent
स्तंभ का मान 33% है। अब देखते हैं कि पेज कैसे व्यवस्थित होते हैं। यह अनिर्दिष्ट क्वेरी का उपयोग करके किया जा सकता है %%lockres%%
। क्वेरी होगी
SELECT %%lockres%%, * FROM dbo.HeapTest;
और नीचे आउटपुट जैसा दिखता है। इसका केवल प्रासंगिक भाग संलग्न करना। जब हम अपनी dbo.HeapTest तालिका में 50 पंक्तियाँ सम्मिलित करते हैं, तो क्वेरी 50 पंक्तियों का उत्पादन करती है।
यह कहता है कि पहले पृष्ठ में आईडी है 197
, अगले पृष्ठ में आईडी है 242
बाद के पृष्ठों में निरंतर आईडी है जब तक हम पेज आईडी तक नहीं पहुंचते 264
क्योंकि उसके बाद हमें पेज आईडी मिलती है 280
। इसलिए पेज आईडी नंबर में यह उछाल वास्तव में विखंडन का कारण बन रहा है।
अब कीट ढेर का पुनर्निर्माण करते हैं और विखंडन को देखने के लिए फिर से कमांड चलाते हैं और पृष्ठों को कैसे व्यवस्थित किया जाता है। हमें जैसे विखंडन मिलता है
आप देख सकते हैं विखंडन अब है 14%
।
हमें पृष्ठ संख्याएँ आवंटित देखें
हमारे पास केवल एक कूद बाकी है जो सभी पृष्ठों को क्रमबद्ध रूप से पृष्ठ आईडी आवंटित किया गया है। चूंकि सिर्फ एक छलांग विखंडन में काफी कमी आई।
मैं फिर से ढेर का पुनर्निर्माण करता हूं और अब जब मैंने विखंडन की जांच की तो यह पूरी तरह से चला गया था। और पेज आईडी आवंटन की तरह है
विखंडन क्यों बढ़ा
अब विखंडन के कारण क्या हो सकता है, इसके बारे में हम इस तथ्य को पुष्टि कर सकते हैं कि जब पृष्ठों को ढेर में आवंटित किया जा रहा था, तो वे निरंतर नहीं होंगे, जैसा कि आपने ऊपर देखा कि विखंडन मूल्य में वृद्धि के कारण पेज के आवंटित पृष्ठ में कूद गया था।
सिर के पीछे आपको यह भी ध्यान रखना चाहिए कि HEAP के लिए शब्द विखंडन का कोई अर्थ नहीं है, आप अन-ऑर्डर किए गए पृष्ठों के गुच्छा के लिए विखंडन को कैसे परिभाषित करेंगे।
वास्तव में विखंडन के बारे में चिंतित हैं
यदि आप वास्तव में एक ऐसे परिदृश्य का सामना करते हैं जहां हीप टेबल खंडित है और प्रश्नों को धीमा कर रहा है तो बेहतर होगा कि इसे बनाने के बजाय टेबल पर क्लस्टर इंडेक्स बनाया जाए। कारण यह है कि जब आप ढेर को फिर से बनाते हैं तो सभी अंतर्निहित नॉन क्लस्टर्ड इंडेक्स को भी फिर से बनाया जाता है, जिससे पुनर्निर्माण की प्रक्रिया में अधिक समय लगता है, बहुत सारे संसाधनों का उपयोग होता है और लेन-देन लॉग होता है। एक उत्पादन प्रणाली पर एक हमेशा इससे बचने की कोशिश करेगा। पॉल ने ढेर के बारे में अपने मिथक अनुभाग में इसे कवर किया ।
पुनश्च: कृपया उत्पादन प्रणाली पर अनिर्धारित कमांड का उपयोग न करें। यह सिर्फ प्रदर्शन के लिए था।