Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

2 Möglichkeiten zum Abrufen von Partitionsinformationen für eine Tabelle in SQL Server (T-SQL)

Hier sind einige Möglichkeiten, Partitionsinformationen für eine Tabelle in SQL Server zurückzugeben.

  • Sie können die sys.partitions verwenden Systemkatalogansicht, um Partitionsinformationen für eine Tabelle und die meisten Arten von Ansichten zurückzugeben.
  • Sie können die sys.dm_db_partition_stats verwenden systemdynamische Verwaltungsansicht, um Seiten- und Zeilenanzahlinformationen für jede Partition in der aktuellen Datenbank zurückzugeben.

Wenn eine Tabelle oder ein Index nicht partitioniert wurde, geben diese Ansichten dennoch Partitionsinformationen zurück (mit einer partition_number von 1 ). Dies liegt daran, dass alle Tabellen und Indizes in SQL Server mindestens eine Partition enthalten, unabhängig davon, ob sie explizit partitioniert sind oder nicht.

sys.partitions

Die sys.partitions view enthält eine Zeile für jede Partition aller Tabellen und der meisten Arten von Indizes in der Datenbank. Spezielle Indextypen wie Volltext, Spatial und XML sind nicht enthalten.

Hier ist ein Beispiel zur Veranschaulichung.

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

Ergebnis:

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

Wir können sehen, dass es für diese Tabelle vier Partitionen gibt.

Hier ist es noch einmal, diesmal mit vertikaler Ausgabe (um Ihnen das seitliche Scrollen zu ersparen):

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

Die sys.dm_db_partition_stats view gibt Informationen zur Seiten- und Zeilenanzahl für jede Partition in der aktuellen Datenbank zurück. Aber wenn Sie nur an einer Tabelle interessiert sind, können Sie sie auch auf genau diese Tabelle eingrenzen.

Hier ist ein Beispiel.

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

Ergebnis:

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

Hier wird wieder die vertikale Ausgabe verwendet:

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

Diese Beispieltabelle wurde unter Verwendung der von Microsoft empfohlenen Methode partitioniert, leere Partitionen an beiden Enden des Partitionsbereichs beizubehalten. Dadurch wird sichergestellt, dass zukünftige Teilungen/Zusammenführungen von Partitionen keine unerwarteten Datenverschiebungen verursachen.