Ask Learn
Preview
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Various changes from automatic soft NUMA to CMemThread partitioning have muddied the water around the trace flag –T8048 messaging.
Prior to SQL Server 2016 the trace flag –T8048 is used to upgrade (only) NUMA partitioned, CMemThread objects to CPU partitioned based objects. A few of the most common CMemThread objects have been upgraded to NUMA partitioning, allowing –T8048 to be used as needed for additional partitioning.
The three types of CMemThread partitioning and associated details are described in my previous post: https://blogs.msdn.microsoft.com/psssql/2012/12/20/how-it-works-cmemthread-and-debugging-them/
Keep in mind that the vast majority of CMemThread objects (SQL 2005, 2008, 2008 R2, 2012, 2014, Azure DB and 2016) are not partitioned. A few are partitioned by NUMA node and fewer by CPU during their creation. Trace flag –T8048 ONLY upgrades those CMemThread objects already created with NUMA partitioning. This means the scope of –T8048 is limited to a few, key CMemThread objects.
Recommendation Unchanged: Prior to SQL Server 2016 enable –T8048 on larger systems.
Trace flag –T8048 longer exists in SQL Server 2016. Instead the design of CMemThread was updated. A CMemThread can still be created with designated partitioning. For example, the memory object supporting spatial is created with CPU partitioning by default so partitioning is never adjusted for the spatial memory object. The new design monitors the waits associated with the individual CMemThread objects. If the waits start to become intrusive SQL Server automatically upgrades the partitioning used by the specific CMemThread. This means the SQL Server will automatically adjust the CMemThread object based on the waiting task activities.
This is actually based loosely on the design of sub/super latch promotion in the buffer pool. Just as a contended latch can be partitioned so too is a hot memory object partitioned.
This means that trace flag -T8048 is no longer valid or needed on SQL Server 2016 because the design is such that SQL Server dynamically adjusts to CMemThread wait activities in order to optimize performance.
There are several benefits to this design
Once the memory object is partitioned it remains partitioned for the life of the SQL Server instance. Wait information state is volatile and not persisted so restarting the SQL Server instance returns the memory objects to their default state. Again, if wait pressure occurs the memory object is partitioned with no required intervention from the DBA.
Bob Dorr - Principal Software Engineer SQL Server
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign in