यदि आप SQL सर्वर में विभाजित तालिकाएँ बनाने से परिचित हैं, तो आप प्रत्येक विभाजन के लिए एक अलग फ़ाइल समूह बनाने के लिए उपयोग किए जा सकते हैं। इसके अपने लाभ हैं, और यह वह तरीका हो सकता है जिसे आप अधिकांश परिदृश्यों में चुनेंगे।
हालाँकि, आपके पास एक फ़ाइल समूह में कई विभाजनों को मैप करने का विकल्प भी है।
इस लेख में मैं एक फ़ाइल समूह में कई विभाजनों को मैप करने के दो उदाहरण साझा करता हूं।
- उदाहरण 1 मानचित्र सभी एकल फ़ाइल समूह में विभाजन।
- उदाहरण 2 कुछ विभाजनों को एक फ़ाइल समूह में और कुछ को दूसरे में मैप करता है।
उदाहरण 1 - सभी विभाजनों को एक फ़ाइल समूह में मैप करें
सभी विभाजनों को एक फ़ाइल समूह में मैप करने के लिए, सभी तर्क का उपयोग करें। यह निर्दिष्ट करता है कि सभी विभाजन निर्दिष्ट फ़ाइल समूह के लिए, या प्राथमिक फ़ाइल समूह के लिए मैप करते हैं यदि [PRIMARY]
निर्दिष्ट है।
ध्यान दें कि जब ALL
निर्दिष्ट है, केवल एक फ़ाइल समूह निर्दिष्ट किया जा सकता है।
-- Create one filegroup
ALTER DATABASE Test ADD FILEGROUP OrdersNewFg1;
GO
ALTER DATABASE Test
ADD FILE
(
NAME = OrdersNewFg1dat,
FILENAME = '/var/opt/mssql/data/OrdersNewFg1dat.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP OrdersNewFg1;
GO
-- Create a partition function that will result in twelve partitions
CREATE PARTITION FUNCTION OrdersNewPartitionFunction (date)
AS RANGE RIGHT FOR VALUES (
'20200201',
'20200301',
'20200401',
'20200501',
'20200601',
'20200701',
'20200801',
'20200901',
'20201001',
'20201101',
'20201201'
);
GO
-- Create a partition scheme that maps all partitions to the OrdersNewFg1 filegroup
CREATE PARTITION SCHEME OrdersNewPartitionScheme
AS PARTITION OrdersNewPartitionFunction
ALL TO (OrdersNewFg1);
GO
-- Create a partitioned table
CREATE TABLE OrdersNew (
OrderDate date NOT NULL,
OrderId int IDENTITY NOT NULL,
OrderDesc varchar(255) NOT NULL
)
ON OrdersNewPartitionScheme (OrderDate);
GO
यहाँ, मैंने निम्नलिखित किया:
- एक फ़ाइल समूह और संबद्ध फ़ाइल बनाई
- एक विभाजन समारोह बनाया
- एक विभाजन योजना बनाई
- एक तालिका बनाई जो उस विभाजन योजना का उपयोग करती है
मुख्य भाग CREATE PARTITION SCHEME
. की अंतिम पंक्ति है बयान। विशेष रूप से, यह ALL
है कीवर्ड जो सभी विभाजनों को निर्दिष्ट फ़ाइल समूह में मैप करता है।
यदि आप उन्हें एक से अधिक फ़ाइल समूहों में मैप कर रहे थे, तो आप ALL
. को छोड़ देंगे , फिर केवल एक के बजाय फ़ाइल समूहों की अल्पविराम से अलग की गई सूची रखें।
मैपिंग जांचें
हम निम्न क्वेरी का उपयोग यह सत्यापित करने के लिए कर सकते हैं कि प्रत्येक विभाजन एक ही फ़ाइल समूह में मैप किया गया है।
SELECT
p.partition_number AS [Partition],
fg.name AS [Filegroup],
p.Rows
FROM sys.partitions p
INNER JOIN sys.allocation_units au
ON au.container_id = p.hobt_id
INNER JOIN sys.filegroups fg
ON fg.data_space_id = au.data_space_id
WHERE p.object_id = OBJECT_ID('OrdersNew');
परिणाम:
+-------------+--------------+--------+ | Partition | Filegroup | Rows | |-------------+--------------+--------| | 1 | OrdersNewFg1 | 0 | | 2 | OrdersNewFg1 | 0 | | 3 | OrdersNewFg1 | 0 | | 4 | OrdersNewFg1 | 0 | | 5 | OrdersNewFg1 | 0 | | 6 | OrdersNewFg1 | 0 | | 7 | OrdersNewFg1 | 0 | | 8 | OrdersNewFg1 | 0 | | 9 | OrdersNewFg1 | 0 | | 10 | OrdersNewFg1 | 0 | | 11 | OrdersNewFg1 | 0 | | 12 | OrdersNewFg1 | 0 | +-------------+--------------+--------+
यह क्वेरी हमें यह भी दिखाती है कि प्रत्येक विभाजन में कितनी पंक्तियाँ हैं। हमने कोई डेटा नहीं डाला है, इसलिए वे सभी शून्य हैं।
उदाहरण 2 - कुछ विभाजनों को एक फ़ाइल समूह में मैप करें
यह उदाहरण पिछले उदाहरण के लगभग समान है, सिवाय इसके कि हम बारह विभाजनों को दो अलग-अलग फ़ाइल समूहों में मैप करते हैं।
इस मामले में, हम ALL
. को छोड़ देते हैं तर्क, क्योंकि केवल एक फ़ाइल समूह निर्दिष्ट किया जा सकता है जब ALL
निर्दिष्ट है।
-- Create two filegroups
ALTER DATABASE Test ADD FILEGROUP OrdersNewFg1;
GO
ALTER DATABASE Test
ADD FILE
(
NAME = OrdersNewFg1dat,
FILENAME = '/var/opt/mssql/data/OrdersNewFg1dat.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP OrdersNewFg1;
GO
ALTER DATABASE Test ADD FILEGROUP OrdersNewFg2;
GO
ALTER DATABASE Test
ADD FILE
(
NAME = OrdersNewFg2dat,
FILENAME = '/var/opt/mssql/data/OrdersNewFg2dat.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP OrdersNewFg2;
GO
-- Create a partition function that will result in twelve partitions
CREATE PARTITION FUNCTION OrdersNewPartitionFunction (date)
AS RANGE RIGHT FOR VALUES (
'20200201',
'20200301',
'20200401',
'20200501',
'20200601',
'20200701',
'20200801',
'20200901',
'20201001',
'20201101',
'20201201'
);
GO
-- Create a partition scheme that maps all partitions to the OrdersNewFg1 filegroup
CREATE PARTITION SCHEME OrdersNewPartitionScheme
AS PARTITION OrdersNewPartitionFunction
TO (
OrdersNewFg1,
OrdersNewFg1,
OrdersNewFg1,
OrdersNewFg1,
OrdersNewFg1,
OrdersNewFg1,
OrdersNewFg2,
OrdersNewFg2,
OrdersNewFg2,
OrdersNewFg2,
OrdersNewFg2,
OrdersNewFg2
);
GO
-- Create a partitioned table
CREATE TABLE OrdersNew (
OrderDate date NOT NULL,
OrderId int IDENTITY NOT NULL,
OrderDesc varchar(255) NOT NULL
)
ON OrdersNewPartitionScheme (OrderDate);
GO
मैपिंग जांचें
आइए देखें कि फाइलग्रुप में पार्टिशन को कैसे मैप किया जाता है।
SELECT
p.partition_number AS [Partition],
fg.name AS [Filegroup],
p.Rows
FROM sys.partitions p
INNER JOIN sys.allocation_units au
ON au.container_id = p.hobt_id
INNER JOIN sys.filegroups fg
ON fg.data_space_id = au.data_space_id
WHERE p.object_id = OBJECT_ID('OrdersNew');
परिणाम:
+-------------+--------------+--------+ | Partition | Filegroup | Rows | |-------------+--------------+--------| | 1 | OrdersNewFg1 | 0 | | 2 | OrdersNewFg1 | 0 | | 3 | OrdersNewFg1 | 0 | | 4 | OrdersNewFg1 | 0 | | 5 | OrdersNewFg1 | 0 | | 6 | OrdersNewFg1 | 0 | | 7 | OrdersNewFg2 | 0 | | 8 | OrdersNewFg2 | 0 | | 9 | OrdersNewFg2 | 0 | | 10 | OrdersNewFg2 | 0 | | 11 | OrdersNewFg2 | 0 | | 12 | OrdersNewFg2 | 0 | +-------------+--------------+--------+
जैसा कि अपेक्षित था, पहले छह विभाजनों को पहले फ़ाइल समूह में मैप किया जाता है, और शेष को दूसरे में मैप किया जाता है।