SQL सर्वर में, आप ALTER PARTITION FUNCTION
. का उपयोग कर सकते हैं दो विभाजनों को एक विभाजन में मिलाने के लिए।
ऐसा करने के लिए, MERGE RANGE
. का उपयोग करें तर्क, विभाजन के सीमा मूल्य को छोड़ने के लिए प्रदान करते हुए।
यह ऑपरेशन विभाजन को छोड़ देता है और विभाजन में मौजूद किसी भी मान को शेष विभाजन में मिला देता है।
उदाहरण
कल्पना कीजिए कि हमारे पास पाँच विभाजन हैं जिन्हें हम चार बनना चाहते हैं।
वर्तमान विभाजन
हमारे पास MoviesPartitionFunction
. नामक एक पार्टीशन फ़ंक्शन है चार सीमा मानों के साथ।
SELECT
prv.boundary_id,
prv.[value]
FROM sys.partition_range_values prv
INNER JOIN sys.partition_functions pf
ON prv.function_id = pf.function_id
WHERE pf.name = 'MoviesPartitionFunction';
परिणाम:
+---------------+---------+ | boundary_id | value | |---------------+---------| | 1 | -1 | | 2 | 100 | | 3 | 500 | | 4 | 10000 | +---------------+---------+
इसका मतलब है कि पांच विभाजन हैं।
इस उदाहरण के लिए, हम सीमा सीमा 500 को छोड़ देंगे।
इसके अलावा, कल्पना करें कि हमारे पास पहले से ही एक तालिका है जिसमें इनमें से कुछ विभाजनों में वितरित डेटा है।
यहां बताया गया है कि वर्तमान में पंक्तियों को विभाजनों में कैसे वितरित किया जाता है।
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('dbo.Movies');
परिणाम:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 400 | | 4 | 3579 | | 5 | 0 | +--------------------+-------------+
मुझे यह बताना चाहिए कि Microsoft वास्तव में डेटा वाले विभाजनों को मर्ज करने (या विभाजित करने) के विरुद्ध सलाह देता है। हालांकि, इस उदाहरण के लिए, हम सावधानी बरतेंगे और डेटा वाले दो विभाजनों को मर्ज कर देंगे।
विभाजनों को मर्ज करें
ठीक है, विभाजनों को मिलाते हैं।
ALTER PARTITION FUNCTION MoviesPartitionFunction()
MERGE RANGE (500);
परिणाम:
Commands completed successfully.
हमने विभाजनों को सफलतापूर्वक मर्ज कर दिया है।
परिणाम जांचें
आइए परिणाम देखें।
SELECT
prv.boundary_id,
prv.[value]
FROM sys.partition_range_values prv
INNER JOIN sys.partition_functions pf
ON prv.function_id = pf.function_id
WHERE pf.name = 'MoviesPartitionFunction';
परिणाम:
+---------------+---------+ | boundary_id | value | |---------------+---------| | 1 | -1 | | 2 | 100 | | 3 | 10000 | +---------------+---------+
जैसा कि अपेक्षित था, 500 की सीमा सीमा को गिरा दिया गया है, और हमारे पास केवल तीन सीमा सीमाएँ बची हैं।
आइए देखें कि विभाजनों में डेटा कैसे वितरित किया जाता है।
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('dbo.Movies');
परिणाम:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
जैसा कि अपेक्षित था, विभाजन 3 और 4 के डेटा को एक विभाजन (विभाजन 3) में मिला दिया गया है।
खाली विभाजन क्यों हैं?
यदि आप सोच रहे हैं कि मेरे प्रत्येक छोर पर खाली विभाजन क्यों हैं, तो यह विशेष रूप से विभाजनों के विभाजन और विलय की सुविधा के लिए किया जाता है।
प्रत्येक छोर पर विभाजनों को खाली रखने से विभाजनों को विभाजित या विलय करते समय आपके द्वारा प्राप्त होने वाली किसी भी अप्रत्याशित डेटा गति को रोका जा सकता है।
इस अभ्यास की अनुशंसा Microsoft द्वारा भी ठीक इसी कारण से की जाती है।
उन विभाजनों को मर्ज करना जिनमें डेटा होता है
जैसा कि उल्लेख किया गया है, Microsoft उन विभाजनों को मर्ज करने के विरुद्ध अनुशंसा करता है जिनमें पहले से ही डेटा है।
<ब्लॉकक्वॉट क्लास ="डब्ल्यूपी-ब्लॉक-कोट">आबादी वाले विभाजनों को विभाजित या विलय करना अक्षम हो सकता है। वे अक्षम हो सकते हैं क्योंकि विभाजन या विलय से चार गुना अधिक लॉग जनरेशन हो सकता है, और गंभीर लॉकिंग भी हो सकता है।