sql >> Databáze >  >> RDS >> Sqlserver

Jak mapovat více oddílů na jednu skupinu souborů v SQL Server (T-SQL)

Pokud jste obeznámeni s vytvářením dělených tabulek na serveru SQL Server, možná jste zvyklí na vytvoření samostatné skupiny souborů pro každý oddíl. To má své výhody a velmi dobře to může být metoda, kterou byste zvolili ve většině scénářů.

Máte však také možnost namapovat více oddílů na jednu skupinu souborů.

V tomto článku sdílím dva příklady mapování více oddílů na jednu skupinu souborů.

  • Ukázka 1 mapuje všechny oddíly do jedné skupiny souborů.
  • Příklad 2 mapuje některé oddíly do jedné skupiny souborů a některé do jiné.

Příklad 1 – Mapování všech oddílů do jedné skupiny souborů

Chcete-li namapovat všechny oddíly na jednu skupinu souborů, použijte argument ALL. To určuje, že se všechny oddíly mapují na zadanou skupinu souborů nebo na primární skupinu souborů, pokud [PRIMARY] je zadáno.

Všimněte si, že když ALL je zadáno, lze zadat pouze jednu skupinu souborů.

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

Zde jsem provedl následující:

  • Vytvořili skupinu souborů a přidružený soubor
  • Vytvořili funkci oddílu
  • Vytvořili schéma rozdělení
  • Vytvořili tabulku, která používá toto schéma rozdělení

Klíčovou částí je poslední řádek CREATE PARTITION SCHEME prohlášení. Konkrétně je to ALL klíčové slovo, které mapuje všechny oddíly na zadanou skupinu souborů.

Pokud byste je mapovali do více skupin souborů, vynechali byste ALL , pak mějte čárkami oddělený seznam skupin souborů místo jedné.

Zkontrolujte mapování

Můžeme použít následující dotaz k ověření, že každý oddíl je namapován na stejnou skupinu souborů.

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');

Výsledek:

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

Tento dotaz nám také ukazuje, kolik řádků je v každém oddílu. Nevložili jsme žádná data, takže jsou všechna nula.

Příklad 2 – Mapování některých oddílů do jedné skupiny souborů

Tento příklad je téměř totožný s předchozím příkladem, kromě toho, že mapujeme dvanáct oddílů přes dvě samostatné skupiny souborů.

V tomto případě vynecháme ALL argument, protože při ALL lze zadat pouze jednu skupinu souborů je zadáno.

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

Zkontrolujte mapování

Podívejme se, jak jsou oddíly namapovány na skupiny souborů.

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');

Výsledek:

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

Podle očekávání je prvních šest oddílů namapováno na první skupinu souborů a zbytek je namapován na druhou.


  1. Oracle Sequence začínající 2 místo 1

  2. Jak vybrat data mezi dvěma daty z sqlite db ve formátu dd-mm-yyyy?

  3. Získejte součet sloupce MySQL v PHP

  4. SQL Server – Odeberte všechny netisknutelné znaky ASCII