sql >> Database >  >> RDS >> Sqlserver

Zoek uit of een tabel is gepartitioneerd in SQL Server (T-SQL)

Als u wilt weten of een tabel is gepartitioneerd in SQL Server, kunt u een join uitvoeren op de sys.tables , sys.indexes , en sys.partition_schemes weergaven.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SELECT
    t.name AS [Table],
    i.name AS [Index],
    i.type_desc,
    i.is_primary_key,
    ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
    ON t.object_id = i.object_id
    AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id
WHERE t.name = 'Movies';

Resultaat:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

Hier is het weer met verticale uitvoer (zodat je niet zijwaarts hoeft te scrollen):

Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
type_desc        | CLUSTERED
is_primary_key   | 1
Partition Scheme | MoviesPartitionScheme

Ik stuur slechts een kleine subset van de eigenlijke kolommen terug, maar voel je vrij om de kolommen terug te sturen die je interesseren.

U kunt ook de laatste regel verwijderen om alle gepartitioneerde tabellen terug te geven.

SELECT
    t.name AS [Table],
    i.name AS [Index],
    i.type_desc,
    i.is_primary_key,
    ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
    ON t.object_id = i.object_id
    AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id;

Resultaat:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

In mijn geval is er maar één gepartitioneerde tabel in de database.

Voor de duidelijkheid:dit retourneert alleen tabellen die expliciet zijn gepartitioneerd.

Retourneer de partities

U kunt ook andere weergaven opvragen, zoals sys.partitions en sys.dm_db_partition_stats om een ​​lijst met partities voor elke tafel te retourneren.

Merk op dat beide weergaven ook tabellen retourneren die niet expliciet zijn gepartitioneerd (d.w.z. ze hebben slechts één partitie). In SQL Server hebben tabellen en views die niet expliciet zijn gepartitioneerd nog steeds een partitie (partition_number =1).

Hier is een voorbeeld van sys.dm_db_partition_stats :

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');

Resultaat:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 3979        |
| 4                  | 0           |
+--------------------+-------------+

Hier is een voorbeeld waarin ik de partitie-info retourneer voor een niet-gepartitioneerde tabel.

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');

Resultaat:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 3           |
+--------------------+-------------+

Zoals vermeld, heeft het nog steeds één partitie en zijn partition_number is 1 .


  1. Een overzicht van cluster-naar-clusterreplicatie

  2. ExecuteReader vereist een open en beschikbare verbinding. De huidige status van de verbinding is Bezig met verbinden

  3. Hoe de MySql root-wachtwoordopdrachtregel in ubuntu linux te resetten/wijzigen?

  4. PostgreSQL installeren op Ubuntu voor Ruby on Rails