Wenn Sie mit dem Erstellen partitionierter Tabellen in SQL Server vertraut sind, sind Sie möglicherweise daran gewöhnt, für jede Partition eine separate Dateigruppe zu erstellen. Dies hat seine Vorteile und ist möglicherweise die Methode, die Sie in den meisten Szenarien wählen würden.
Sie haben jedoch auch die Möglichkeit, mehrere Partitionen einer einzelnen Dateigruppe zuzuordnen.
In diesem Artikel teile ich zwei Beispiele für die Zuordnung mehrerer Partitionen zu einer einzelnen Dateigruppe.
- Beispiel 1 bildet alle ab Partitionen in eine einzelne Dateigruppe.
- Beispiel 2 ordnet einige Partitionen einer Dateigruppe und einige einer anderen zu.
Beispiel 1 – Ordnen Sie alle Partitionen einer einzigen Dateigruppe zu
Um alle Partitionen einer einzelnen Dateigruppe zuzuordnen, verwenden Sie das Argument ALL. Dies gibt an, dass alle Partitionen der angegebenen Dateigruppe oder der primären Dateigruppe zugeordnet werden, wenn [PRIMARY]
angegeben ist.
Beachten Sie, dass bei ALL
angegeben ist, kann nur eine Dateigruppe angegeben werden.
-- 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
Hier habe ich Folgendes getan:
- Erstellte eine Dateigruppe und zugehörige Datei
- Erstellte eine Partitionsfunktion
- Ein Partitionsschema erstellt
- Eine Tabelle erstellt, die dieses Partitionsschema verwendet
Der Schlüsselteil ist die letzte Zeile des CREATE PARTITION SCHEME
Erklärung. Genauer gesagt ist es ALL
Schlüsselwort, das alle Partitionen der angegebenen Dateigruppe zuordnet.
Wenn Sie sie mehreren Dateigruppen zuordnen, lassen Sie ALL
weg , dann haben Sie eine durch Kommas getrennte Liste von Dateigruppen statt nur einer.
Überprüfen Sie die Zuordnung
Wir können die folgende Abfrage verwenden, um zu überprüfen, ob jede Partition derselben Dateigruppe zugeordnet ist.
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');
Ergebnis:
+-------------+--------------+--------+ | 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 | +-------------+--------------+--------+
Diese Abfrage zeigt uns auch, wie viele Zeilen sich in jeder Partition befinden. Wir haben keine Daten eingefügt, also sind sie alle Null.
Beispiel 2 – Ordnen Sie einige Partitionen einer einzelnen Dateigruppe zu
Dieses Beispiel ist fast identisch mit dem vorherigen Beispiel, außer dass wir die zwölf Partitionen zwei separaten Dateigruppen zuordnen.
In diesem Fall lassen wir ALL
weg Argument, da nur eine Dateigruppe angegeben werden kann, wenn ALL
angegeben ist.
-- 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
Überprüfen Sie die Zuordnung
Sehen wir uns an, wie die Partitionen den Dateigruppen zugeordnet werden.
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');
Ergebnis:
+-------------+--------------+--------+ | 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 | +-------------+--------------+--------+
Wie erwartet werden die ersten sechs Partitionen der ersten Dateigruppe und die restlichen der zweiten zugeordnet.