SQLTeam.com | Weblogs | Forums

Allocation Unit ID calculation is incorrect?

sql2008

#1

Hi,

I am reading the article http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-how-are-allocation-unit-ids-calculated/ on how to calculate the allocation unit ID based on m_indexId and m_objID. Then I try that on one of my database, by executing the command below:

DBCC TRACEON(3604);
DBCC PAGE (UFDATA_008_2013, 1, 73057, 3);
GO

And the output result is:

PAGE HEADER:

Page @0x10008000

m_pageId = (1:73057) m_headerVersion = 1 m_type = 1
m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x8000
m_objId (AllocUnitId.idObj) = 1913890731 m_indexId (AllocUnitId.idInd) = 0
Metadata: AllocUnitId = 406903719657472 Metadata: PartitionId = 406903719657472
Metadata: IndexId = 1 Metadata: ObjectId = 1913890731 m_prevPage = (1:92774)
m_nextPage = (0:0) pminlen = 11 m_slotCnt = 61
m_freeCnt = 3241 m_freeData = 4829 m_reservedCnt = 0
m_lsn = (4028:6215:30) m_xactReserved = 0 m_xdesId = (0:0)
m_ghostRecCnt = 0 m_tornBits = 0

Then I use the formula in the above article to calculate the allocation Unit ID as (0 << 48) + (1913890731 << 16) = 125428742946816, which does not equal to the output Metadata: AllocUnitId(406903719657472). Why?

On Paul's post, there is a similar case which Paul said the page is not allocated. But for my case, I can confirm the page is allocated,
since I use the following command to list all the pages allocated to table ‘AADomDataColSet’:

DBCC TRACEON(3604);
Dbcc ind(UFDATA_008_2013, ‘AADomDataColSet’, -1);

And the result is below:

You can find the page (1, 73057) is allocated to this object.
Thanks

Thanks


#2

I would suggest posting your question (the link to your SQLTeam post) on Twitter using the #sqlhelp hashtag and including @PaulRandal in it.