Nếu trước đây bạn đã tạo một bảng được phân vùng trong SQL Server và bây giờ bạn muốn biết có bao nhiêu hàng đang được lưu trữ trong mỗi phân vùng, thì đây là ba truy vấn bạn có thể sử dụng.
Đặc biệt, bạn có thể:
- Truy vấn
sys.dm_db_partition_stats
xem - Truy vấn
sys.partitions
xem - Sử dụng
$PARTITION
chức năng trong một truy vấn
Dưới đây là các ví dụ về cả ba.
sys.dm_db_partition_stats
sys.dm_db_partition_stats
chế độ xem quản lý động hệ thống trả về thông tin số trang và hàng cho mọi phân vùng trong cơ sở dữ liệu hiện tại.
Dưới đây là một ví dụ về việc trả về số hàng của một bảng được phân vùng có tên là Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Kết quả:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
Trong trường hợp này, phân vùng đầu tiên và cuối cùng trống (theo khuyến nghị của Microsoft).
sys.partitions
sys.partitions
dạng xem danh mục hệ thống chứa một hàng cho mỗi phân vùng của tất cả các bảng và hầu hết các loại chỉ mục trong cơ sở dữ liệu.
Đây là cách chúng tôi có thể sử dụng nó để trả về cùng một dữ liệu như trong ví dụ trước.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Kết quả:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Bạn có thể nhận thấy rằng điều này gần giống với truy vấn trước đó. Sự khác biệt duy nhất là cột này sử dụng cột được gọi là rows
, trong khi cái trước sử dụng cột có tên là row_count
.
$PARTITIONS
$PARTITIONS
hàm hệ thống trả về số phân vùng mà một tập hợp các giá trị cột phân vùng sẽ được ánh xạ cho bất kỳ chức năng phân vùng cụ thể nào.
Do đó, chúng tôi có thể sử dụng thông tin này để tạo một truy vấn trả về dữ liệu số lượng hàng.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Kết quả:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
Sự khác biệt duy nhất với kết quả của ví dụ này, là nó chỉ trả về số lượng các hàng không trống.