FIX: High "log write waits" counter value on a SQL Server 2012 or SQL Server 2014 instance

Symptoms


Assume that you enable a feature like AlwaysOn Availability Groups that uses log pool in an instance of Microsoft SQL Server 2012 or Microsoft SQL Server 2014. In this situation, the log write waits counter for the log buffer on the SQL Server instance has a high value. You will also notice high values for CMEMTHREAD and WRITELOG wait types in dynamic management views (DMVs). Additionally, mini dump files are generated.

Note The log pool is an in-memory cache of the transaction log. This cache is used, among other things: to optimize reading the log during recovery, and rollback operations in transaction replication, and for the AlwaysOn Availability Groups feature.
Cause
This issue occurs because the log pool uses a global pointer to a memory object (PMO) for all databases.

When many threads try to write logs by using the log pool, all the threads have to wait for the pointer to a memory object resulting in the contention described in the Symptoms section.

Resolution

SQL Server 2014 Service Pack 1

By default, Service Pack 1 for SQL Server 2014 includes this fix and you do not have to add any trace flags to enable the fix.

SQL Server 2014

The issue has been fixed in the RTM version of SQL Server 2014, but you still need to enable the trace flag T9024 and/or 8048to activate the fix. After you enable this trace flag, the SQL Server instance partitions the pointer to a memory object at node level.

Notes
  • If the issues persist even after enabling trace flag T9024, you can also enable trace flag T8048 which partitions the pointer to memory object at CPU level.
  • SQL Server 2014 Service Pack 1 (SP1) includes this fix, and you do not have to enable the trace flag.

SQL Server 2012

Note SQL Server 2012 Service Pack 3 (SP3) includes this fix, and you don't have to enable the trace flag.

Cumulative update information

Cumulative Update 3 for SQL Server 2012 SP1

The fix for this issue was first released in Cumulative Update 3. For more information about how to obtain this cumulative update package for SQL Server 2012 SP1, click the following article number to view the article in the Microsoft Knowledge Base:
2812412 Cumulative update package 3 for SQL Server 2012 Service Pack 1
Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2012 SP1 fix release. We recommend that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
2772858 The SQL Server 2012 builds that were released after SQL Server 2012 Service Pack 1 was released
Note After you apply the hotfix you have to enable the trace flag T9024 to activate the fix. After you enable this trace flag, the SQL Server instance partitions the pointer to a memory object at node level.

Note If the issues persist even after enabling trace flag T9024, you can also enable trace flag T8048 which partitions the pointer to memory object at CPU level.

Hotfix information

A supported hotfix is available from Microsoft. However, this hotfix is intended to correct only the problem that is described in this article. Apply this hotfix only to systems that are experiencing this specific problem.

If the hotfix is available for download, there is a "Hotfix Download Available" section at the top of this Knowledge Base article. If this section does not appear, submit a request to Microsoft Customer Service and Support to obtain the hotfix.

Note If additional issues occur or if any troubleshooting is required, you might have to create a separate service request. The usual support costs will apply to additional support questions and issues that do not qualify for this specific hotfix. For a complete list of Microsoft Customer Service and Support telephone numbers or to create a separate service request, visit the following Microsoft website: Note The "Hotfix Download Available" form displays the languages for which the hotfix is available. If you do not see your language, it is because a hotfix is not available for that language.

Prerequisites for SQL Server 2012

To apply this hotfix, you must have SQL Server 2012 SP1 installed on the computer.

Restart requirement

You do not have to restart the computer after you apply this hotfix. SQL Server must be restarted with the trace flag T9024. For more information about how to configure SQL Server by using a startup trace flag see Database Engine Service Startup Options.

File information

The global hotfix version of this has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time item in Control Panel.
File nameFile versionFile sizeDateTimePlatform
Sqlservr.exe2011.110.3340.016076826-Jan-201305:12x86
Sqlservr.exe2011.110.3340.019200026-Jan-201305:23x64
Status
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
Properties

Article ID: 2809338 - Last Review: 12/03/2015 08:24:00 - Revision: 11.0

Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Express, Microsoft SQL Server 2014 Web, Microsoft SQL Server 2012 Service Pack 1

  • kbautohotfix kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced KB2809338
Feedback