Ако преди сте създали разделена таблица в SQL Server и сега искате да знаете колко реда се съхраняват във всеки дял, ето три заявки, които можете да използвате.
По-специално, можете:
- Потърсете
sys.dm_db_partition_stats
преглед - Направете заявка за
sys.partitions
преглед - Използвайте
$PARTITION
функция в заявка
По-долу са дадени примери и за трите.
sys.dm_db_partition_stats
sys.dm_db_partition_stats
изгледът за динамично управление на системата връща информация за броя на страниците и редовете за всеки дял в текущата база данни.
Ето пример за връщане на броя на редовете на разделена таблица, наречена Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Резултат:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
В този случай първият и последният дял са празни (както се препоръчва от Microsoft).
sys.partitions
sys.partitions
изгледът на системния каталог съдържа ред за всеки дял на всички таблици и повечето типове индекси в базата данни.
Ето как можем да го използваме, за да върнем същите данни като в предишния пример.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Резултат:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Може да забележите, че това е почти идентично с предишната заявка. Единствената разлика е, че този използва колоната, наречена rows
, докато предишният използва колона, наречена row_count
.
$PARTITIONS
$PARTITIONS
системната функция връща номера на дяла, в който набор от стойности на колоната за разделяне ще бъде съпоставен за всяка определена функция на дял.
Следователно можем да използваме тази информация, за да създадем заявка, която връща данни за броя на редовете.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Резултат:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
Единствената разлика с резултата от този пример е, че той връща само броя на непразните редове.