sql >> Databasteknik >  >> RDS >> Sqlserver

2 sätt att få partitionsinformation för en tabell i SQL Server (T-SQL)

Här är ett par sätt att returnera partitionsinformation för en tabell i SQL Server.

  • Du kan använda sys.partitions systemkatalogvy för att returnera partitionsinformation för en tabell och de flesta typer av vyer.
  • Du kan använda sys.dm_db_partition_stats system dynamisk hanteringsvy för att returnera sid- och radräkningsinformation för varje partition i den aktuella databasen.

Om en tabell eller index inte har partitionerats kommer dessa vyer fortfarande att returnera partitionsinformation (med ett partitionsnummer av 1 ). Detta beror på att alla tabeller och index i SQL Server innehåller minst en partition, oavsett om de är explicit partitionerade eller inte.

sys.partitions

sys.partitions vyn innehåller en rad för varje partition av alla tabeller och de flesta typer av index i databasen. Särskilda indextyper som Full-Text, Spatial och XML ingår inte.

Här är ett exempel att visa.

SELECT *
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Resultat:

+-------------------+-------------+------------+--------------------+-------------------+--------+---------------------------+--------------------+-------------------------+
| partition_id      | object_id   | index_id   | partition_number   | hobt_id           | rows   | filestream_filegroup_id   | data_compression   | data_compression_desc   |
|-------------------+-------------+------------+--------------------+-------------------+--------+---------------------------+--------------------+-------------------------|
| 72057594049986560 | 91147370    | 1          | 1                  | 72057594049986560 | 0      | 0                         | 0                  | NONE                    |
| 72057594050052096 | 91147370    | 1          | 2                  | 72057594050052096 | 100    | 0                         | 0                  | NONE                    |
| 72057594050117632 | 91147370    | 1          | 3                  | 72057594050117632 | 3979   | 0                         | 0                  | NONE                    |
| 72057594050183168 | 91147370    | 1          | 4                  | 72057594050183168 | 0      | 0                         | 0                  | NONE                    |
+-------------------+-------------+------------+--------------------+-------------------+--------+---------------------------+--------------------+-------------------------+

Vi kan se att det finns fyra partitioner för denna tabell.

Här är den igen, den här gången med vertikal utmatning (för att du inte behöver rulla i sidled):

-[ RECORD 1 ]-------------------------
partition_id            | 72057594049986560
object_id               | 91147370
index_id                | 1
partition_number        | 1
hobt_id                 | 72057594049986560
rows                    | 0
filestream_filegroup_id | 0
data_compression        | 0
data_compression_desc   | NONE
-[ RECORD 2 ]-------------------------
partition_id            | 72057594050052096
object_id               | 91147370
index_id                | 1
partition_number        | 2
hobt_id                 | 72057594050052096
rows                    | 100
filestream_filegroup_id | 0
data_compression        | 0
data_compression_desc   | NONE
-[ RECORD 3 ]-------------------------
partition_id            | 72057594050117632
object_id               | 91147370
index_id                | 1
partition_number        | 3
hobt_id                 | 72057594050117632
rows                    | 3979
filestream_filegroup_id | 0
data_compression        | 0
data_compression_desc   | NONE
-[ RECORD 4 ]-------------------------
partition_id            | 72057594050183168
object_id               | 91147370
index_id                | 1
partition_number        | 4
hobt_id                 | 72057594050183168
rows                    | 0
filestream_filegroup_id | 0
data_compression        | 0
data_compression_desc   | NONE

sys.dm_db_partition_stats

sys.dm_db_partition_stats view returnerar information om sidor och rader för varje partition i den aktuella databasen. Men om du bara är intresserad av ett bord kan du också begränsa det till just det tabellen.

Här är ett exempel.

SELECT *
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');

Resultat:

+-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------+
| partition_id      | object_id   | index_id   | partition_number   | in_row_data_page_count   | in_row_used_page_count   | in_row_reserved_page_count   | lob_used_page_count   | lob_reserved_page_count   | row_overflow_used_page_count   | row_overflow_reserved_page_count   | used_page_count   | reserved_page_count   | row_count   |
|-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------|
| 72057594049986560 | 91147370    | 1          | 1                  | 0                        | 0                        | 0                            | 0                     | 0                         | 0                              | 0                                  | 0                 | 0                     | 0           |
| 72057594050052096 | 91147370    | 1          | 2                  | 1                        | 2                        | 9                            | 0                     | 0                         | 0                              | 0                                  | 2                 | 9                     | 100         |
| 72057594050117632 | 91147370    | 1          | 3                  | 13                       | 15                       | 33                           | 0                     | 0                         | 0                              | 0                                  | 15                | 33                    | 3979        |
| 72057594050183168 | 91147370    | 1          | 4                  | 0                        | 0                        | 0                            | 0                     | 0                         | 0                              | 0                                  | 0                 | 0                     | 0           |
+-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------+

Här använder den återigen vertikal utmatning:

-[ RECORD 1 ]-------------------------
partition_id                     | 72057594049986560
object_id                        | 91147370
index_id                         | 1
partition_number                 | 1
in_row_data_page_count           | 0
in_row_used_page_count           | 0
in_row_reserved_page_count       | 0
lob_used_page_count              | 0
lob_reserved_page_count          | 0
row_overflow_used_page_count     | 0
row_overflow_reserved_page_count | 0
used_page_count                  | 0
reserved_page_count              | 0
row_count                        | 0
-[ RECORD 2 ]-------------------------
partition_id                     | 72057594050052096
object_id                        | 91147370
index_id                         | 1
partition_number                 | 2
in_row_data_page_count           | 1
in_row_used_page_count           | 2
in_row_reserved_page_count       | 9
lob_used_page_count              | 0
lob_reserved_page_count          | 0
row_overflow_used_page_count     | 0
row_overflow_reserved_page_count | 0
used_page_count                  | 2
reserved_page_count              | 9
row_count                        | 100
-[ RECORD 3 ]-------------------------
partition_id                     | 72057594050117632
object_id                        | 91147370
index_id                         | 1
partition_number                 | 3
in_row_data_page_count           | 13
in_row_used_page_count           | 15
in_row_reserved_page_count       | 33
lob_used_page_count              | 0
lob_reserved_page_count          | 0
row_overflow_used_page_count     | 0
row_overflow_reserved_page_count | 0
used_page_count                  | 15
reserved_page_count              | 33
row_count                        | 3979
-[ RECORD 4 ]-------------------------
partition_id                     | 72057594050183168
object_id                        | 91147370
index_id                         | 1
partition_number                 | 4
in_row_data_page_count           | 0
in_row_used_page_count           | 0
in_row_reserved_page_count       | 0
lob_used_page_count              | 0
lob_reserved_page_count          | 0
row_overflow_used_page_count     | 0
row_overflow_reserved_page_count | 0
used_page_count                  | 0
reserved_page_count              | 0
row_count                        | 0

Den här exempeltabellen har partitionerats med den av Microsoft rekommenderade metoden för att behålla tomma partitioner i båda ändarna av partitionsintervallet. Detta säkerställer att eventuella framtida partitionsdelningar/sammanslagningar inte orsakar några oväntade datarörelser.


  1. Uppdatera med Join-fråga i Oracle

  2. SQL Server-filnamn kontra versioner

  3. Postgres 9.4 jsonb-array som tabell

  4. Använda ODBC med Salesforce och Okta Single Sign On (SSO)