Я сделал секционированную таблицу с дальностью, оставленной функцией.Затем я вставляю несколько строк в один раздел .Результат:
select partition_id, partition_number, rows from sys.partitions where object_id = object_id('ptest')
результат:
partition_id partition_number rows
72057594464436224 1 8000
72057594464501760 2 0
72057594464567296 3 0
72057594464632832 4 0
, затем я обновляю некоторые строки в этой таблице и запрашиваю sys.dm_tran_locks, затем Я нахожу некоторые блокировки RID для раздела 4 как это:
select * from sys.dm_tran_locks where resource_type = 'RID'
Результат примерно так:
Resource_type Resource_description
RID 3:13:192
RID 1:153496:257
Когда я использую dbcc page , чтобы проверить, что содержит страница 3:13, я ничего не получаю:
dbcc traceon(3604)
dbcc page(db, 3, 13, 3)
Результат такой:
PAGE: (3:13)
BUFFER:
BUF @0x03E98BCC
bpage = 0x5A622000 bhash = 0x00000000 bpageno = (3:13)
bdbid = 11 breferences = 0 bUse1 = 38298
bstat = 0x1c0010b blog = 0x79797979 bnext = 0x00000000
PAGE HEADER:
Page @0x5A622000
m_pageId = (3:13) m_headerVersion = 1 m_type = 1
m_typeFlagBits = 0x4 m_level = 0 m_flagBits = 0xa008
m_objId (AllocUnitId.idObj) = 6973 m_indexId (AllocUnitId.idInd) = 256
Metadata: AllocUnitId = 72057594494910464
Metadata: PartitionId = 72057594464501760 Metadata: IndexId = 0
Metadata: ObjectId = 1967398128 m_prevPage = (0:0) m_nextPage = (0:0)
pminlen = 12 m_slotCnt = 1 m_freeCnt = 8094
m_freeData = 5867 m_reservedCnt = 0 m_lsn = (25294:376:199)
m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0
m_tornBits = -252731581
Allocation Status
GAM (3:2) = ALLOCATED SGAM (3:3) = ALLOCATED
PFS (3:1) = 0x60 MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (3:6) = CHANGED
ML (3:7) = NOT MIN_LOGGED
Итак, страница dbcc подтверждает, что на странице 3:13 ничего нет.Возникает мой вопрос: почему в файле 3:13 существуют блокировки RID, а там ничего нет ?