Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर (T-SQL) में एक विभाजन को दो में विभाजित करें

यदि आपके पास SQL ​​सर्वर में एक विभाजित तालिका या अनुक्रमणिका है, लेकिन आपको अधिक विभाजन की आवश्यकता है, तो आप ALTER PARTITION FUNCTION का उपयोग करके विभाजन फ़ंक्शन में एक विभाजन जोड़ सकते हैं। SPLIT RANGE के साथ स्टेटमेंट तर्क।

जब आप ऐसा करते हैं, तो आप मौजूदा विभाजन को दो भागों में विभाजित कर देते हैं।

उदाहरण

प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है। सबसे पहले, आइए हमारे वर्तमान सेटअप को देखें।

वर्तमान सेटअप

हमारे पास पहले से ही चार विभाजन हैं, और हम पांचवां जोड़ना चाहते हैं।

इसलिए हमने पहले ही इस तरह एक पार्टीशन फंक्शन बना लिया है:

CREATE PARTITION FUNCTION MoviesPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (-1, 100, 10000);

इस कोड का परिणाम विभाजन में होता है जो मानों को निम्नानुसार संग्रहीत करता है।

विभाजन मान
1 <=–1
2 > -1 और <=100
3 > 100 और <=10000
4 > 10000

इस उदाहरण के लिए, हम 500 का एक नया सीमा मान जोड़ रहे हैं।

इसलिए हम चाहते हैं कि यह इस तरह दिखे:

विभाजन मान
1 <=–1
2 > -1 और <=100
3 > 100 और <=500
4 > 500 और <=10000
5 > 10000

साथ ही, इस उदाहरण के प्रयोजन के लिए, कल्पना करें कि हमारे पास तालिका है जिसे उपरोक्त विभाजन फ़ंक्शन का उपयोग करके विभाजित किया गया है, और इसमें वर्तमान में डेटा की चार हजार से अधिक पंक्तियां हैं।

आइए एक नज़र डालते हैं कि हमारे विभाजनों में पंक्तियों को कैसे वितरित किया जाता है:

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           |
+--------------------+-------------+

इसलिए अब हम 500 के सीमा मान के साथ एक नया विभाजन जोड़ना चाहते हैं।

इस मामले में, हम विभाजन को सीमा मान 100 और 10000 के बीच विभाजित करेंगे।

मुझे यह उल्लेख करना चाहिए कि Microsoft आबादी वाले विभाजन को विभाजित करने की सिफारिश करता है। तो यह ध्यान में रखने वाली बात है।

हालांकि, इस उदाहरण के प्रयोजन के लिए, हम डेटा वाले विभाजन को विभाजित करेंगे।

विभाजन को विभाजित करें

यहां हम आगे बढ़ते हैं और विभाजन को विभाजित करते हैं।

हम ALTER PARTITION FUNCTION . का उपयोग करते हैं विभाजन को विभाजित करने का कथन।

हालाँकि, एक विभाजन को विभाजित करने से एक में से दो विभाजन बन जाते हैं, और इसलिए हमें यह सुनिश्चित करने की आवश्यकता है कि नए विभाजन के लिए एक फ़ाइल समूह है। हमें यह भी सुनिश्चित करने की आवश्यकता है कि हमारी विभाजन योजना को पता है कि विभाजन को विभाजित करते समय किस फ़ाइल समूह का उपयोग करना है।

आप किसी मौजूदा फ़ाइल समूह का उपयोग कर सकते हैं, या आप एक नया फ़ाइल समूह बना सकते हैं।

आइए एक नया बनाएं।

यहां वह कोड है जिसका उपयोग हम उपरोक्त सभी करने के लिए कर सकते हैं:

ALTER DATABASE Test ADD FILEGROUP MoviesFg5;

ALTER DATABASE Test   
ADD FILE   
(  
    NAME = MoviesFg5dat,  
    FILENAME = '/var/opt/mssql/data/MoviesFg5dat.ndf',  
    SIZE = 5MB,  
    MAXSIZE = 100MB,  
    FILEGROWTH = 5MB  
)  
TO FILEGROUP MoviesFg5;

ALTER PARTITION SCHEME MoviesPartitionScheme  
NEXT USED MoviesFg5;

ALTER PARTITION FUNCTION MoviesPartitionFunction()
SPLIT 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             | 500     |
| 4             | 10000   |
+---------------+---------+

तो हम देख सकते हैं कि नया सीमा मान सफलतापूर्वक जोड़ा गया है।

और यहां बताया गया है कि डेटा को अब विभाजनों में कैसे वितरित किया जाता है।

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           |
+--------------------+-------------+

तो अब हमारे पास 5 विभाजन हैं।

खाली विभाजन क्यों हैं?

यदि आप सोच रहे हैं कि मेरे प्रत्येक छोर पर खाली विभाजन क्यों हैं, तो यह विशेष रूप से विभाजनों के विभाजन और विलय की सुविधा के लिए किया जाता है।

प्रत्येक छोर पर विभाजनों को खाली रखने से विभाजनों को विभाजित या विलय करते समय आपके द्वारा प्राप्त होने वाली किसी भी अप्रत्याशित डेटा गति को रोका जा सकता है।

इस अभ्यास की अनुशंसा Microsoft द्वारा भी ठीक इसी कारण से की जाती है।

विभाजन करना जिसमें डेटा होता है

जैसा कि उल्लेख किया गया है, Microsoft पहले से ही डेटा वाले विभाजन को विभाजित करने के खिलाफ अनुशंसा करता है।

<ब्लॉकक्वॉट क्लास ="डब्ल्यूपी-ब्लॉक-कोट">

आबादी वाले विभाजनों को विभाजित या विलय करना अक्षम हो सकता है। वे अक्षम हो सकते हैं क्योंकि विभाजन या विलय से चार गुना अधिक लॉग जनरेशन हो सकता है, और गंभीर लॉकिंग भी हो सकता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL सर्वर से HTTP अनुरोध कैसे कर सकता हूं?

  2. SQL सर्वर समर्थित संस्करण मैट्रिक्स

  3. SQL सर्वर में पिछला व्हाइटस्पेस कैसे निकालें - RTRIM ()

  4. SQL सर्वर (T-SQL) में किसी विशिष्ट भाषा के लिए प्रयुक्त दिनांक स्वरूपों को कैसे खोजें

  5. JDBC SQLServerException:यह ड्राइवर एकीकृत प्रमाणीकरण के लिए कॉन्फ़िगर नहीं किया गया है।