Tôi đang cố gắng để có được danh sách các trang cho một bảng có các hàng với ROW_OVERFLOW_DATA. Tôi có thể lấy danh sách các trang được phân bổ từ DMV không có giấy tờ sys.db_db_database_page_allocations
, tuy nhiên, dường như không có trang ROW_OVERFLOW_DATA nào được liệt kê trong đầu ra của DMV đó. Có một số DMV khác mà tôi chỉ đơn giản là không thể xác định vị trí?
Ví dụ kiểm chứng tối thiểu, đầy đủ và (hy vọng!):
USE tempdb;
IF OBJECT_ID(N'dbo.t', N'U') IS NOT NULL
DROP TABLE dbo.t;
GO
CREATE TABLE dbo.t
(
rownum int NOT NULL IDENTITY(1,1)
PRIMARY KEY CLUSTERED
, on_row_data varchar(30) NOT NULL
DEFAULT ('on_row_data')
, off_row_data varchar(MAX) NOT NULL
DEFAULT REPLICATE('A', 20000) --PLENTY BIG ENOUGH!
) WITH (DATA_COMPRESSION = NONE); --not compressing those pages!
INSERT INTO dbo.t DEFAULT VALUES;
DECLARE @ObjectID int = (SELECT o.object_id FROM sys.objects o WHERE o.name = 't');
DECLARE @PageID int;
DECLARE @PageTypeDesc varchar(100);
SELECT FileID = dpa.allocated_page_file_id
, PageID = dpa.allocated_page_page_id
, PageTypeDesc = dpa.page_type_desc
FROM sys.dm_db_database_page_allocations(DB_ID(), @ObjectID, NULL, NULL, 'DETAILED') dpa
Đầu ra trông như:
╔════════╦════════╦══════════════╗ ║ FileID ║ PageID ║ PageTypeDesc ╠════════╬════════╬══════════════╣ 1 ║ 1598 IAM_PAGE 3 105368 DATA_PAGE 3 ║ 105369 ║ NULL 3 ║ 105370 ║ NULL 3 ║ 105371 ║ NULL 3 ║ 105372 ║ NULL 3 ║ 105373 ║ NULL 3 ║ 105374 NULL 3 ║ 105375 NULL ╚════════╩════════╩══════════════╝
Điều này có ý nghĩa, ngoài trang ROW_OVERFLOW_DATA bị thiếu. Chúng tôi có một trang bản đồ phân bổ chỉ mục duy nhất và các trang dữ liệu 8KB có giá trị đầy đủ, chỉ có một trang duy nhất được phân bổ.
Tương tự, nếu tôi sử dụng sys.fn_PhysLocCracker
hàm không có giấy tờ để hiển thị trang nơi mỗi hàng tồn tại, như trong:
SELECT *
FROM dbo.t
CROSS APPLY sys.fn_PhysLocCracker(%%PHYSLOC%%)
Tôi chỉ thấy DATA_PAGE
danh sách:
╔════════╦═════════════╦═════════════════════╦════ ═════╦═════════╦═════════╗ Rownum on_row_data off_row_data ║ file_id page_id slot_id ╠════════╬═════════════╬═════════════════════╬════ ═════╬═════════╬═════════╣ 1 on_row_data AAAAAAAAAAAAAAAAAAA ║ 3 ║ 105368 0 ╚════════╩═════════════╩═════════════════════╩════ ═════╩═════════╩═════════╝
Tương tự, nếu tôi sử dụng DBCC IND(database, table, index)
tôi chỉ thấy hai trang được liệt kê:
DBCC IND (tempdb, t, 1);
Đầu ra:
╔═════════╦═════════╦════════╦════════╦═══════════ ═╦═════════╦═════════════════╦════════════════════ ═╦════════════════╦══════════╦════════════╦═══════ ══════╦═════════════╦═════════════╦═════════════╦═ ═╗ ║ PageFID ║ PagePID IAMFID IAMPID ║ ObjectID ║ IndexID ║ PartitionNumber ║ PartitionID iam_chain_type ║ PageType ║ IndexLevel NextPageFID NextPagePID NextPagePID ╠═════════╬═════════╬════════╬════════╬═══════════ ═╬═════════╬═════════════════╬════════════════════ ═╬════════════════╬══════════╬════════════╬═══════ ══════╬═════════════╬═════════════╬═════════════╬═ ═╣ 1 ║ 1598 NULL NULL 2069582411 1 ║ 1 ║ 6989586877272752128 Dữ liệu liên tiếp 10 ║ NULL 0 0 0 ║ 0 3 ║ 105368 1 1598 2069582411 1 ║ 1 ║ 6989586877272752128 Dữ liệu liên tiếp 1 0 ║ 0 0 0 ║ 0 ║ ╚═════════╩═════════╩════════╩════════╩═══════════ ═╩═════════╩═════════════════╩════════════════════ ═╩════════════════╩══════════╩════════════╩═══════ ══════╩═════════════╩═════════════╩═════════════╩═ ═╝
Nếu tôi xem nội dung trang thực tế, sử dụng DBCC PAGE
, có vẻ như tôi vẫn không thấy bất cứ điều gì về trang nào chứa ROW_OVERFLOW_DATA - Tôi chắc chắn nó phải ở đó, có lẽ tôi không biết phải xem gì:
DBCC PAGE (tempdb, 3, 105368 , 3) WITH TABLERESULTS;
Các kết quả quá lớn để phù hợp ở đây, nếu tôi bao gồm các hàng kết xuất bộ nhớ, nhưng đây là đầu ra tiêu đề:
╔══════════════╦════════════════════════════════╦═ ══════════════════════════════╦═══════════════════ ════════════╗ ║ ParentObject Object Field GIÁ TRỊ ╠══════════════╬════════════════════════════════╬═ ══════════════════════════════╬═══════════════════ ════════════╣ BUFFER: ║ BUF @ 0x000002437E86D5C0 trang web ║ 0x000002431A8A2000 BUFFER: ║ BUF @ 0x000002437E86D5C0 bhash 0x0000000000000000 BUFFER: ║ BUF @ 0x000002437E86D5C0 bpageno (3: 105368) BUFFER: ║ BUF @ 0x000002437E86D5C0 bdbid 2 BUFFER: ║ BUF @ 0x000002437E86D5C0 các cuộc họp 0 BUFFER: ║ BUF @ 0x000002437E86D5C0 bcputicks ║ 0 BUFFER: ║ BUF @ 0x000002437E86D5C0 bsampleCount ║ 0 BUFFER: ║ BUF @ 0x000002437E86D5C0 bUse1 63172 BUFFER: ║ BUF @ 0x000002437E86D5C0 bstat ║ 0x10b BUFFER: ║ BUF @ 0x000002437E86D5C0 ║ blog 0x212121cc BUFFER: ║ BUF @ 0x000002437E86D5C0 bnext ║ 0x0000000000000000 BUFFER: ║ BUF @ 0x000002437E86D5C0 bDentyContext ║ 0x000002435DA77160 BUFFER: ║ BUF @ 0x000002437E86D5C0 bstat2 0x0 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_pageId (3: 105368) TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_headerVersion 1 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_type 1 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_typeFlagBits 0x0 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_level 0 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_flagBits 0xc000 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_objId (AllocUnitId.idObj) 3920762 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_indexId (AllocUnitId.idInd) 512 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 Siêu dữ liệu: AllocUnitId ║ 144115445026914304 TRANG CHỦ ĐẦU TƯ: @ Trang @ 0x000002431A8A2000 Siêu dữ liệu: Phân vùngI ║ 6989586877272752128 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 Siêu dữ liệu: IndexId 1 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 Siêu dữ liệu: ObjectId 2069582411 TRANG ĐẦU TRANG: ║ Trang @ 0x000002431A8A2000 m_prevPage (0: 0) TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_nextPage (0: 0) TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 pminlen 8 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_slotCnt 1 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 2000 m_freeCnt ║ 66 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_freeData 8124 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_reservedCnt ║ 0 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_lsn (36: 47578: 1) TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_xactReserved ║ 0 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_xdesId (0: 0) TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 m_ghostRecCnt ║ 0 TRANG CHỦ: ║ Trang @ 0x000002431A8A2000 m_tornBits 0 TRANG CHỦ ĐẦU TƯ: Trang @ 0x000002431A8A2000 DB Frag ID 1 TRANG CHỦ ĐẦU TƯ: Trạng thái phân bổ ║ GAM (3: 2) PHÂN BIỆT TIÊU ĐỀ TRANG: Trạng thái phân bổ ║ SGAM (3: 3) KHÔNG ĐƯỢC PHÉP TIÊU ĐỀ TRANG: Trạng thái phân bổ PFS (3: 105144) 0x40 ĐƯỢC PHÉP 0_PCT_FULL TIÊU ĐỀ TRANG: Trạng thái phân bổ DIFF (3: 6) KHÔNG THAY ĐỔI TRANG CHỦ ĐẦU TƯ: Trạng thái phân bổ ║ ML (3: 7) KHÔNG MIN_LOGGED ĐẦU TRANG: ║ Khe 0 Offset 0x60 Chiều dài 8028 Type Loại bản ghi ║ PRIMARY_RECORD TIÊU ĐỀ TRANG: ║ Khe 0 Offset 0x60 Chiều dài 8028 Thuộc tính bản ghi NULL_BITMAP VARIABLE_COLUMNS TIÊU ĐỀ TRANG: ║ Khe 0 Offset 0x60 Chiều dài 8028 Size Kích thước bản ghi 8028 ╚══════════════╩════════════════════════════════╩═ ══════════════════════════════╩═══════════════════ ════════════╝