ACCESS_METHODS_HOBT

(Republishing, or using this info in a commercial product/website, is prohibited without permission. All other uses are permitted. If in doubt, please ask.)

(Back to main page…)

Description:

This latch class is when a thread is waiting for access to the in-memory representation of a HoBt (Heap-or-Btree) so that it can initialize/reinitialize it from metadata. The HoBt structure includes things like the list of columns, columns offsets, page and record counts, and allocation unit information (in-row data, LOB, row-overflow).

(Books Online description: “Used to synchronize access to the in-memory representation of a HoBt.”)

Questions/comments on this latch class? Click here to send Paul an email, especially if you have any information to add to this topic.

Added in SQL Server version:

pre-2005/2005

Removed in SQL Server version:

N/A

Extended Events latch_class value:

Maps to the HOBT map_value in sys.dm_xe_map_values.

The map_key value in sys.dm_xe_map_values is 9 in 2008 and 2008 R2, and 3 in 2012 and 2014 RTM. After 2014 RTM, you must check the DMV to get the latest value as some map_key values have changed in later builds.

Other information:

I have not seen this latch be a noticeable contention point.

See the LATCH_EX wait type for more information about latches in general and how to troubleshoot them.

Known occurrences in SQL Server (list number matches call stack list):

  1. Refresh a HoBt structure (in this case, for a system table scan while looking up an object so a query can bind to it)
  2. Refresh a HoBt structure (in this case, for a system table scan looking for Service Broker queues that support internal activation)

And many more similar stacks that end in a HoBt structure being initialized/reinitialized.

Abbreviated call stacks (list number matches known occurrences list):

  1. XeSqlPkg::latch_suspend_end::Publish+138
    LatchBase::Suspend+16b8
    LatchBase::AcquireInternal+415
    VisibleHoBt::Refresh+75
    HoBtFactory::GetHoBtAccess+a98
    GetRowsetProperties+177
    RowsetNewSS::Init+26e
    OpenRowsetSS::OpenRowset+10f
    OpenSystemTableRowset+2c7
    CMEDScanBase::Rowset+57d
    CMEDScan::StartSearch+4e7
    CMEDCatYukonObject::FLookupObjectFromId+25f
    CMEDCatalogObject::GetCachedObjectById+15c
    CMEDCatalogObject::GetCachedObjectByName+81
    CMEDProxySchema::GetObjectByName+82
    GetSystemObject+253
    IMetadataAccess::GetMultiNameObjectHelper+69c
    CMEDAccess::GetMultiNameObject+df
    CAlgTableMetadata::FPartialBind+796
    CAlgTableMetadata::Bind+31d
    CRelOp_Get::BindTree+429
    COptExpr::BindTree+85
    CRelOp_FromList::BindTree+37
    COptExpr::BindTree+85
  2. XeSqlPkg::latch_suspend_end::Publish+138
    LatchBase::Suspend+16b8
    LatchBase::AcquireInternal+415
    VisibleHoBt::Refresh+75
    HoBtFactory::GetHoBtAccess+a98
    GetRowsetProperties+177
    RowsetNewSS::Init+26e
    OpenRowsetSS::OpenRowset+10f
    OpenSystemTableRowset+2c7
    CMEDScanBase::Rowset+57d
    CMEDScan::StartSearch+4e7
    ECatBitsYukon::GetNextSchemaObjectId+ac
    CMEDCatSB::GetNextServiceId+bf
    CMEDProxyDatabase::FGetNextServiceId+36
    CSbMappingMgr::NotifyBrokerInitialize+31d
    CActiveServiceBroker::BackgroundNotify+14b
    CActiveServiceBrokerMgr::ASBInitializer+19b
    CActiveServiceBrokerMgr::CSbASBInitializer::IdempotentInvoke+26
    CSbTaskManager::HandleReusableTask+2b8
    CSbTask::TaskStart+14b
    CSbTask::BeginTaskStart+17
    SOS_Task::Param::Execute+21e
    SOS_Scheduler::RunTask+ab