Merge pull request #969 from aguzev/dev/aguzev/21Oct

October rule set update
This commit is contained in:
Ebru Ersan
2021-11-02 21:26:21 +03:00
committed by GitHub
2 changed files with 1442 additions and 568 deletions
@@ -1,44 +1,43 @@
"id","itemType","enabled","level","displayName","message","tags","description","helpLink","target.type","target.platform","target.machineType","target.engineEdition","target.version","target.name","threshold","limit"
"AutoCreateStats","definition","TRUE","Warning","'Auto-Create Statistics' option should be on","Turn on 'Auto-Create Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoUpdateStats","definition","TRUE","Warning","Auto-Update Statistics should be on","Turn on 'Auto-Update Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoCreateStats","definition","TRUE","Medium","'Auto-Create Statistics' option should be on","Turn on 'Auto-Create Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoUpdateStats","definition","TRUE","Medium","Auto-Update Statistics should be on","Turn on 'Auto-Update Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"QueryStoreOn","definition","TRUE","Warning","Query Store should be active","Query Store operation mode should be 'Read Write' to keep performance analysis accurate","DefaultRuleset, Performance, QueryStore, Statistics","The Query Store feature provides you with insight on query plan choice and performance. It simplifies performance troubleshooting by helping you quickly find performance differences caused by query plan changes. Query Store automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows so you can see database usage patterns and understand when query plan changes happened on the server. While Query Store collects queries, execution plans and statistics, its size in the database grows until this limit is reached. When that happens, Query Store automatically changes the operation mode to read-only and stops collecting new data, which means that your performance analysis is no longer accurate.","https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master tempdb model",,
"TF174","definition","TRUE","Information","TF 174 increases plan cache bucket count","Enable trace flag 174 to increase plan cache bucket count","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 174 increases the SQL Server plan cache bucket count from 40,009 to 160,001 on 64-bit systems. When the SQL Server plan cache reaches its entry limit, plans that have low cost must be evicted in order to insert new plans. This can cause severe contention on the SOS_CACHESTORE spinlock and a high CPU usage occurs in SQL Server. On 64-bit systems, the number of buckets for the SQL Server plan cache is 40,009. Therefore, the maximum number of entries that can fit inside the SQL Server plan cache is 160,036. Enabling trace flag 174 on high performance systems increases the size of the cache and can avoid SOS_CACHESTORE spinlock contention.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0.3368,12.0) [12.0.2480,13.0) [13.0,)",,,
"TF634","definition","TRUE","Information","TF 634 disables background columnstore compression","Trace flag 634 disables background columnstore compression task. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Memory, Performance, ColumnStore","Trace Flag 634 disables the background columnstore compression task. SQL Server periodically runs the Tuple Mover background task that compresses columnstore index rowgroups with uncompressed data, one such rowgroup at a time. Columnstore compression improves query performance but also consumes system resources. You can control the timing of columnstore compression manually, by disabling the background compression task with trace flag 634, and then explicitly invoking ALTER INDEX...REORGANIZE or ALTER INDEX...REBUILD at the time of your choice.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF652","definition","TRUE","Information","TF 652 disables page pre-fetching scans","Trace flag 652 disables page pre-fetching scans. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory, Pages","Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching.","http://support.microsoft.com/kb/920093","Server","Windows",,"OnPremises","[11.0,)",,,
"TF661","definition","TRUE","Information","TF 661 disables background ghost cleanup task","Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly.","https://support.microsoft.com/help/920093","Server","Windows",,"OnPremises","[11.0,)",,,
"TF652","definition","TRUE","Information","TF 652 disables page pre-fetching scans","Trace flag 652 disables page pre-fetching scans. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory, Pages","Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching.","http://support.microsoft.com/kb/920093","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF661","definition","TRUE","Information","TF 661 disables background ghost cleanup task","Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly.","https://support.microsoft.com/help/920093","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF834","definition","TRUE","Information","TF 834 enables large-page allocations","Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads","DefaultRuleset, TraceFlag, Performance, Memory, ColumnStore","Trace Flag 834 causes the server to use large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Trace flag 834 is NOT recommended on SQL Server instances that use columnstore indexes.","https://support.microsoft.com/kb/3210239","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF845","definition","TRUE","Warning","TF 845 is not needed in SQL Server 2012 and higher","Disable trace flag 845 in SQL Server 2012 and higher versions","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows",,"OnPremises","[11.0,)",,,
"TF902","definition","TRUE","Warning","TF 902 Database Upgrade Bypass should be disabled","Disable trace flag 902 which bypasses database upgrade","DefaultRuleset, TraceFlag, UpdateIssues","Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance.","https://support.microsoft.com/help/2163980","Server","Windows",,"OnPremises","[11.0,)",,,
"TF1117","definition","TRUE","Information","TF 1117 enables filegroup-level autogrow","Enable trace flag 1117 to enable filegroup auto-grow","DefaultRuleset, TraceFlag, DBFileConfiguration, Performance","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount.","https://support.microsoft.com/help/2154845","Server","Windows",,"OnPremises","[11.0,)",,,
"TF845","definition","TRUE","Warning","TF 845 is not needed in SQL Server 2012 and higher","Disable trace flag 845 in SQL Server 2012 and higher versions","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF902","definition","TRUE","Medium","TF 902 Database Upgrade Bypass should be disabled","Disable trace flag 902 which bypasses database upgrade","DefaultRuleset, TraceFlag, UpdateIssues","Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance.","https://support.microsoft.com/help/2163980","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1117","definition","TRUE","Information","TF 1117 enables filegroup-level autogrow","Enable trace flag 1117 to enable filegroup auto-grow","DefaultRuleset, TraceFlag, DBFileConfiguration, Performance","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount.","https://support.microsoft.com/help/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1117","override","TRUE","Warning","TF 1117 has no effect in SQL Server 2016 and higher","Disable trace flag 1117 in SQL Server 2016 and higher versions","","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. Starting with SQL Server 2016, this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES options of ALTER DATABASE syntax.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",,,,,"[13.0,)",,,
"TF1118","definition","TRUE","Information","TF 1118 disables single page allocations","Enable trace flag 1118 to force page allocations on uniform extents","DefaultRuleset, TraceFlag, Memory, Performance, Pages","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations.","https://support.microsoft.com/help/328551","Server","Windows",,"OnPremises","[11.0,)",,,
"TF1118","definition","TRUE","Information","TF 1118 disables single page allocations","Enable trace flag 1118 to force page allocations on uniform extents","DefaultRuleset, TraceFlag, Memory, Performance, Pages","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations.","https://support.microsoft.com/help/328551","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1118","override","TRUE","Warning","TF 1118 has no effect in SQL Server 2016 and higher","Disable trace flag 1118 in SQL Server 2016 and higher versions","","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. Starting with SQL Server 2016, this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE syntax.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",,,,,"[13.0,)",,,
"TF1204","definition","TRUE","Information","TF 1204 returns deadlock information","Disable trace flag 1204 that returns deadlock information","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1204 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog.","https://support.microsoft.com/help/832524","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1211","definition","TRUE","Warning","TF 1211 lock escalation should be disabled","Disable trace flag 1211 to enable lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1211","definition","TRUE","Medium","TF 1211 lock escalation should be disabled","Disable trace flag 1211 to enable lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1222","definition","TRUE","Information","TF 1222 returns deadlock information","Disable trace flag 1222 that returns deadlock information","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1222 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog, in XML format that does not comply with any XSD schema.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1224","definition","TRUE","Warning","TF 1224 should be disabled","Disable trace flag 1224 to allow lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1229","definition","TRUE","Warning","TF 1229 lock partitioning should be enabled","Disable trace flag 1229 to enable lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance, CPU","Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1236","definition","TRUE","Warning","TF 1236 database lock partitioning should be enabled","Enable trace Flag 1236 to enable database lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems.","https://support.microsoft.com/help/2926217","Server","Windows",,"OnPremises","[11.0,)",,,
"TF1236","override","TRUE","Warning","TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher","Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions","","Trace Flag 1236 enables database-level lock partitioning. Starting with SQL Server 2012 SP3 and SQL Server 2014 SP1, this behavior is controlled by the engine and trace flag 1236 has no effect.",,,,,,"[11.0.6020,12.0) [12.0.4100,)",,,
"TF1462","definition","TRUE","Warning","TF 1462 should be disabled to allow Log Stream Compression","Disable trace flag 1462 to allow log stream compression","DefaultRuleset, TraceFlag, Performance, AvailabilityGroups","Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth.","https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2312","definition","TRUE","Warning","TF 2312 sets the default cardinality estimation model","Trace Flag 2312 does not apply to this SQL Server version. Check if you need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120).","https://support.microsoft.com/help/2801413","Server","Windows",,"OnPremises","[11.0,)",,,
"TF2312","override","TRUE","Information",,,"DefaultRuleset, TraceFlag, QueryOptimizer, Performance",,,,,,,"[12.0, 13.0)",,,
"TF2312","override","TRUE","Information",,"TF2312 enables New CE model to SQL Server 2014 or above versions, dependent of the compatibility level of the database","DefaultRuleset, TraceFlag, QueryOptimizer, Performance",,,,,,,"[13.0, )",,,
"TF2330","definition","TRUE","Warning","TF 2330 disables recording of index usage stats","Trace Flag 2330 does not apply to this SQL Server version. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, Indexes","Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005.","https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1224","definition","TRUE","Medium","TF 1224 should be disabled","Disable trace flag 1224 to allow lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1229","definition","TRUE","Medium","TF 1229 lock partitioning should be enabled","Disable trace flag 1229 to enable lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance, CPU","Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1236","definition","TRUE","Medium","TF 1236 database lock partitioning should be enabled","Enable trace Flag 1236 to enable database lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems.","https://support.microsoft.com/help/2926217","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1236","override","TRUE","Low","TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher","Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions","","Trace Flag 1236 enables database-level lock partitioning. Starting with SQL Server 2012 SP3 and SQL Server 2014 SP1, this behavior is controlled by the engine and trace flag 1236 has no effect.",,,,,,"[11.0.6020,12.0) [12.0.4100,)",,,
"TF1462","definition","TRUE","Medium","TF 1462 should be disabled to allow Log Stream Compression","Disable trace flag 1462 to allow log stream compression","DefaultRuleset, TraceFlag, Performance, AvailabilityGroups","Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth.","https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2312","definition","TRUE","Low","TF 2312 sets the default cardinality estimation model","Trace Flag 2312 does not apply to this SQL Server version. Check if you need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120).","https://support.microsoft.com/help/2801413","Server","Windows",,"OnPremises","[11.0,)",,,
"TF2312","override","False","Information",,"TF2312 sets the query optimizer cardinality estimation model to SQL Server 2014 or above versions, dependent of the compatibility level of the database","DefaultRuleset, TraceFlag, QueryOptimizer, Performance",,,,,,,"[12.0, )",,,
"TF2330","definition","TRUE","Low","TF 2330 disables recording of index usage stats","Check if you need to disable recording of index usage stats by setting non-default trace flag 2330","DefaultRuleset, TraceFlag, Performance, Indexes","Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005.","https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2340","definition","TRUE","Information","TF 2340 disables Batch Sorts for optimized nested loops joins","Trace Flag 2340 disables Batch Sorts for optimized nested loops joins","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2340 causes SQL Server not to use a sort operation (batch sort) for optimized nested loops joins when generating a plan. Verify need to set a non-default trace flag with the current system build and configuration.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2371","definition","TRUE","Information","TF 2371 enables a linear recompilation threshold for statistics","Enable trace Flag 2371 to allow linear recompilation threshold for statistics","DefaultRuleset, TraceFlag, Performance, Statistics","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows",,"OnPremises","[11.0,)",,,
"TF2371","override","TRUE","Warning","TF 2371 has no effect in SQL Server 2016 and higher","Disable trace flag 2371 in SQL Server 2016 and higher versions when all databases are at compatibility level 130 and above","","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect.",,,,,,"[13.0,)",,,
"TF2389","definition","TRUE","Information","TF 2389 enables automatic statistics for ascending keys","Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance","Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"TF2371","definition","TRUE","Information","TF 2371 enables a linear recompilation threshold for statistics","Enable trace Flag 2371 to allow linear recompilation threshold for statistics","DefaultRuleset, TraceFlag, Performance, Statistics","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#auto_update_statistics-option","Server","Windows",,"OnPremises","[11.0,)",,,
"TF2371","override","TRUE","Warning",,,"","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect.",,,,,,"[13.0,)",,,
"TF2389","definition","TRUE","Information","TF 2389 enables automatic statistics for ascending keys","Check if you need to set non-default trace flag 2389 with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance","Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"TF2390","definition","TRUE","Information","TF 2390 enables automatic statistics for Ascending or Unknown Keys","Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance, Indexes","Trace Flag 2390 enables automatically generated quick statistics for ascending or unknown keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"TF2528","definition","TRUE","Warning","TF 2528 disables parallel operations for integrity checking","Trace Flag 2528 disables parallel operations for integrity checking","DefaultRuleset, TraceFlag, DataIntegrity, DBCC","Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2549","definition","TRUE","Warning","TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB","Trace Flag 2549 forces DBCC CHECKDB to treat different physical files as one logical file","DefaultRuleset, TraceFlag, DBCC","Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2562","definition","TRUE","Warning","TF 2562 forces 'DBCC CHECKDB' command to execute in single batch","Disable trace flag 2562 to force 'DBCC CHECKDB' command to execute in single batch","DefaultRuleset, TraceFlag, DBCC, TempDB","Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2566","definition","TRUE","Warning","TF 2566 disables default data purity check","Disable trace flag 2566 to turn off default data purity check","DefaultRuleset, TraceFlag, DBCC, DataIntegrity","Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default.","https://support.microsoft.com/help/945770","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3023","definition","TRUE","Information","TF 3023 enables Backup Checksum option by default","Disable trace flag 3023 to turn on 'CHECKSUM' option as default for 'BACKUP' command","DefaultRuleset, TraceFlag, Backup","Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option.","https://support.microsoft.com/help/2656988","Server","Windows",,"OnPremises","[11.0,)",,,
"TF3042","definition","TRUE","Information","TF 3042 bypasses default backup compression pre-allocation algorithm","Disable trace flag 3042 to bypass default backup compression","DefaultRuleset, TraceFlag, Backup","Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time.","https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2528","definition","TRUE","Low","TF 2528 disables parallel operations for integrity checking","Trace Flag 2528 disables parallel operations for integrity checking, and can cause it to take longer to complete","DefaultRuleset, TraceFlag, DataIntegrity, DBCC","Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2549","definition","TRUE","Low","TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB","Do not use this trace flag unless you know that each file is based on a unique physical disk","DefaultRuleset, TraceFlag, DBCC","Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2562","definition","TRUE","Low","TF 2562 forces 'DBCC CHECKDB' command to execute in single batch","Disable trace flag 2562, which forces 'DBCC CHECKDB' command to execute in single batch","DefaultRuleset, TraceFlag, DBCC, TempDB","Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2566","definition","TRUE","Medium","TF 2566 disables default data purity check","Disable trace flag 2566 to turn on default data purity check","DefaultRuleset, TraceFlag, DBCC, DataIntegrity","Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default.","https://support.microsoft.com/help/945770","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3023","definition","TRUE","Information","TF 3023 enables Backup Checksum option by default","Disable trace flag 3023 to turn off 'CHECKSUM' option as default for 'BACKUP' command","DefaultRuleset, TraceFlag, Backup","Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option.","https://support.microsoft.com/help/2656988","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3042","definition","TRUE","Information","TF 3042 bypasses default backup compression pre-allocation algorithm","Disable trace flag 3042 as using this trace flag might cause a slight performance penalty","DefaultRuleset, TraceFlag, Backup","Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time.","https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3226","definition","TRUE","Information","TF 3226 disables ErrorLog entries for successful backup operations","Disable trace flag 3226 to prevent SQL Server from recording ErrorLog entries for each successful backup operation","DefaultRuleset, TraceFlag, Backup","Trace Flag 3226 prevents SQL Server from recording an entry to the Errorlog on every successful backup operation. Backup operations are registered in the Errorlog by default. Frequent backup operations can contribute to massive Errorlog files that become unwieldy.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4136","override","TRUE","Information",,"Disable trace flag 4136 to prevent parameter sniffing. Verify need to set non-default trace flag with current system build and configuration","","Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.",,,,,,"[11.0.2316,)",,,
"TF4136","definition","TRUE","Warning","TF 4136 disables parameter sniffing","Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag","Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/980653","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4136","definition","TRUE","Medium","TF 4136 disables parameter sniffing","Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag","Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/980653","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4137","override","TRUE","Information",,"Disable trace flag 4137 to instruct SQL Server to generate plan using partial correlation of filters. Verify need to set non-default trace flag with the current system build and configuration","","Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.",,,,,,"[11.0.2316,)",,,
"TF4137","definition","TRUE","Warning","TF 4137 causes plans to use partial correlation for filters","Trace flag 4137 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). However it does not apply to this SQL Server version. Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2658214","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4138","override","TRUE","Information",,"Trace Flag 4138 enables plan that without row goal adjustments. Verify need to set a non-default trace flag with the current system build and configuration","","Trace Flag 4138 causes SQL Server to generate a plan that does not use row goal adjustments with queries that contain TOP, OPTION (FAST N), IN, or EXISTS keywords. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'DISABLE_OPTIMIZER_ROWGOAL' query hint. Verify need to set a Non-default trace flag with current system build and configuration.",,,,,,"[11.0.2325,)",,,
@@ -46,188 +45,201 @@
"TF4139","override","TRUE","Information",,"Trace Flag 4139 enables automatic statistics for any key ordering. Verify need to set a non-default trace flag with the current system build and configuration","","Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. This trace flag is recommended to be set in cases where queries access newly inserted key values that may change plan shape, but the new values are not yet updated in the statistics histogram for the affected columns. In this case, regardless of the leading statistics column status (ascending, descending, or stationary), the histogram used to estimate cardinality will be adjusted at query compile time. This trace flag does not apply to the cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Verify need to set a non-default trace flag with the current system build and configuration.",,,,,,"[11.0.3431,11.0.5058) [11.0.5532,)",,,
"TF4139","definition","TRUE","Warning","TF 4139 enables automatic statistics for any key ordering","Trace flag 4139 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Statistics","Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. However, this trace flag does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2952101","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4199","definition","TRUE","Information","TF 4199 enables query optimizer fixes","Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer","Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs.","http://support.microsoft.com/help/974006","Server","Windows Linux",,"OnPremises","[11.0, 14.0)",,,
"TF6498","override","TRUE","Information",,"Trace Flag 6498 enables concurrent large queries","",,,,,,,"[12.0.2474,12.0.2480] [12.0.4416,12.0.5000)",,,
"TF6498","override","TRUE","Warning",,"Disable trace flag 6498 in SQL Server 2014 SP2, SQL Server 2016 and higher versions","","Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.",,,,,,"[12.0.5000,)",,,
"TF6498","definition","TRUE","Warning","TF 6498 enables additional concurrent large queries","Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory","Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.","https://support.microsoft.com/help/3024815","Server","Windows",,"OnPremises","[11.0,)",,,
"TF6532","definition","TRUE","Information","TF 6532 enables performance improvements for spatial data","Enable trace flag 6532 to enable performance improvements for spatial data","DefaultRuleset, TraceFlag, Performance","Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0.6020,11.0.6518)",,,
"TF6532.6533","override","TRUE","Information",,"Enable trace flag 6532 and trace flag 6533 to enable performance improvements for spatial data","","Trace Flag 6532 and trace flag 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.",,,,,,"[11.0.6518,12.0) [12.0.5000,13.0)",,,
"TF6498","definition","TRUE","Low","TF 6498 enables additional concurrent large queries","Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory","Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.","https://support.microsoft.com/help/3024815","Server","Windows Linux",,"OnPremises","[12.0.5000,)",,,
"TF6532","definition","TRUE","Information","TF 6532 enables performance improvements for spatial data","Enable trace flag 6532 to enable performance improvements for spatial data","DefaultRuleset, TraceFlag, Performance","Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.","https://support.microsoft.com/help/3107399","Server","Windows Linux",,"OnPremises","[11.0.6020,11.0.6518)",,,
"TF6532.6533","override","TRUE","Warning",,"Disable trace flag 6532 in SQL Server 2016 and higher versions.","",,,,,,,"[13.0,)",,,
"TF6532.6533","definition","TRUE","Warning","TF 6532 and TF 6533 enable performance improvements for spatial data","Trace flags 6532 and 6533 do not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Starting with SQL Server 2016, this behavior is controlled by the engine and trace flags 6532 and 6533 have no effect.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0,)",,,
"TF6532.6533","definition","TRUE","Information","TF 6532 and 6533 improve spatial data performance","Enable trace flags 6532 and 6533 to improve spatial data performance","DefaultRuleset, TraceFlag, Performance","Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, types of queries, and objects.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0,)",,,
"TF6534","override","TRUE","Information",,"Enable trace flag 6534 to enable performance improvement of query operations with spatial data types","","Trace Flag 6534 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.",,,,,,"[11.0.6020,12.0) [12.0.5000,13.0)",,,
"TF6534","definition","TRUE","Warning","TF 6534 enables performance improvements for spatial data","Trace flag 6534 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0,)",,,
"TF6534","definition","TRUE","Warning","TF 6534 enables performance improvements for spatial data","Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0,)",,,
"TF7412","definition","TRUE","Information","TF 7412 enables the lightweight profiling infrastructure","Enable trace flag 7412 to enable lightweight profiling infrastructure for live query performance troubleshooting","DefaultRuleset, TraceFlag, Performance","Trace Flag 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting. Consider enabling TF 7412 to have the ability to access runtime information on query execution plans for any session.","https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure","Server","Windows Linux",,"OnPremises","[13.0.4001,15.0)",,,
"TF9024","definition","TRUE","Warning","TF 9024 converts global log pool memory object","Verify need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, Memory, CPU","TF9024 converts a global log pool memory object into NUMA node partitioned memory object.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"OnPremises",,,,
"TF9024","definition","TRUE","Low","TF 9024 converts global log pool memory object","Verify need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, Memory, CPU","TF9024 converts a global log pool memory object into NUMA node partitioned memory object.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"OnPremises",,,,
"TF9024","override","TRUE","Information",,"Enable trace flag 9024 to convert global log pool memory objects into NUMA node partitioned memory objects","",,,,,,,"[11.0.3349, 11.0.6020) [12.0, 12.0.4100)",,,
"TF9024","override","TRUE","Warning",,"TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above.","",,,,,,,"[11.0.6020, 12.0) [12.0.4100,)",,,
"TF8048","definition","TRUE","Warning","TF 8048 converts NUMA partitioned memory objects into CPU partitioned","Verify need to set a Non-default TF with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, CPU, Memory","TF 8048 converts NUMA partitioned memory objects into CPU partitioned.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"OnPremises",,,,
"TF8048","definition","TRUE","Low","TF 8048 converts NUMA partitioned memory objects into CPU partitioned","Verify need to set a Non-default TF 8048 with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, CPU, Memory","TF 8048 converts NUMA partitioned memory objects into CPU partitioned.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"OnPremises",,,,
"TF8048","override","TRUE","Warning",,"Disable trace flag 8048 in SQL Server 2014 SP2, SQL Server 2016 and above","",,,,,,,"[12.0.4100,)",,,
"TF8048","override","TRUE","Information",,"Enable trace flag 8048 to convert NUMA partitioned memory objects into CPU partitioned","",,,,,,,"[11.0, 12.0.4100)",,,
"DeprecatedFeatures","definition","TRUE","Warning","Deprecated or discontinued features should not be used","Replace deprecated or discontinued feature @{DeprecatedFeature} with actual features for SQL Server version @{ProductVersion}","DefaultRuleset, Deprecated, Security, UpdateIssues, Performance","This check detects deprecated or discontinued features used on target SQL Server instances. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"SystemHealthSession","definition","TRUE","Warning","'system_health' XEvent session is not active","Start system health session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SPServerDiagnosticsSession","definition","TRUE","Warning","'sp_server_diagnostics' xEvent session is not active","Start xEvent session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"BlackboxTrace","definition","TRUE","Warning","Black box trace is running","Check that you need black box trace and stop it otherwise","DefaultRuleset, Traces","This trace is designed to behave similarly to an airplane black box, to help you diagnose intermittent server crashes. It consumes more resources than the default trace and should not be running for extended periods of time.","https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-trace-create-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DefaultTrace","definition","TRUE","Warning","Default trace was not found or is inactive","Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it","DefaultRuleset, Traces","Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SystemHealthSession","definition","TRUE","Medium","'system_health' XEvent session is not active","Start system health session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SPServerDiagnosticsSession","definition","TRUE","Low","'sp_server_diagnostics' xEvent session is not active","Start xEvent session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DefaultTrace","definition","TRUE","Low","Default trace was not found or is inactive","Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it","DefaultRuleset, Traces","Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"HintsStatistics","definition","TRUE","Information","Hints are used","Use <join_hint>, <query_hint> and <table_hint> in specific cases only since SQL Server Query Optimizer typically selects best execution plan for queries","DefaultRuleset, QueryOptimizer, Performance, Statistics","Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.","https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"HintsUsageInModules","definition","False","Information","Hints usage in modules","@{Hint} used in @{type_desc} @{Schema_Name}.@{Object_Name}","DefaultRuleset, QueryOptimizer, Performance, Statistics","Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.","https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"PlansUseRatio","definition","TRUE","Warning","Amount of single use plans in cache is high","Enable 'Optimize for ad hoc workloads' setting on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","Single use plans waste system resources.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"HypotheticalIndexes","definition","TRUE","Warning","Hypothetical indexes found","Drop hypothetical @{IndexName} index for @{Schema}.@{Object}","DefaultRuleset, Indexes, Performance","Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"HypotheticalStatistics","definition","TRUE","Warning","Hypothetical statistics found","Drop hypothetical @{StatName} statistics for @{Schema}.@{Object}","DefaultRuleset, Statistics","Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"LatestCU","definition","TRUE","Warning","SQL Server instance is not up to date","Update SQL Server and install Service Packs and Cumulative Updates as they are released. Current product version @{ProductVersion} is not up to date","DefaultRuleset, Security, UpdateIssues","On an installed instance of SQL Server, we recommend that you apply the latest security updates and critical updates including general distribution releases (GDRs), service packs (SPs), and cumulative updates (CUs).","https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LatestCU","override","TRUE","Warning","SQL Server instance is up to date","Product version @{ProductVersion} is the latest available","",,"https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an",,,,,"[11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.5882, 14.0) [14.0.3370, 15.0) [15.0.4102,)",,,
"FKNoIndexes","definition","TRUE","Warning","Foreign key constraints should have corresponding indexes","Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName}","DefaultRuleset, Performance, Indexes","Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful.","https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"PlansUseRatio","definition","TRUE","Medium","Amount of single-use plans in cache is high","Enable 'Optimize for ad hoc workloads' option on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","The 'Optimize for ad hoc workloads' option helps relieve memory pressure by not allowing the plan cache to become filled with compiled plans that aren't reused.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.5",
"HypotheticalIndexes","definition","TRUE","Medium","Hypothetical indexes found","Drop hypothetical @{IndexName} index for @{Schema}.@{Object}","DefaultRuleset, Indexes, Performance","Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"HypotheticalStatistics","definition","TRUE","Medium","Hypothetical statistics found","Drop hypothetical @{StatName} statistics for @{Schema}.@{Object}","DefaultRuleset, Statistics","Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"LatestCU","definition","TRUE","Medium","SQL Server instance is not up to date","Update SQL Server and install Service Packs and Cumulative Updates as they are released. Current product version @{ProductVersion} is not up to date","DefaultRuleset, Security, UpdateIssues","On an installed instance of SQL Server, we recommend that you apply the latest security updates and critical updates including general distribution releases (GDRs), service packs (SPs), and cumulative updates (CUs).","https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LatestCU","override","TRUE","Warning","SQL Server instance is up to date","Product version @{ProductVersion} is the latest available","",,"https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an",,,,,"[11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.6300, 14.0) [14.0.3411, 15.0) [15.0.4178,)",,,
"FKNoIndexes","definition","TRUE","Medium","Foreign key constraints should have corresponding indexes","Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName}","DefaultRuleset, Performance, Indexes","Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful.","https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"MissedIndexes","definition","TRUE","Information","Potentially missing indexes","Create index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #}","DefaultRuleset, Performance, Indexes","Potentially missing indexes were found based on query history. It may be important to revise them.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"FullBackup","definition","TRUE","Warning","Full backup is missed or outdated","Create full backup. Last full backup is over @{threshold} days old","DefaultRuleset, Backup","Database doesn't have any full backup or the latest full backup is over 7 days old.","https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: model tempdb","7",
"OutdatedTranLogBackup","definition","TRUE","Warning","Transaction Log backup is missed or outdated","Create transaction log backup. Database recovery model: @{recovery_model_desc}","DefaultRuleset, Backup","Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H.","https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master model msdb tempdb",,
"DbDiffCollation","definition","TRUE","Warning","Database collation doesn't match master collation","Keep database collation the same as master or model collation","DefaultRuleset, DBConfiguration, Collation","We recommend that the collations of user-defined databases match the collation of master or model. Otherwise, collation conflicts can occur that might prevent code from executing. For example, when a stored procedure joins one table to a temporary table, SQL Server might end the batch and return a collation conflict error if the collations of the user-defined database and the model database are different. This occurs because temporary tables are created in tempdb, which bases its collation on that of model.","https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoClose","definition","TRUE","Warning","'AUTO_CLOSE' option should be OFF","Set 'AUTO_CLOSE' option to OFF","DefaultRuleset, Performance, DBConfiguration","When AUTO_CLOSE is set ON, this can cause performance degradation on frequently accessed databases because of the increased overhead of opening and closing the database after each connection. AUTO_CLOSE also flushes the procedure cache after each connection.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"AutoShrink","definition","TRUE","Warning","'AUTO_SHRINK' option should be OFF","Set 'AUTO_SHRINK' option to OFF","DefaultRuleset, DBConfiguration, Performance","Shrinking databases is the fastest way to achieve fragmentation. SQL Server goes to the last page in the database, moves it to the first free available space, and then repeats the process again. This shuffles the deck, putting your pages out of order.","https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"PageVerify","definition","TRUE","Warning","'PAGE_VERIFY' option should be 'CHECKSUM'","Set 'PAGE_VERIFY' option to 'CHECKSUM'","DefaultRuleset, DBConfiguration, DataIntegrity","When CHECKSUM is enabled for the PAGE_VERIFY database option, the SQL Server Database Engine calculates a checksum over the contents of the whole page, and stores the value in the page header when a page is written to disk. When the page is read from disk, the checksum is recomputed and compared to the checksum value that is stored in the page header. This helps provide a high level of data-file integrity.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"DbChaining","definition","TRUE","Warning","Cross-Database access should be disabled","Turn off 'DB_CHAINING' option","DefaultRuleset, DBConfiguration, Security","Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to the additional security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"AutoCreateStatsIncremental","definition","TRUE","Warning","Incremental option of auto stats should be ON","Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options","DefaultRuleset, DBConfiguration, Statistics, Performance","Incremental statistics update at partition level is a feature introduced in SQL Server 2014. When the option INCREMENTAL is turn on at the database level, newly auto created column statistics will use incremental statistics on partitioned tables by default.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master msdb tempdb",,
"TrustWorthy","definition","TRUE","Warning","'TRUSTWORTHY' should be OFF","Set 'TRUSTWORTHY' option to OFF","DefaultRuleset, DBConfiguration, Security","You can use the TRUSTWORTHY database setting to indicate whether the instance of Microsoft SQL Server trusts the database and the contents within the database. By default, this setting is set to OFF to mitigate certain threats that may be present when a database is attached to the server.","https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"ParameterizationNotSimple","definition","TRUE","Warning","'PARAMETERIZATION' should be 'SIMPLE'","Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries","DefaultRuleset, DBConfiguration, Performance, QueryOptimizer","When the PARAMETERIZATION database option is set to SIMPLE, the SQL Server query optimizer may choose to parameterize the queries. This means that any literal values that are contained in a query are substituted with parameters. This process is referred to as simple parameterization. When SIMPLE parameterization is in effect, you cannot control which queries are parameterized and which queries are not. However, you can specify that all queries in a database be parameterized by setting the PARAMETERIZATION database option to FORCED. Regardless of whether you have a Plan-Stability or not, SQL Server will always auto parameterize your SQL Statements, and reuse the cached execution plan over and over again. It doesn't matter how terrible the execution plan is. Therefore you have to know in exact detail the shape of your execution plans, and whether they can lead to some performance related problems.","https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"TempDBFilesNotSameSize","definition","TRUE","Warning","TempDB data files are not the same size","Make all TempDB data files the same size","DefaultRuleset, TempDB, Performance, DBFileConfiguration","We recommend that you create all TempDB data files at the same size.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesMultiple4","definition","TRUE","Warning","Number of TempDB data files should be in multiples of 4","Number of TempDB data files should be in multiples of 4","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFiles1PerCPU","definition","TRUE","Warning","Number of TempDB data files should depend on CPU count","1 data file per logical processor is required (processors count: @{online_logical_processors})","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesNotLess8","definition","TRUE","Warning","Number of TempDB data files should be at least 8","Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesAutoGrowth","definition","TRUE","Warning","TempDB data files have different auto-growth settings","Make auto-growth settings the same for each TempDB data file","DefaultRuleset, TempDB, Performance, DBFileConfiguration","TempDB data files should be of equal size within each filegroup, as SQL Server uses a proportional-fill algorithm that favors allocations in files with more free space.","https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"FilesAutogrowth","definition","TRUE","Warning","Database files auto-growth over 1GB","Set file growth to less than 1GB for files: @{FileName}","DefaultRuleset, Performance, DBFileConfiguration","A data or log file will be extended with auto-growth value to prevent the lack of free space in files. This process can perform significant impact on SQL Server performance if auto-growth value gets over 1 GB. By default, SQL Server will put zeros to a newly allocated space. And the more space it takes, the more time it takes to initialize it.","https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0.4001,)",,,
"DuplicateIndexes","definition","TRUE","Warning","Duplicate indexes","Remove duplicate indexes in table @{Table}: @{ToDelete}","DefaultRuleset, Performance, Indexes","A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. ","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"RedundantIndexes","definition","TRUE","Warning","Tables with redundant indexes","Remove redundant indexes in table @{Table}: @{Indexes}","DefaultRuleset, Performance, Indexes","There are tables with possibly redundant indexes according to the set of key and included columns. We recommended to revise all these objects as soon as possible.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"FullBackup","definition","TRUE","Medium","Full backup is missed or outdated","Create full backup. Last full backup is over @{threshold} days old","DefaultRuleset, Backup","Database doesn't have any full backup or the latest full backup is over 7 days old.","https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: model tempdb","7",
"OutdatedTranLogBackup","definition","TRUE","Medium","Transaction Log backup is missed or outdated","Create transaction log backup. Database recovery model: @{recovery_model_desc}","DefaultRuleset, Backup","Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H.","https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master model msdb tempdb",,
"DbDiffCollation","definition","TRUE","Medium","Database collation doesn't match master collation","Keep database collation the same as master or model collation","DefaultRuleset, DBConfiguration, Collation","We recommend that the collations of user-defined databases match the collation of master or model. Otherwise, collation conflicts can occur that might prevent code from executing. For example, when a stored procedure joins one table to a temporary table, SQL Server might end the batch and return a collation conflict error if the collations of the user-defined database and the model database are different. This occurs because temporary tables are created in tempdb, which bases its collation on that of model.","https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoClose","definition","TRUE","Medium","'AUTO_CLOSE' option should be OFF","Set 'AUTO_CLOSE' option to OFF","DefaultRuleset, Performance, DBConfiguration","When AUTO_CLOSE is set ON, this can cause performance degradation on frequently accessed databases because of the increased overhead of opening and closing the database after each connection. AUTO_CLOSE also flushes the procedure cache after each connection.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"AutoShrink","definition","TRUE","Medium","'AUTO_SHRINK' option should be OFF","Set 'AUTO_SHRINK' option to OFF","DefaultRuleset, DBConfiguration, Performance","Shrinking databases is the fastest way to achieve fragmentation. SQL Server goes to the last page in the database, moves it to the first free available space, and then repeats the process again. This shuffles the deck, putting your pages out of order.","https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"PageVerify","definition","TRUE","Medium","'PAGE_VERIFY' option should be 'CHECKSUM'","Set 'PAGE_VERIFY' option to 'CHECKSUM'","DefaultRuleset, DBConfiguration, DataIntegrity","When CHECKSUM is enabled for the PAGE_VERIFY database option, the SQL Server Database Engine calculates a checksum over the contents of the whole page, and stores the value in the page header when a page is written to disk. When the page is read from disk, the checksum is recomputed and compared to the checksum value that is stored in the page header. This helps provide a high level of data-file integrity.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"DbChaining","definition","TRUE","Medium","Cross-Database access should be disabled","Turn off 'DB_CHAINING' option","DefaultRuleset, DBConfiguration, Security","Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to the additional security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"AutoCreateStatsIncremental","definition","TRUE","Low","Incremental option of auto stats should be ON","Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options","DefaultRuleset, DBConfiguration, Statistics, Performance","Incremental statistics update at partition level is a feature introduced in SQL Server 2014. When the option INCREMENTAL is turn on at the database level, newly auto created column statistics will use incremental statistics on partitioned tables by default.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master msdb tempdb",,
"TrustWorthy","definition","TRUE","Low","'TRUSTWORTHY' should be OFF","Set 'TRUSTWORTHY' option to OFF","DefaultRuleset, DBConfiguration, Security","You can use the TRUSTWORTHY database setting to indicate whether the instance of Microsoft SQL Server trusts the database and the contents within the database. By default, this setting is set to OFF to mitigate certain threats that may be present when a database is attached to the server.","https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"ParameterizationNotSimple","definition","TRUE","Low","'PARAMETERIZATION' should be 'SIMPLE'","Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries","DefaultRuleset, DBConfiguration, Performance, QueryOptimizer","When the PARAMETERIZATION database option is set to SIMPLE, the SQL Server query optimizer may choose to parameterize the queries. This means that any literal values that are contained in a query are substituted with parameters. This process is referred to as simple parameterization. When SIMPLE parameterization is in effect, you cannot control which queries are parameterized and which queries are not. However, you can specify that all queries in a database be parameterized by setting the PARAMETERIZATION database option to FORCED. Regardless of whether you have a Plan-Stability or not, SQL Server will always auto parameterize your SQL Statements, and reuse the cached execution plan over and over again. It doesn't matter how terrible the execution plan is. Therefore you have to know in exact detail the shape of your execution plans, and whether they can lead to some performance related problems.","https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"TempDBFilesNotSameSize","definition","TRUE","Medium","TempDB data files are not the same size","Make all TempDB data files the same size","DefaultRuleset, TempDB, Performance, DBFileConfiguration","We recommend that you create all TempDB data files at the same size.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesMultiple4","definition","TRUE","Low","Number of TempDB data files should be in multiples of 4","Make the number of data files be in multiples of 4. For example, 8, 12, 16, and so on, depending on your workloads. Currently you have @{physical_name} TempDB data files ","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFiles1PerCPU","definition","TRUE","Medium","Number of TempDB data files should depend on CPU count","1 data file per logical processor is required (processors count: @{online_logical_processors})","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesNotLess8","definition","TRUE","Medium","Number of TempDB data files should be at least 8","Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesAutoGrowth","definition","TRUE","Medium","TempDB data files have different auto-growth settings","Make auto-growth settings the same for each TempDB data file","DefaultRuleset, TempDB, Performance, DBFileConfiguration","TempDB data files should be of equal size within each filegroup, as SQL Server uses a proportional-fill algorithm that favors allocations in files with more free space.","https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"FilesAutogrowth","definition","TRUE","Medium","Database files auto-growth over 1GB","Set file growth to less than 1GB for files: @{FileName}","DefaultRuleset, Performance, DBFileConfiguration","A data or log file will be extended with auto-growth value to prevent the lack of free space in files. This process can perform significant impact on SQL Server performance if auto-growth value gets over 1 GB. By default, SQL Server will put zeros to a newly allocated space. And the more space it takes, the more time it takes to initialize it.","https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0.4001,)",,,
"DuplicateIndexes","definition","TRUE","Low","Duplicate indexes","Remove duplicate indexes in table @{Table}: @{ToDelete}","DefaultRuleset, Performance, Indexes","A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. ","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"RedundantIndexes","definition","TRUE","Low","Tables with redundant indexes","Remove redundant indexes in table @{Table}: @{Indexes}","DefaultRuleset, Performance, Indexes","There are tables with possibly redundant indexes according to the set of key and included columns. We recommended to revise all these objects as soon as possible.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UserObjectsInMaster","definition","TRUE","Warning","User objects in master database","Remove user objects from 'master' database: @{Object_Name}","DefaultRuleset, masterDB, Backup","We highly recommend you not create user objects in the master database. If it's unavoidable for some reason, make sure to back up the database more frequently.","https://docs.microsoft.com/sql/relational-databases/databases/master-database","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","master",,
"HighCPUUsage","definition","TRUE","Warning","High CPU usage on server","Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}%","DefaultRuleset, Performance, CPU","Keeping CPU usage rates within normal ranges is vital for servers hosting SQL Server instances. A continually high rate of CPU usage may indicate the need to upgrade the CPU or add multiple processors. Alternatively, a high CPU usage rate may indicate a poorly tuned or designed application. Optimizing the application can lower CPU utilization.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,"70",
"ReplErrors24H","definition","TRUE","Warning","Replication errors within last 24 hours","Review '@{publisher_db}' database replication errors for publications: @{publication}","DefaultRuleset, Replication","This check searches for errors in distribution database agent's history table for the last 24 hours.","https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity10","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 10","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity16","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 16","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity17","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 17","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity19","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 19","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity20","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 20","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity21","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 21","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity22","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 22","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity23","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 23","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity24","definition","TRUE","Warning","Agent doesn't rise alerts for errors with severity 24","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"WeakPassword","definition","TRUE","Warning","Weak password","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Some user logins have weak passwords.","https://docs.microsoft.com/sql/relational-databases/security/strong-passwords","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"VLFCount","definition","TRUE","Warning","VLF count","Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId}","DefaultRuleset, Backup, Performance","The SQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. The Database Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. The Database Engine tries to maintain a small number of virtual files. The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. The size or number of virtual log files cannot be configured or set by administrators. If the log files grow to a large size in many small increments, they will have many virtual log files. This can slow down database startup and also log backup and restore operations. Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"50",
"TF8015","definition","TRUE","Warning","TF 8015 disables auto-detection and NUMA setup","Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, CPU, NUMA","SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups.","https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044","Server","Windows",,"OnPremises","[11.0,11.0.3349)",,,
"TF8032","definition","TRUE","Warning","TF 8032 reverts cache limit parameters to SQL Server 2005 RTM","Disable trace flag 8032","DefaultRuleset, TraceFlag, Performance","Trace Flag 8032 reverts the cache limit parameters to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP.",,"Server","Windows",,"OnPremises","[11.0,)",,,
"TF8744","definition","TRUE","Warning","TF 8744 disables pre-fetching for Nested Loop operator","Disable trace flag 8744 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator.","https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa","Server","Windows",,"OnPremises","[11.0,12.0)",,,
"TF9347","definition","TRUE","Warning","TF 9347 disables batch mode for sort operator","Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries.",,"Server","Windows",,"OnPremises","[11.0,13.0)",,,
"TF9349","definition","TRUE","Warning","TF 9349 disables batch mode for top N sort operator","Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries.",,"Server","Windows",,"OnPremises","[11.0,13.0)",,,
"TF9389","definition","TRUE","Warning","TF 9389 enables dynamic memory grant for batch mode operators","Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, TempDB","Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available.",,"Server","Windows",,"OnPremises, ManagedInstance","[11.0,13.0)",,,
"TF9476","definition","TRUE","Warning","TF 9476 causes SQL Server to generate plan using Simple Containment assumption","Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, QueryOptimizer","Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions.",,"Server","Windows",,"OnPremises","[11.0,13.0)",,,
"TF9481","definition","TRUE","Warning","TF 9481 enables Legacy CE model","Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database.",,"Server","Windows",,"OnPremises","[11.0,12.0)",,,
"TF10204","definition","TRUE","Warning","TF 10204 disables merge/recompress","Disable trace flag 10204. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, ColumnStore","Trace flag 10204 disables merge/recompress during columnstore index reorganization. In SQL Server 2016 (13.x), when a columnstore index is reorganized, there is new functionality to automatically merge any small compressed rowgroups into larger compressed rowgroups, as well as recompressing any rowgroups that have a large number of deleted rows.",,"Server","Windows",,"OnPremises","[11.0,13.0)",,,
"SPNaming","definition","TRUE","Warning","Stored procedure naming","Rename the following stored procedures to eliminate 'sp_' prefix: @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the sp_ prefix designates system stored procedures. If you use that prefix for your stored procedures, the name of your procedure might conflict with the name of a system stored procedure that will be created in the future. If such a conflict occurs, your application might break if your application refers to the procedure without qualifying the reference by schema. In this situation, the name will bind to the system procedure instead of to your procedure.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ObjectNamingSpecialChar","definition","TRUE","Warning","Special characters in object names","Rename the following objects to eliminate special characters: @{ObjectName}","DefaultRuleset, Naming","If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ColumnNamingSpecialChar","definition","TRUE","Warning","Special characters in column names","Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{ObjectName}","DefaultRuleset, Naming","Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FnNaming","definition","TRUE","Warning","User function naming","Rename the following functions to eliminate 'fn_ prefix': @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the fn_ prefix designates system functions. If you use that prefix for your functions, the name of your function might conflict with the name of a system function that will be created in the future. If such a conflict occurs, your application might break if your application refers to the function without qualifying the reference by schema. In this situation, the name will bind to the system function instead of to your function.","https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ObjectNamingResKeywords","definition","TRUE","Warning","Object names contain reserved keywords","Rename the following objects to eliminate reserved keywords: @{ObjectName}","DefaultRuleset, Naming","Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers.","https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"DeprFeaturesInModules","definition","TRUE","Warning","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"DeprFeaturesInJobs","definition","TRUE","Warning","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"NUMANodeSingleCPU","definition","TRUE","Warning","Single CPU assigned to NUMA node","Assign additional CPUs to NUMA nodes with only one CPU","DefaultRuleset, NUMA, CPU, Memory, Performance","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,,
"NUMANodeNoCPU","definition","TRUE","Warning","NUMA nodes without CPUs","Assign CPUs to each NUMA node","DefaultRuleset, NUMA, Performance, CPU, Memory","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,,
"IndexKeyGuid","definition","TRUE","Warning","Guid in clustered index key column","Remove GUIDs in clustered indexes keys: @{IndexName}","DefaultRuleset, Indexes, Performance","A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects.","https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"IndexesLargeKeys","definition","TRUE","Warning","Indexes keys with more than 900 bytes","Remove keys larger than 900 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,13.0)","NOT: master model msdb tempdb",,
"IndexesLargeKeysNonClust","definition","TRUE","Warning","NonClustered indexes keys with more than 1700 bytes","Remove keys larger than 1700 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master model msdb tempdb",,
"IndexesLargeKeysClust","definition","TRUE","Warning","Clustered indexes keys with more than 900 bytes","Remove keys larger than 900 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master model msdb tempdb",,
"DisabledIndexes","definition","TRUE","Warning","Disabled indexes exist","Remove or enable disabled index: @{FullName}","DefaultRuleset, Indexes, Performance","If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them.","https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"IndexesFillFactor","definition","TRUE","Warning","Index fill factor is below 80%","Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent","DefaultRuleset, Indexes, Performance","The fill-factor option is provided for fine-tuning index data storage and performance. When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index.","https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"NonUniqueClusterIndex","definition","TRUE","Warning","Non-unique clustered indexes","Review non-unique @{FullName} clustered index","DefaultRuleset, Indexes, Performance","Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. Thats why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive.","https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"SuspectPages","definition","TRUE","Warning","Suspect pages found","Run 'DBCC CHECKDB' to verify affected database. Suspect pages were found: @{EventType}","DefaultRuleSet, Pages, DataIntegrity","The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary.","https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server","Database","Windows Linux",,,"[11.0,)",,,
"SparseFiles","definition","TRUE","Warning","Sparse files","Remove sparse files: @{SparseFiles}","DefaultRuleSet, Snapshots, Backup, DataIntegrity","If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size.","https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/","Database","Windows Linux",,,"[11.0,)",,,
"TableNoIndex","definition","TRUE","Warning","Tables without indexes","Review @{TableName} table and create reasonable indexes","DefaultRuleset, Indexes, Performance","Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TableNoClusteredIndex","definition","TRUE","Warning","Tables without clustered indexes","Review @{TableName} table and create clustered index","DefaultRuleset, Indexes, Performance","Tables without clustered indexes are called heaps. Theyre scattered on disk anywhere that SQL Server can find a spot, and theyre not stored in any order whatsoever. This can make for really fast inserts SQL Server can just throw the data down but slow selects, updates, and deletes.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TablePSAlign","definition","TRUE","Warning","Table index not aligned with PS","Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema","DefaultRuleset, Indexes, Performance","Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index.","https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"LoginNoPassword","definition","TRUE","Warning","Logins with no passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"LoginEqPassword","definition","False","Warning","Logins with passwords that are same as login names","Review logins with password equals to login: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SystemHealth","definition","TRUE","Warning","System Health important messages","Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago","DefaultRuleset, XEvent, SystemHealth, Performance","The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"RarelyUsedIndex","definition","TRUE","Warning","Rarely used index","Revise rarely used index @{IndexName}","DefaultRuleset, Indexes, Performance","Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UnusedIndex","definition","TRUE","Warning","Unused index","Revise unused @{IndexName} index","DefaultRuleset, Index, Performance","Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"SkewedCompatibilityLevel","definition","TRUE","Warning","Database with skewed compatibility level","Update database compatibility level. Current level is @{CompatibilityLevel}","DefaultRuleset, CompatibilityLevel, Security, Performance, UpdateIssues","Some databases may have a compatibility level lower than the allowed level by the Database Engine.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level","Database","Windows Linux",,,"[11.0,)",,,
"PendingDiskIORequests","definition","TRUE","Warning","Pending disk I/O requests","Solve I/O related issues to get rid of pending requests","DefaultRuleset, IO, Performance","A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment.","https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations","Server","Windows Linux",,,"[11.0,)",,,
"MaxDOP","definition","TRUE","Warning","MaxDOP should be less or equal to number of CPUs","Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDOPFewNUMA","definition","TRUE","Warning","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0, 13.0)",,,
"DbIntegrity","definition","TRUE","Warning","Database Integrity Checks","Run 'DBCC CHECKDB' command checks","DefaultRuleset, DBCC, Performance, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation.","https://msdn.microsoft.com/library/ms176064.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: tempdb",,
"DirectCatalogUpdates","definition","TRUE","Warning","Direct Catalog Updates","Avoid using direct catalog update feature","DefaultRuleset, DBCC, Deprecated","The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: tempdb",,
"DataPurityCheck","definition","TRUE","Warning","Data Purity Check","Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command","DefaultRuleset, DBCC, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues.","http://support.microsoft.com/kb/923247","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"StatSamplingRate","definition","TRUE","Warning","Statistics sampling rate","Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName}","DefaultRuleset, Performance, Statistics","For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results.","https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.25",
"IndexFragmentation","definition","TRUE","Warning","Index Fragmentation","Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}%","DefaultRuleset, Index, Performance","The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.","https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb","5",
"HighCPUUsage","definition","TRUE","Medium","High CPU usage on server","Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}%","DefaultRuleset, Performance, CPU","Keeping CPU usage rates within normal ranges is vital for servers hosting SQL Server instances. A continually high rate of CPU usage may indicate the need to upgrade the CPU or add multiple processors. Alternatively, a high CPU usage rate may indicate a poorly tuned or designed application. Optimizing the application can lower CPU utilization.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,"70",
"ReplErrors24H","definition","TRUE","Medium","Replication errors within last 24 hours","Review '@{publisher_db}' database replication errors for publications: @{publication}","DefaultRuleset, Replication","This check searches for errors in distribution database agent's history table for the last 24 hours.","https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity10","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 10","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity16","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 16","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity17","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 17","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity19","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 19","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity20","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 20","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity21","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 21","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity22","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 22","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity23","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 23","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity24","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 24","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"WeakPassword","definition","TRUE","Medium","SQL logins have weak passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Some SQL logins have weak passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities.","https://docs.microsoft.com/sql/relational-databases/security/strong-passwords","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"VLFCount","definition","TRUE","Medium","VLF count","Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId}","DefaultRuleset, Backup, Performance","The SQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. The Database Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. The Database Engine tries to maintain a small number of virtual files. The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. The size or number of virtual log files cannot be configured or set by administrators. If the log files grow to a large size in many small increments, they will have many virtual log files. This can slow down database startup and also log backup and restore operations. Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"50",
"TF8015","definition","TRUE","Medium","TF 8015 disables auto-detection and NUMA setup","Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, CPU, NUMA","SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups.","https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044","Server","Windows Linux",,"OnPremises","[11.0,11.0.3349)",,,
"TF8032","definition","TRUE","Medium","TF 8032 reverts cache limit parameters to SQL Server 2005 RTM","Disable trace flag 8032","DefaultRuleset, TraceFlag, Performance","Trace Flag 8032 reverts the cache limit parameters to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP.",,"Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF8744","definition","TRUE","Medium","TF 8744 disables pre-fetching for Nested Loop operator","Disable trace flag 8744","DefaultRuleset, TraceFlag, Performance","Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator.","https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa","Server","Windows Linux",,"OnPremises","[11.0,12.0)",,,
"TF9347","definition","TRUE","Medium","TF 9347 disables batch mode for sort operator","Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"TF9349","definition","TRUE","Medium","TF 9349 disables batch mode for top N sort operator","Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"TF9389","definition","TRUE","Medium","TF 9389 enables dynamic memory grant for batch mode operators","Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, TempDB","Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,13.0)",,,
"TF9476","definition","TRUE","Medium","TF 9476 causes SQL Server to generate plan using Simple Containment assumption","Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, QueryOptimizer","Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"TF9481","definition","TRUE","Medium","TF 9481 enables Legacy CE model","Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database.",,"Server","Windows Linux",,"OnPremises","[11.0,12.0)",,,
"TF10204","definition","TRUE","Medium","TF 10204 disables merge/recompress","Disable trace flag 10204. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, ColumnStore","Trace flag 10204 disables merge/recompress during columnstore index reorganization. In SQL Server 2016 (13.x), when a columnstore index is reorganized, there is new functionality to automatically merge any small compressed rowgroups into larger compressed rowgroups, as well as recompressing any rowgroups that have a large number of deleted rows.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"SPNaming","definition","TRUE","Medium","Stored procedure naming","Rename the following stored procedures to eliminate 'sp_' prefix: @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the sp_ prefix designates system stored procedures. If you use that prefix for your stored procedures, the name of your procedure might conflict with the name of a system stored procedure that will be created in the future. If such a conflict occurs, your application might break if your application refers to the procedure without qualifying the reference by schema. In this situation, the name will bind to the system procedure instead of to your procedure.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ObjectNamingSpecialChar","definition","TRUE","Low","Special characters in object names","Rename the following objects to eliminate special characters: @{ObjectName}","DefaultRuleset, Naming","If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ColumnNamingSpecialChar","definition","TRUE","Low","Special characters in column names","Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{ObjectName}","DefaultRuleset, Naming","Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FnNaming","definition","TRUE","Medium","User function naming","Rename the following functions to eliminate 'fn_ prefix': @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the fn_ prefix designates system functions. If you use that prefix for your functions, the name of your function might conflict with the name of a system function that will be created in the future. If such a conflict occurs, your application might break if your application refers to the function without qualifying the reference by schema. In this situation, the name will bind to the system function instead of to your function.","https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ObjectNamingResKeywords","definition","TRUE","Low","Object names contain reserved keywords","Rename the following objects to eliminate reserved keywords: @{ObjectName}","DefaultRuleset, Naming","Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers.","https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"DeprFeaturesInModules","definition","TRUE","Low","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"DeprFeaturesInModules","override","False","Warning",,,"",,,"Database","Windows Linux","AzureSQL",,"[11.0,)",,,
"DeprFeaturesInJobs","definition","TRUE","Low","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"DeprFeaturesInJobs","override","False","Warning",,,"",,,"Server","Windows Linux","AzureSQL","OnPremises, ManagedInstance","[11.0,)",,,
"NUMANodeSingleCPU","definition","TRUE","Medium","Single CPU assigned to NUMA node","Assign additional CPUs to NUMA nodes with only one CPU","DefaultRuleset, NUMA, CPU, Memory, Performance","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,,
"NUMANodeNoCPU","definition","TRUE","Medium","NUMA nodes without CPUs","Assign CPUs to each NUMA node","DefaultRuleset, NUMA, Performance, CPU, Memory","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,,
"IndexKeyGuid","definition","TRUE","Low","Guid in clustered index key column","Remove GUIDs in clustered indexes keys: @{IndexName}","DefaultRuleset, Indexes, Performance","A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects.","https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"IndexesLargeKeys","definition","TRUE","Low","Indexes keys with more than 900 bytes","Remove keys larger than 900 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,13.0)","NOT: master model msdb tempdb",,
"IndexesLargeKeysNonClust","definition","TRUE","Low","NonClustered indexes keys with more than 1700 bytes","Remove keys larger than 1700 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master model msdb tempdb",,
"IndexesLargeKeysClust","definition","TRUE","Low","Clustered indexes keys with more than 900 bytes","Remove keys larger than 900 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master model msdb tempdb",,
"DisabledIndexes","definition","TRUE","Medium","Disabled indexes exist","Remove or enable disabled index: @{FullName}","DefaultRuleset, Indexes, Performance","If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them.","https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"IndexesFillFactor","definition","TRUE","Low","Index fill factor is below 80%","Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent","DefaultRuleset, Indexes, Performance","The fill-factor option is provided for fine-tuning index data storage and performance. When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index.","https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"NonUniqueClusterIndex","definition","TRUE","Medium","Non-unique clustered indexes","Review non-unique @{FullName} clustered index","DefaultRuleset, Indexes, Performance","Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. Thats why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive.","https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"SuspectPages","definition","TRUE","High","Suspect pages found","Run 'DBCC CHECKDB' to verify affected database. Suspect pages were found: @{EventType}","DefaultRuleSet, Pages, DataIntegrity","The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary.","https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server","Database","Windows Linux",,,"[11.0,)",,,
"SparseFiles","definition","TRUE","Low","Sparse files","Remove sparse files: @{SparseFiles}","DefaultRuleSet, Snapshots, Backup, DataIntegrity","If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size.","https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/","Database","Windows Linux",,,"[11.0,)",,,
"TableNoIndex","definition","TRUE","Low","Tables without indexes","Review @{TableName} table and create reasonable indexes","DefaultRuleset, Indexes, Performance","Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TableNoClusteredIndex","definition","TRUE","Low","Tables without clustered indexes","Review @{TableName} table and create clustered index","DefaultRuleset, Indexes, Performance","Tables without clustered indexes are called heaps. Theyre scattered on disk anywhere that SQL Server can find a spot, and theyre not stored in any order whatsoever. This can make for really fast inserts SQL Server can just throw the data down but slow selects, updates, and deletes.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TablePSAlign","definition","TRUE","Low","Table index not aligned with PS","Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema","DefaultRuleset, Indexes, Performance","Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index.","https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"LoginNoPassword","definition","False","Warning","SQL logins have no passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"LoginEqPassword","definition","False","Warning","Passwords and SQL login names are the same","Review logins that have passwords equal to SQL login names: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use passwords that are different from your SQL login names.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SystemHealth","definition","TRUE","High","System Health important messages","Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago","DefaultRuleset, XEvent, SystemHealth, Performance","The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"RarelyUsedIndex","definition","TRUE","Low","Rarely used index","Revise rarely used index @{IndexName}","DefaultRuleset, Indexes, Performance","Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UnusedIndex","definition","TRUE","Medium","Unused index","Revise unused @{IndexName} index on @{TableName} table","DefaultRuleset, Index, Performance","Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"SkewedCompatibilityLevel","definition","TRUE","Low","Database with skewed compatibility level","Update database compatibility level. Current level is @{CompatibilityLevel}","DefaultRuleset, CompatibilityLevel, Security, Performance, UpdateIssues","Some databases may have a compatibility level lower than the allowed level by the Database Engine.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level","Database","Windows Linux",,,"[11.0,)",,,
"PendingDiskIORequests","definition","TRUE","Medium","Pending disk I/O requests","Solve I/O related issues to get rid of pending requests","DefaultRuleset, IO, Performance","A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment.","https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations","Server","Windows Linux",,,"[11.0,)",,,
"MaxDOP","definition","TRUE","Medium","MaxDOP should be less or equal to number of CPUs","Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDOPFewNUMA","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0, 13.0)",,,
"DbIntegrity","definition","TRUE","Medium","Database Integrity Checks","Run 'DBCC CHECKDB' command checks","DefaultRuleset, DBCC, Performance, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation.","https://msdn.microsoft.com/library/ms176064.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: tempdb",,
"DirectCatalogUpdates","definition","TRUE","Low","Direct Catalog Updates","Avoid using direct catalog update feature","DefaultRuleset, DBCC, Deprecated","The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: tempdb",,
"DataPurityCheck","definition","TRUE","Low","Data Purity Check","Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command","DefaultRuleset, DBCC, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues.","http://support.microsoft.com/kb/923247","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"StatSamplingRate","definition","TRUE","Low","Statistics sampling rate","Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName}","DefaultRuleset, Performance, Statistics","For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results.","https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.25",
"IndexFragmentation","definition","TRUE","Medium","Index Fragmentation","Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}%","DefaultRuleset, Index, Performance","The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.","https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb","5",
"IndexFragmentation","override","TRUE","Warning",,,"",,,,,,,"[12.0,)",,,
"XTPHashAvgChainBuckets","definition","TRUE","Warning","High avg chain length and empty buckets","Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in key values","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooManyBuckets","definition","TRUE","Warning","Too many buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which wastes memory and marginally slows down full table scans","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooFewBuckets","definition","TRUE","Warning","Too few buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which leads to chaining records","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPRangeIXHealth","definition","TRUE","Warning","NonClustered index retry amount","Review @{IndexFullName} index as its retry count is over @{RetryCountPct}% of total, which indicates possible concurrency issues","DefaultRuleset, Index, Performance, XTP","When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"TF6533Misuse","definition","TRUE","Warning","'STRelate' and 'STAsBinary' functions unexpected results due to TF 6533","Disable trace flag 6533 to avoid unexpected results of 'STRelate' and 'STAsBinary' functions","DefaultRuleset, TraceFlag, Performance, TF6533","The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions.","https://support.microsoft.com/help/3107399","Database","Windows",,"OnPremises","[11.0.6020, 11.0.6518)","NOT: master model msdb tempdb",,
"UntrustedConstraints","definition","TRUE","Warning","Untrusted constraints","Execute 'ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name>' statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity","DefaultRuleset, Performance, DataIntegrity","If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them.","https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"PercentAutogrows","definition","TRUE","Warning","Database files have growth ratio in percentage","Do not use ""File Growth In Percent"" for Autogrowth setting. Affected files: @{fileName} have growth ratio set in percentage","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master model msdb tempdb",,
"XTPHashAvgChainBuckets","definition","TRUE","Medium","High avg chain length and empty buckets","Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in key values","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooManyBuckets","definition","TRUE","Low","Too many buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which wastes memory and marginally slows down full table scans","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooFewBuckets","definition","TRUE","Medium","Too few buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which leads to chaining records","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPRangeIXHealth","definition","TRUE","Low","NonClustered index retry amount","Review @{IndexFullName} index as its retry count is over @{RetryCountPct}% of total, which indicates possible concurrency issues","DefaultRuleset, Index, Performance, XTP","When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"TF6533Misuse","definition","TRUE","Low","'STRelate' and 'STAsBinary' functions unexpected results due to TF 6533","Disable trace flag 6533 to avoid unexpected results of 'STRelate' and 'STAsBinary' functions","DefaultRuleset, TraceFlag, Performance, TF6533","The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions.","https://support.microsoft.com/help/3107399","Database","Windows Linux",,"OnPremises","[11.0.6020, 11.0.6518)","NOT: master model msdb tempdb",,
"UntrustedConstraints","definition","TRUE","Low","Untrusted constraints","Execute 'ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name>' statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity","DefaultRuleset, Performance, DataIntegrity","If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them.","https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"PercentAutogrows","definition","TRUE","Low","Database files have growth ratio in percentage","Do not use ""File Growth In Percent"" for Autogrowth setting. Affected files: @{fileName} have growth ratio set in percentage","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master model msdb tempdb",,
"StatsUpdate","definition","TRUE","Warning","Statistics need to be updated","Update stats in @{TableName} table to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"500",
"AdHocQueriesOff","definition","TRUE","Warning","Option 'ad hoc distributed queries' should be disabled","Disable 'ad hoc distributed queries' option","DefaultRuleset, Configuration, Security","Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login.","https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AffinityMasksOverlap","definition","TRUE","Warning","Affinity Mask and Affinity I/O Mask overlapping","Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask}","DefaultRuleset, Configuration, Performance","Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotRecommended","definition","TRUE","Warning","'SQL Server Agent' service uses non-recommended account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AdHocQueriesOff","definition","TRUE","Low","Option 'ad hoc distributed queries' should be disabled","Disable 'ad hoc distributed queries' option","DefaultRuleset, Configuration, Security","Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login.","https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AffinityMasksOverlap","definition","TRUE","Low","Affinity Mask and Affinity I/O Mask overlapping","Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask}","DefaultRuleset, Configuration, Performance","Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotRecommended","definition","TRUE","Low","'SQL Server Agent' service uses non-recommended account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotRecommended","override","False","Warning",,,"",,,,,,"Express",,,,
"AgentSvcAccNotSupported","definition","TRUE","Warning","'SQL Server Agent' service uses not supported account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotSupported","definition","TRUE","Low","'SQL Server Agent' service uses not supported account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotSupported","override","False","Warning",,,"",,,,,,"Express",,,,
"AgentSvcAccSame","definition","TRUE","Warning","'SQL Server Agent' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Agent' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::SQLAgent.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccSame","definition","TRUE","Low","'SQL Server Agent' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Agent' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::SQLAgent.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccSame","override","False","Warning",,,"",,,,,,"Express",,,,
"AgentSvcStoped","definition","TRUE","Warning","'SQL Server Agent' service is stopped","Run 'SQL Server Agent' service","DefaultRuleset, Configuration","The 'SQL Server Agent' service executes jobs, monitors SQL Servers, fires alerts and enables automation for some administrative tasks.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcStoped","definition","TRUE","Low","'SQL Server Agent' service is stopped","Run 'SQL Server Agent' service","DefaultRuleset, Configuration","The 'SQL Server Agent' service executes jobs, monitors SQL Servers, fires alerts and enables automation for some administrative tasks.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcStoped","override","False","Warning",,,"",,,,,,"Express",,,,
"AutoSoftNUMAOn","definition","TRUE","Warning","Auto Soft NUMA should be enabled","Turn 'automatic soft-NUMA disabled' option on to avoid inefficient allocation of cores between NUMA nodes","DefaultRuleset, Configuration, NUMA","Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts.","https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"AzSqlVmSize","definition","TRUE","Warning","VM size is not memory-optimized","Use memory optimized virtual machine sizes for the best performance of SQL Server workloads","DefaultRuleset, SqlOnVm, Azure, Performance","Memory optimized VM sizes offer a high memory-to-CPU ratio that is great for relational database servers. The DSv2 11-15, Edsv4 series, the M-, and the Mv2- series offer the optimal memory-to-vCore ratio required for OLTP workloads. Both M series VMs offer the highest memory-to-vCore ratio required for mission critical workloads and is also ideal for data warehouse workloads.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices","Server",,"AzureSQL",,,,,
"BlockingChains","definition","TRUE","Warning","Blocking chains","Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''}","DefaultRuleset, Statistics","Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql","Database","Windows Linux",,"OnPremises","[11.0,)",,,
"BlockProcThreshNotRecommend","definition","TRUE","Warning","Blocked process threshold is set to recommended value","Increase or disable blocked process threshold option. Current value is @{block_threshold}","DefaultRuleset, Configuration","This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold","Server","Windows Linux",,"OnPremises","[11.0,)",,"5",
"BrowserSvcAccSame","definition","TRUE","Warning","'SQL Server Browser' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Browser' and 'SQL Server Database Engine'. Now both services use '@{attr::service::SQLBrowser.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Browser' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"BrowserSvcStoped","definition","TRUE","Warning","'SQL Server Browser' service is stopped","Run 'SQL Server Browser' service","DefaultRuleset, Configuration","The 'SQL Server Browser' service is a name resolution service that provides SQL Server connection information to client computers.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"CrossDBOwnershipOff","definition","TRUE","Warning","Option 'cross db ownership chaining' should be disabled","Disable 'cross db ownership chaining' option","DefaultRuleset, Configuration, Security","Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DefaultTraceOff","definition","TRUE","Warning","Default trace is enabled","Enable 'default trace enabled' option to get troubleshooting assistance","DefaultRuleset, Configuration","Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. ","https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DiskFragmentationAnalysis","definition","TRUE","Warning","Disk fragmentation analysis","Defragment volume '@{Output.Name}' with physical fragmentation","DefaultRuleset, Configuration","If you do not defragment your hard disk, the operating system may have to go to several physical locations on the disk to retrieve the database file, making file access slower. To get information about the fragmentation level, this check requires the destination SQL Server to be running under the sysadmin account.","https://support.microsoft.com/help/3195161/defragmenting-sql-server-database-disk-drives","Server","Windows",,"OnPremises","[11.0,)",,,
"DiskPartitionAlignment","definition","TRUE","Warning","Disk Partition alignment","Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset}","DefaultRuleset, Performance, Storage","Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100)","Server","Windows",,"OnPremises","[11.0,)",,"65536",
"DtsSvcAccSame","definition","TRUE","Warning","'Integration Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Integration Services' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::MsDtsServer.account}' account","DefaultRuleset, Configuration","Running the 'Integration Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"DtsSvcStoped","definition","TRUE","Warning","'Integration Services' service is stopped","Run 'Integration Services' service","DefaultRuleset, Configuration","The 'Integration Services' service provides management support for Integration Services package storage and execution.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"ErrorLogSize","definition","TRUE","Warning","Error log file size is too big","Cycle error log files or revise error log settings. Current error log file size is more than @{threshold} MB.","DefaultRuleset, Configuration, Performance","Cycling error log files makes it easier to read the error log.","https://docs.microsoft.com/sql/tools/configuration-manager/viewing-the-sql-server-error-log","Server","Windows Linux",,"OnPremises","[11.0,)",,"50",
"FullTextServiceLoadOSResources","definition","TRUE","Warning","Full-text search option 'load_os_resources' set to default","Set full-text search option 'load_os_resources' to @{defaultLoadOSResources}","DefaultRuleset, Configuration","The full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FullTextServiceVerifySignature","definition","TRUE","Warning","Full-text search option 'verify_signature' set to default","Set full-text search option 'load_os_resources' to @{defaultVerifySignature}","DefaultRuleset, Configuration, Security","The full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FullTextSvcAccNotRecommended","definition","TRUE","Warning","'Full-text search' service uses non-recommended account","Use another account to run 'Full-text search' service. Current account '@{attr::service::MSSQLFDLauncher.account}' is not recommended","DefaultRuleset, Configuration","Running the 'Full-text search' service under the 'NT AUTHORITY\SYSTEM' account is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"FullTextSvcAccSame","definition","TRUE","Warning","'Full-text search' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Full-text search' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSSQLFDLauncher.account}' account","DefaultRuleset, Configuration","Running the 'Full-text search' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"FullTextSvcStoped","definition","TRUE","Warning","'Full-text search' service is stopped","Run 'Full-text search' service","DefaultRuleset, Configuration","The 'Full-text search' service quickly creates full-text indexes on content and properties of structured and semistructured data to provide document filtering and word-breaking for SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"HPLogicalProcessor","definition","TRUE","Warning","HP Logical Processor issue","Update server BIOS to the latest version. It may be affected by the HP Logical Processor issue ","DefaultRuleset, Performance","HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use.","https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594","Server","Windows",,"OnPremises","[11.0,)",,,
"IndexCreateMemory","definition","TRUE","Warning","'index create memory' should be greater than 'min memory per query'","Set 'index create memory' to 0 or make it greater than 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB. Current 'min memory per query' is @{min_memory_per_query} KB","DefaultRuleset, Configuration, IndexCreateMemory","The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LightweightPoolingOn","definition","TRUE","Warning","Lightweight pooling option disabled","Disable 'lightweight pooling' option as fiber mode scheduling can decrease performance","DefaultRuleset, Configuration, Performance","The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode.","https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LocksOptionNotDefault","definition","TRUE","Warning","Option 'locks' should be set to default","Set 'locks' option to @{recommended_max_lock_number}. Current value is @{locks}","DefaultRuleset, Configuration, Performance","The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDOP1NUMA","definition","TRUE","Warning","MAXDOP set in accordance with CPU count","Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors}","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDopFewNumaLess16","definition","TRUE","Warning","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"MaxDopFewNumaOver16","definition","TRUE","Warning","MAXDOP set in accordance to CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be half the number of logical processors per NUMA node with maximum value of 16","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"MaxDopFewNumaOver8","definition","TRUE","Warning","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be equal to 8","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0, 13.0)",,,
"MaxMemory","definition","TRUE","Warning","Max allowed memory ","Set 'max server memory' value to @{recommended:N0} MB or less to avoid detrimental memory pressure. Current 'max server memory' value is @{max_server_memory:N0}, which is greater than recommended","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value too high can cause a single instance of SQL Server to compete for memory with other SQL Server instances hosted on the same machine. However, setting this value too low could cause significant memory pressure and performance problems.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,"2147483647"
"AutoSoftNUMAOn","definition","TRUE","Low","Auto Soft NUMA should be enabled","Turn 'automatic soft-NUMA disabled' option on to avoid inefficient allocation of cores between NUMA nodes","DefaultRuleset, Configuration, NUMA","Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts.","https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"AzSqlVmSize","definition","TRUE","Information","VM size is not memory-optimized","Use memory optimized virtual machine sizes for the best performance of SQL Server workloads","DefaultRuleset, SqlOnVm, Azure, Performance","Memory optimized VM sizes offer a high memory-to-CPU ratio that is great for relational database servers. The DSv2 11-15, Edsv4 series, the M-, and the Mv2- series offer the optimal memory-to-vCore ratio required for OLTP workloads. Both M series VMs offer the highest memory-to-vCore ratio required for mission critical workloads and is also ideal for data warehouse workloads.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices","Server",,"AzureSQL",,,,,
"BlockingChains","definition","TRUE","Low","Blocking chains","Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''}","DefaultRuleset, Statistics","Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql","Database","Windows Linux",,"OnPremises","[11.0,)",,,
"BlockProcThreshNotRecommend","definition","TRUE","Low","Blocked process threshold is set to recommended value","Increase or disable blocked process threshold option. Current value is @{block_threshold}","DefaultRuleset, Configuration","This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold","Server","Windows Linux",,"OnPremises","[11.0,)",,"5",
"BrowserSvcAccSame","definition","TRUE","Low","'SQL Server Browser' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Browser' and 'SQL Server Database Engine'. Now both services use '@{attr::service::SQLBrowser.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Browser' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"BrowserSvcStoped","definition","TRUE","Low","'SQL Server Browser' service is stopped","Run 'SQL Server Browser' service","DefaultRuleset, Configuration","The 'SQL Server Browser' service is a name resolution service that provides SQL Server connection information to client computers.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"CrossDBOwnershipOff","definition","TRUE","Low","Option 'cross db ownership chaining' should be disabled","Disable 'cross db ownership chaining' option","DefaultRuleset, Configuration, Security","Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DefaultTraceOff","definition","TRUE","Low","Default trace is enabled","Enable 'default trace enabled' option to get troubleshooting assistance","DefaultRuleset, Configuration","Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. ","https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DiskFragmentationAnalysis","definition","TRUE","Low","Disk fragmentation analysis","Defragment volume '@{Output.Name}' with physical fragmentation","DefaultRuleset, Configuration","If you do not defragment your hard disk, the operating system may have to go to several physical locations on the disk to retrieve the database file, making file access slower. To get information about the fragmentation level, this check requires the destination SQL Server to be running under the sysadmin account.","https://support.microsoft.com/help/3195161/defragmenting-sql-server-database-disk-drives","Server","Windows",,"OnPremises","[11.0,)",,,
"DiskPartitionAlignment","definition","TRUE","Low","Disk Partition alignment","Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset}","DefaultRuleset, Performance, Storage","Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100)","Server","Windows",,"OnPremises","[11.0,)",,"65536",
"DtsSvcAccSame","definition","TRUE","Low","'Integration Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Integration Services' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::MsDtsServer.account}' account","DefaultRuleset, Configuration","Running the 'Integration Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"DtsSvcStoped","definition","TRUE","Low","'Integration Services' service is stopped","Run 'Integration Services' service","DefaultRuleset, Configuration","The 'Integration Services' service provides management support for Integration Services package storage and execution.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"ErrorLogSize","definition","TRUE","Low","Error log file size is too big","Cycle error log files or revise error log settings. Current error log file size is more than @{threshold} MB.","DefaultRuleset, Configuration, Performance","Cycling error log files makes it easier to read the error log.","https://docs.microsoft.com/sql/tools/configuration-manager/viewing-the-sql-server-error-log","Server","Windows Linux",,"OnPremises","[11.0,)",,"50",
"FullTextServiceLoadOSResources","definition","TRUE","Low","Full-text search option 'load_os_resources' set to default","Set full-text search option 'load_os_resources' to @{defaultLoadOSResources}","DefaultRuleset, Configuration","The full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FullTextServiceVerifySignature","definition","TRUE","Low","Full-text search option 'verify_signature' set to default","Set full-text search option 'load_os_resources' to @{defaultVerifySignature}","DefaultRuleset, Configuration, Security","The full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FullTextSvcAccNotRecommended","definition","TRUE","Low","'Full-text search' service uses non-recommended account","Use another account to run 'Full-text search' service. Current account '@{attr::service::MSSQLFDLauncher.account}' is not recommended","DefaultRuleset, Configuration","Running the 'Full-text search' service under the 'NT AUTHORITY\SYSTEM' account is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"FullTextSvcAccSame","definition","TRUE","Low","'Full-text search' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Full-text search' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSSQLFDLauncher.account}' account","DefaultRuleset, Configuration","Running the 'Full-text search' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"FullTextSvcStoped","definition","TRUE","Low","'Full-text search' service is stopped","Run 'Full-text search' service","DefaultRuleset, Configuration","The 'Full-text search' service quickly creates full-text indexes on content and properties of structured and semistructured data to provide document filtering and word-breaking for SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"HPLogicalProcessor","definition","TRUE","Low","HP Logical Processor issue","Update server BIOS to the latest version. It may be affected by the HP Logical Processor issue ","DefaultRuleset, Performance","HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use.","https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594","Server","Windows",,"OnPremises","[11.0,)",,,
"IndexCreateMemory","definition","TRUE","Low","'index create memory' should be greater than 'min memory per query'","Set 'index create memory' to 0 or make it greater than 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB. Current 'min memory per query' is @{min_memory_per_query} KB","DefaultRuleset, Configuration, IndexCreateMemory","The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LightweightPoolingOn","definition","TRUE","Low","Lightweight pooling option disabled","Disable 'lightweight pooling' option as fiber mode scheduling can decrease performance","DefaultRuleset, Configuration, Performance","The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode.","https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LocksOptionNotDefault","definition","TRUE","Low","Option 'locks' should be set to default","Set 'locks' option to @{recommended_max_lock_number}. Current value is @{locks}","DefaultRuleset, Configuration, Performance","The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDOP1NUMA","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors}","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDopFewNumaLess16","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"MaxDopFewNumaOver16","definition","TRUE","Low","MAXDOP set in accordance to CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be half the number of logical processors per NUMA node with maximum value of 16","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"MaxDopFewNumaOver8","definition","TRUE","Medium","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be equal to 8","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0, 13.0)",,,
"MaxMemory","definition","TRUE","Low","Max allowed memory ","Set 'max server memory' value to @{recommended:N0} MB or less to avoid detrimental memory pressure. Current 'max server memory' value is @{max_server_memory:N0}, which is greater than recommended","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value too high can cause a single instance of SQL Server to compete for memory with other SQL Server instances hosted on the same machine. However, setting this value too low could cause significant memory pressure and performance problems.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemory","override","TRUE","Warning",,,"",,,,,,"Express",,,,"1410"
"MaxMemory","override","TRUE","Warning",,,"",,,,,,"Standard",,,,"131072"
"MaxMemorySystem","definition","TRUE","Warning","Max server memory exceeds system memory","Set 'max server memory' to @{recommended:N0} MB or less to avoid detrimental memory pressure. System memory of @{sysmem:N0} MB is not sufficient for current 'max server memory' setting of @{max_server_memory:N0} MB","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value higher than system memory can cause SQL Server to compete for memory with the operating system and processes running on the same machine.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemorySystem","definition","TRUE","Low","Max server memory exceeds system memory","Set 'max server memory' to @{recommended:N0} MB or less to avoid detrimental memory pressure. System memory of @{sysmem:N0} MB is not sufficient for current 'max server memory' setting of @{max_server_memory:N0} MB","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value higher than system memory can cause SQL Server to compete for memory with the operating system and processes running on the same machine.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemorySystem","override","TRUE","Warning",,,"",,,,,,"Express",,,,"1410"
"MaxMemorySystem","override","TRUE","Warning",,,"",,,,,,"Standard",,,,"131072"
"MinMemoryPerQuery","definition","TRUE","Warning","Option 'min memory per query' set to default","Set 'min memory per query' option to @{recommended_min_memory_per_query} KB. Current value is '@{min_memory_per_query}'","DefaultRuleset, Configuration, Memory, Performance","The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"NetworkPacketSize","definition","TRUE","Warning","Option 'network packet size' set to default","Set 'network packet size' option to @{recommended_network_packet_size} bytes. Current value is @{network_packet_size}","DefaultRuleset, Configuration, Network","The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"NtfsBlockSizeNotFormatted","definition","TRUE","Warning","NTFS block size in volumes with database files <> 64KB","Set allocation unit size on volume '@{masterFilesVolumeName}' to 64 KB. Current size is @{Output.BlockSize} bytes","DefaultRuleset, Performance, Configuration, NTFS","A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB.","https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server","Server","Windows",,"OnPremises","[11.0,)",,,
"OlapSvcAccSame","definition","TRUE","Warning","'Analysis Services' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account","DefaultRuleset, Configuration","Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"OlapSvcStoped","definition","TRUE","Warning","'Analysis Services' service is stopped","Run 'Analysis Services' service","DefaultRuleset, Configuration","The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"OleAutomationProceduresOn","definition","TRUE","Warning","Option 'Ole Automation Procedures' set to default","Disable 'Ole Automation Procedures' option to avoid security risks","DefaultRuleset, Configuration, Security","Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value).","https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"PageFileAutoManaged","definition","TRUE","Warning","Page file is not automatically managed","Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}'","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth.","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileAutoManagedAllDrives","definition","TRUE","Warning","Page file is not automatically managed","Disable 'Automatically manage paging file size for all drives' option","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. ","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileLess10FreeSpace","definition","TRUE","Warning","Insufficient page file free space","Revise page file settings. Less than 10% of page file is available","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows Linux",,"OnPremises","[11.0,)",,"0.1",
"PageFileNotConfigured","definition","TRUE","Warning","Page file not configured","Create page file on server","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileOut","definition","TRUE","Warning","Memory paged out","Revise LPIM settings. Part of SQL Server process memory has been paged out","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the ""Dynamic memory management"" topic and the ""Server memory options"" topic in SQL Server Books Online.","https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"PowerPlanSchemeNotRecommended","definition","TRUE","Warning","Power plan is High Performance","Switch server to High Performance power plan","DefaultRuleset, Configuration, Performance","In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution.","https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan","Server","Windows",,"OnPremises","[11.0,)",,,
"PriorityBoostOn","definition","TRUE","Critical","Option 'priority boost' set to default","Set 'priority boost' option to default value","DefaultRuleset, Configuration, Performance","The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"QueryWaitNotDefault","definition","TRUE","Critical","Option 'query wait' set to default","Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries","DefaultRuleset, Configuration","Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RecoveryIntervalOn","definition","TRUE","Warning","Option 'recovery interval' set to default","Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval}","DefaultRuleset, Configuration, Performance","The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RemoteDacClusterOn","definition","TRUE","Warning","Remote admin connections enabled on cluster (DAC)","Enable 'remote admin connections' option","DefaultRuleset, Configuration","SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.","https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RemoteQueryTimeout","definition","TRUE","Warning","Option 'remote query timeout' set to default","Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout}","DefaultRuleset, Configuration","The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RsSvcAccSame","definition","TRUE","Warning","'Reporting Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account","DefaultRuleset, Configuration","Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"RsSvcStoped","definition","TRUE","Warning","'Reporting Services' service is stopped","Run 'Reporting Services' service","DefaultRuleset, Configuration","'The Reporting Services' service manages, executes, creates, schedules and delivers reports.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"ScanStartupProcs","definition","TRUE","Warning","Option 'scan for startup procs' disabled on replication servers","Disable 'scan for startup procs' option for servers that participate in replication","DefaultRuleset, Configuration","Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"SqlSvcAccNotRecommended","definition","TRUE","Warning","'SQL Server Database Engine' service uses non-recommended account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"SqlSvcAccNotSupported","definition","TRUE","Warning","'SQL Server Database Engine' service uses not supported account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"ThreadExhaustionCPUBound","definition","TRUE","Warning","Worker thread exhaustion on CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}'","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"ThreadExhaustionNotCPUBound","definition","TRUE","Warning","Possible worker thread exhaustion on non-CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}')","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"ThresholdForParallelism","definition","TRUE","Warning","Option 'cost threshold for parallelism' set to default","Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism}","DefaultRuleset, Configuration, Performance","The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"WorkerThreadsLargeX64","definition","TRUE","Warning","Option 'max worker threads' set to recommended value on x64 system","Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"WorkerThreadsLargeX86","definition","TRUE","Warning","Option 'max worker threads' set to recommended value on x86 system","Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"XpCmdShellOn","definition","TRUE","Warning","Option 'xp_cmdshell' is disabled","Disable 'xp_cmdshell' as it exposes to security risks","DefaultRuleset, Configuration","The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. ","https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MinMemoryPerQuery","definition","TRUE","Low","Option 'min memory per query' set to default","Set 'min memory per query' option to @{recommended_min_memory_per_query} KB. Current value is '@{min_memory_per_query}'","DefaultRuleset, Configuration, Memory, Performance","The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"NetworkPacketSize","definition","TRUE","Low","Option 'network packet size' set to default","Set 'network packet size' option to @{recommended_network_packet_size} bytes. Current value is @{network_packet_size}","DefaultRuleset, Configuration, Network","The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"NtfsBlockSizeNotFormatted","definition","TRUE","Low","NTFS block size in volumes with database files <> 64KB","Set allocation unit size on volume '@{volume_mount_point}' to 64 KB. Current size is @{Output.BlockSize} bytes","DefaultRuleset, Performance, Configuration, NTFS","A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB.","https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server","Server","Windows",,"OnPremises","[11.0,)",,,
"NtfsBlockSizeNotFormatted","override","TRUE","Medium",,,"",,,,,"AzureSQL",,,,,
"OlapSvcAccSame","definition","TRUE","Low","'Analysis Services' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account","DefaultRuleset, Configuration","Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"OlapSvcStoped","definition","TRUE","Low","'Analysis Services' service is stopped","Run 'Analysis Services' service","DefaultRuleset, Configuration","The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"OleAutomationProceduresOn","definition","TRUE","Low","Option 'Ole Automation Procedures' set to default","Disable 'Ole Automation Procedures' option to avoid security risks","DefaultRuleset, Configuration, Security","Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value).","https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"PageFileAutoManaged","definition","TRUE","Low","Page file is not automatically managed","Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}'","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth.","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows","@{not=AzureSQL}","OnPremises","[11.0,)",,,
"PageFileAutoManagedAllDrives","definition","TRUE","Low","Page file is not automatically managed","Disable 'Automatically manage paging file size for all drives' option","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. ","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileLess10FreeSpace","definition","TRUE","Low","Insufficient page file free space","Revise page file settings. Less than 10% of page file is available","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows Linux",,"OnPremises","[11.0,)",,"0.1",
"PageFileNotConfigured","definition","TRUE","Low","Page file not configured","Create page file on server","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileOut","definition","TRUE","Low","Memory paged out","Revise LPIM settings. Part of SQL Server process memory has been paged out","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the ""Dynamic memory management"" topic and the ""Server memory options"" topic in SQL Server Books Online.","https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"PowerPlanSchemeNotRecommended","definition","TRUE","Medium","Power plan is High Performance","Switch server to High Performance power plan","DefaultRuleset, Configuration, Performance","In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution.","https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan","Server","Windows",,"OnPremises","[11.0,)",,,
"PriorityBoostOn","definition","TRUE","High","Option 'priority boost' set to default","Set 'priority boost' option to default value","DefaultRuleset, Configuration, Performance","The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"QueryWaitNotDefault","definition","TRUE","High","Option 'query wait' set to default","Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries","DefaultRuleset, Configuration","Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RecoveryIntervalOn","definition","TRUE","Low","Option 'recovery interval' set to default","Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval}","DefaultRuleset, Configuration, Performance","The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RemoteDacClusterOn","definition","TRUE","Low","Remote admin connections enabled on cluster (DAC)","Enable 'remote admin connections' option","DefaultRuleset, Configuration","SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.","https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RemoteQueryTimeout","definition","TRUE","Low","Option 'remote query timeout' set to default","Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout}","DefaultRuleset, Configuration","The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RsSvcAccSame","definition","TRUE","Low","'Reporting Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account","DefaultRuleset, Configuration","Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"RsSvcStoped","definition","TRUE","Low","'Reporting Services' service is stopped","Run 'Reporting Services' service","DefaultRuleset, Configuration","'The Reporting Services' service manages, executes, creates, schedules and delivers reports.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"ScanStartupProcs","definition","TRUE","Low","Option 'scan for startup procs' disabled on replication servers","Disable 'scan for startup procs' option for servers that participate in replication","DefaultRuleset, Configuration","Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"SqlSvcAccNotRecommended","definition","TRUE","Low","'SQL Server Database Engine' service uses non-recommended account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"SqlSvcAccNotSupported","definition","TRUE","Low","'SQL Server Database Engine' service uses not supported account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"ThreadExhaustionCPUBound","definition","TRUE","Low","Worker thread exhaustion on CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}'","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"ThreadExhaustionNotCPUBound","definition","TRUE","Low","Possible worker thread exhaustion on non-CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}')","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"ThresholdForParallelism","definition","TRUE","Medium","Option 'cost threshold for parallelism' set to default","Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism}","DefaultRuleset, Configuration, Performance","The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"WorkerThreadsLargeX64","definition","TRUE","Low","Option 'max worker threads' set to recommended value on x64 system","Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"WorkerThreadsLargeX86","definition","TRUE","Low","Option 'max worker threads' set to recommended value on x86 system","Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"XpCmdShellOn","definition","TRUE","Low","Option 'xp_cmdshell' is disabled","Disable 'xp_cmdshell' as it exposes to security risks","DefaultRuleset, Configuration","The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. ","https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AzDataDiskCache","definition","TRUE","High","Azure disk caching for data files","Set caching to 'ReadOnly' for disk @{name} (@{volume_mount_point}) as it is used for storing data files. Current setting: '@{caching}'","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Uncached IOPS and throughput plus Cached IOPS and throughput will yield the total possible performance available from the virtual machine within the VMs limits.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempdb",,
"AzDataOnDataDisks","definition","TRUE","Medium","Data files on Azure data disks","Move data files from @{volume_mount_point} to Premium SSD data disk(s)","DefaultRuleset, DBFileConfiguration, DBConfiguration","Azure data disks can be configured for optimal data security and performance. ","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempdb",,
"AzDataOnDataDisks","override","TRUE","Low",,,"",,,,,,,,"master model msdb",,
"AzDbDefaultLocation","definition","TRUE","Medium","Database default locations","Configure default @{setting_name} file location","DefaultRuleset, Configuration, Performance","Default database file location setting makes new data and transaction log files placed on drives configured for this specific workload.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureSQL","OnPremises","[11.0,)",,,
"AzDiskColumnCount","definition","TRUE","Medium","Storage spaces disk column count","Use all @{poolDiskCount} physical disks of storage pool for virtual disk (@{volume_mount_point}). @{columnCount} physical disk(s) are used now.","DefaultRuleset, DBFileConfiguration, DBConfiguration, Performance","Increasing virtual disk column count improves the disk's performance. The number of disks in the pool is the maximum available number of columns.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows",,"OnPremises","[11.0,)",,,
"AzErrorLogLocation","definition","TRUE","Medium","Error log and default trace files on Azure data disk","Move error log and default trace files to data disk","DefaultRuleset, Configuration, Performance","Storing error log and default trace files on data disk improves performance.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureSQL","OnPremises","[11.0,)",,,
"AzPremSsdDataFiles","definition","TRUE","High","Use premium SSDs for SQL Server data files","Move data files from @{volume_mount_point} to Premium SSD disk","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Standard HDDs and SSDs have varying latencies and bandwidth and are only recommended for dev/test workloads. Production workloads should use premium SSDs.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempDb",,
"AzPremSsdDataFiles","override","TRUE","Low",,,"",,,,,,,,"master model msdb",,
"AzTempDbFileLocation","definition","TRUE","High","Tempdb files on Azure temp drive","Move tempdb files from @{volume_mount_point} to the local ephemeral SSD (temp disk)","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Storing tempdb files on a local ephemeral SSD improves the performance of workloads that use temporary objects heavily (e.g. queries handling large recordsets, index rebuilds, row versioning isolation levels, temp tables, and triggers).","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Database","Windows","AzureSQL","OnPremises","[11.0,)","tempdb",,
"AzTranLogDiskCache","definition","TRUE","High","Azure disk caching for transaction logs","Set caching to 'None' for disk @{name} (@{volume_mount_point}) as it is used for storing transaction log files. Current setting: '@{caching}'","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","There is no performance benefit to enabling caching for the Transaction log disk, and in fact having either Read-only or Read/Write caching enabled on the log drive can decrease the amount of cache available for reads on the data drive","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempdb",,
"InstantFileInitialization","definition","TRUE","High","Instant file initialization (IFI) is disabled","Enable instant file initialization","DefaultRuleset, DBConfiguration, Performance","Instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files.","https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization","Server","Windows",,"OnPremises","[11.0.7001,12.0) [12.0.5000, )",,,
"LockedPagesInMemory","definition","TRUE","High","Lock pages in memory","Enable the 'Lock pages in memory' option","DefaultRuleset, Performance, Memory","This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureSQL","OnPremises","[11.0,)",,,
"LockedPagesInMemory","override","TRUE","Warning",,,"",,,,,,,"[11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.4001,)",,,
"PlansUseRatioNotOptimal","definition","TRUE","Information","Cache needs to be cleared of single-use plans","Check if the plan cache needs to be cleared. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","Setting the 'Optimize for ad hoc workloads' option to 1 affects only new plans; plans that are already in the plan cache are unaffected. Make sure to check whether you need to clear the cache from the old single-use plans that may continue to remain.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.5",
1 id itemType enabled level displayName message tags description helpLink target.type target.platform target.machineType target.engineEdition target.version target.name threshold limit
2 AutoCreateStats definition TRUE Warning Medium 'Auto-Create Statistics' option should be on Turn on 'Auto-Create Statistics' option to improve query performance DefaultRuleset, Performance, Statistics, QueryOptimizer The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics Database Windows Linux OnPremises, ManagedInstance [11.0,)
3 AutoUpdateStats definition TRUE Warning Medium Auto-Update Statistics should be on Turn on 'Auto-Update Statistics' option to improve query performance DefaultRuleset, Performance, Statistics, QueryOptimizer The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics Database Windows Linux OnPremises, ManagedInstance [11.0,)
4 QueryStoreOn definition TRUE Warning Query Store should be active Query Store operation mode should be 'Read Write' to keep performance analysis accurate DefaultRuleset, Performance, QueryStore, Statistics The Query Store feature provides you with insight on query plan choice and performance. It simplifies performance troubleshooting by helping you quickly find performance differences caused by query plan changes. Query Store automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows so you can see database usage patterns and understand when query plan changes happened on the server. While Query Store collects queries, execution plans and statistics, its size in the database grows until this limit is reached. When that happens, Query Store automatically changes the operation mode to read-only and stops collecting new data, which means that your performance analysis is no longer accurate. https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store Database Windows Linux OnPremises, ManagedInstance [13.0,) NOT: master tempdb model
5 TF174 definition TRUE Information TF 174 increases plan cache bucket count Enable trace flag 174 to increase plan cache bucket count DefaultRuleset, TraceFlag, Memory, Performance Trace Flag 174 increases the SQL Server plan cache bucket count from 40,009 to 160,001 on 64-bit systems. When the SQL Server plan cache reaches its entry limit, plans that have low cost must be evicted in order to insert new plans. This can cause severe contention on the SOS_CACHESTORE spinlock and a high CPU usage occurs in SQL Server. On 64-bit systems, the number of buckets for the SQL Server plan cache is 40,009. Therefore, the maximum number of entries that can fit inside the SQL Server plan cache is 160,036. Enabling trace flag 174 on high performance systems increases the size of the cache and can avoid SOS_CACHESTORE spinlock contention. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0.3368,12.0) [12.0.2480,13.0) [13.0,)
6 TF634 definition TRUE Information TF 634 disables background columnstore compression Trace flag 634 disables background columnstore compression task. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Memory, Performance, ColumnStore Trace Flag 634 disables the background columnstore compression task. SQL Server periodically runs the Tuple Mover background task that compresses columnstore index rowgroups with uncompressed data, one such rowgroup at a time. Columnstore compression improves query performance but also consumes system resources. You can control the timing of columnstore compression manually, by disabling the background compression task with trace flag 634, and then explicitly invoking ALTER INDEX...REORGANIZE or ALTER INDEX...REBUILD at the time of your choice. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
7 TF652 definition TRUE Information TF 652 disables page pre-fetching scans Trace flag 652 disables page pre-fetching scans. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance, Memory, Pages Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching. http://support.microsoft.com/kb/920093 Server Windows Windows Linux OnPremises [11.0,)
8 TF661 definition TRUE Information TF 661 disables background ghost cleanup task Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly. https://support.microsoft.com/help/920093 Server Windows Windows Linux OnPremises [11.0,)
9 TF834 definition TRUE Information TF 834 enables large-page allocations Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads DefaultRuleset, TraceFlag, Performance, Memory, ColumnStore Trace Flag 834 causes the server to use large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Trace flag 834 is NOT recommended on SQL Server instances that use columnstore indexes. https://support.microsoft.com/kb/3210239 Server Windows Linux OnPremises [11.0,)
10 TF845 definition TRUE Warning TF 845 is not needed in SQL Server 2012 and higher Disable trace flag 845 in SQL Server 2012 and higher versions DefaultRuleset, TraceFlag, Memory, Performance Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used. Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Windows Linux OnPremises [11.0,)
11 TF902 definition TRUE Warning Medium TF 902 Database Upgrade Bypass should be disabled Disable trace flag 902 which bypasses database upgrade DefaultRuleset, TraceFlag, UpdateIssues Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance. https://support.microsoft.com/help/2163980 Server Windows Windows Linux OnPremises [11.0,)
12 TF1117 definition TRUE Information TF 1117 enables filegroup-level autogrow Enable trace flag 1117 to enable filegroup auto-grow DefaultRuleset, TraceFlag, DBFileConfiguration, Performance Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount. https://support.microsoft.com/help/2154845 Server Windows Windows Linux OnPremises [11.0,)
13 TF1117 override TRUE Warning TF 1117 has no effect in SQL Server 2016 and higher Disable trace flag 1117 in SQL Server 2016 and higher versions Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. Starting with SQL Server 2016, this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES options of ALTER DATABASE syntax. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options [13.0,)
14 TF1118 definition TRUE Information TF 1118 disables single page allocations Enable trace flag 1118 to force page allocations on uniform extents DefaultRuleset, TraceFlag, Memory, Performance, Pages Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. https://support.microsoft.com/help/328551 Server Windows Windows Linux OnPremises [11.0,)
15 TF1118 override TRUE Warning TF 1118 has no effect in SQL Server 2016 and higher Disable trace flag 1118 in SQL Server 2016 and higher versions Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. Starting with SQL Server 2016, this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE syntax. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options [13.0,)
16 TF1204 definition TRUE Information TF 1204 returns deadlock information Disable trace flag 1204 that returns deadlock information DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1204 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog. https://support.microsoft.com/help/832524 Server Windows Linux OnPremises [11.0,)
17 TF1211 definition TRUE Warning Medium TF 1211 lock escalation should be disabled Disable trace flag 1211 to enable lock escalation DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
18 TF1222 definition TRUE Information TF 1222 returns deadlock information Disable trace flag 1222 that returns deadlock information DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1222 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog, in XML format that does not comply with any XSD schema. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
19 TF1224 definition TRUE Warning Medium TF 1224 should be disabled Disable trace flag 1224 to allow lock escalation DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
20 TF1229 definition TRUE Warning Medium TF 1229 lock partitioning should be enabled Disable trace flag 1229 to enable lock partitioning DefaultRuleset, TraceFlag, Locks, Performance, CPU Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions. https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide Server Windows Linux OnPremises [11.0,)
21 TF1236 definition TRUE Warning Medium TF 1236 database lock partitioning should be enabled Enable trace Flag 1236 to enable database lock partitioning DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems. https://support.microsoft.com/help/2926217 Server Windows Windows Linux OnPremises [11.0,)
22 TF1236 override TRUE Warning Low TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions Trace Flag 1236 enables database-level lock partitioning. Starting with SQL Server 2012 SP3 and SQL Server 2014 SP1, this behavior is controlled by the engine and trace flag 1236 has no effect. [11.0.6020,12.0) [12.0.4100,)
23 TF1462 definition TRUE Warning Medium TF 1462 should be disabled to allow Log Stream Compression Disable trace flag 1462 to allow log stream compression DefaultRuleset, TraceFlag, Performance, AvailabilityGroups Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth. https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group Server Windows Linux OnPremises [11.0,)
24 TF2312 definition TRUE Warning Low TF 2312 sets the default cardinality estimation model Trace Flag 2312 does not apply to this SQL Server version. Check if you need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120). https://support.microsoft.com/help/2801413 Server Windows OnPremises [11.0,)
25 TF2312 override TRUE False Information TF2312 sets the query optimizer cardinality estimation model to SQL Server 2014 or above versions, dependent of the compatibility level of the database DefaultRuleset, TraceFlag, QueryOptimizer, Performance [12.0, 13.0) [12.0, )
26 TF2312 TF2330 override definition TRUE Information Low TF 2330 disables recording of index usage stats TF2312 enables New CE model to SQL Server 2014 or above versions, dependent of the compatibility level of the database Check if you need to disable recording of index usage stats by setting non-default trace flag 2330 DefaultRuleset, TraceFlag, QueryOptimizer, Performance DefaultRuleset, TraceFlag, Performance, Indexes Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005. https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats Server Windows Linux OnPremises [13.0, ) [11.0,)
TF2330 definition TRUE Warning TF 2330 disables recording of index usage stats Trace Flag 2330 does not apply to this SQL Server version. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance, Indexes Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005. https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats Server Windows Linux OnPremises [11.0,)
27 TF2340 definition TRUE Information TF 2340 disables Batch Sorts for optimized nested loops joins Trace Flag 2340 disables Batch Sorts for optimized nested loops joins DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace Flag 2340 causes SQL Server not to use a sort operation (batch sort) for optimized nested loops joins when generating a plan. Verify need to set a non-default trace flag with the current system build and configuration. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
28 TF2371 definition TRUE Information TF 2371 enables a linear recompilation threshold for statistics Enable trace Flag 2371 to allow linear recompilation threshold for statistics DefaultRuleset, TraceFlag, Performance, Statistics Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql https://docs.microsoft.com/sql/relational-databases/statistics/statistics#auto_update_statistics-option Server Windows OnPremises [11.0,)
29 TF2371 override TRUE Warning TF 2371 has no effect in SQL Server 2016 and higher Disable trace flag 2371 in SQL Server 2016 and higher versions when all databases are at compatibility level 130 and above Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect. [13.0,)
30 TF2389 definition TRUE Information TF 2389 enables automatic statistics for ascending keys Check if you need to set non-default trace flag with current system build and configuration Check if you need to set non-default trace flag 2389 with current system build and configuration DefaultRuleset, TraceFlag, Statistics, Performance Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2801413 Server Windows Linux OnPremises, ManagedInstance [11.0,)
31 TF2390 definition TRUE Information TF 2390 enables automatic statistics for Ascending or Unknown Keys Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Statistics, Performance, Indexes Trace Flag 2390 enables automatically generated quick statistics for ascending or unknown keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2801413 Server Windows Linux OnPremises, ManagedInstance [11.0,)
32 TF2528 definition TRUE Warning Low TF 2528 disables parallel operations for integrity checking Trace Flag 2528 disables parallel operations for integrity checking Trace Flag 2528 disables parallel operations for integrity checking, and can cause it to take longer to complete DefaultRuleset, TraceFlag, DataIntegrity, DBCC Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
33 TF2549 definition TRUE Warning Low TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB Trace Flag 2549 forces DBCC CHECKDB to treat different physical files as one logical file Do not use this trace flag unless you know that each file is based on a unique physical disk DefaultRuleset, TraceFlag, DBCC Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk. https://support.microsoft.com/help/2634571 Server Windows Linux OnPremises [11.0,)
34 TF2562 definition TRUE Warning Low TF 2562 forces 'DBCC CHECKDB' command to execute in single batch Disable trace flag 2562 to force 'DBCC CHECKDB' command to execute in single batch Disable trace flag 2562, which forces 'DBCC CHECKDB' command to execute in single batch DefaultRuleset, TraceFlag, DBCC, TempDB Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase. https://support.microsoft.com/help/2634571 Server Windows Linux OnPremises [11.0,)
35 TF2566 definition TRUE Warning Medium TF 2566 disables default data purity check Disable trace flag 2566 to turn off default data purity check Disable trace flag 2566 to turn on default data purity check DefaultRuleset, TraceFlag, DBCC, DataIntegrity Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default. https://support.microsoft.com/help/945770 Server Windows Linux OnPremises [11.0,)
36 TF3023 definition TRUE Information TF 3023 enables Backup Checksum option by default Disable trace flag 3023 to turn on 'CHECKSUM' option as default for 'BACKUP' command Disable trace flag 3023 to turn off 'CHECKSUM' option as default for 'BACKUP' command DefaultRuleset, TraceFlag, Backup Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option. https://support.microsoft.com/help/2656988 Server Windows Windows Linux OnPremises [11.0,)
37 TF3042 definition TRUE Information TF 3042 bypasses default backup compression pre-allocation algorithm Disable trace flag 3042 to bypass default backup compression Disable trace flag 3042 as using this trace flag might cause a slight performance penalty DefaultRuleset, TraceFlag, Backup Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time. https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server Server Windows Linux OnPremises [11.0,)
38 TF3226 definition TRUE Information TF 3226 disables ErrorLog entries for successful backup operations Disable trace flag 3226 to prevent SQL Server from recording ErrorLog entries for each successful backup operation DefaultRuleset, TraceFlag, Backup Trace Flag 3226 prevents SQL Server from recording an entry to the Errorlog on every successful backup operation. Backup operations are registered in the Errorlog by default. Frequent backup operations can contribute to massive Errorlog files that become unwieldy. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises [11.0,)
39 TF4136 override TRUE Information Disable trace flag 4136 to prevent parameter sniffing. Verify need to set non-default trace flag with current system build and configuration Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration. [11.0.2316,)
40 TF4136 definition TRUE Warning Medium TF 4136 disables parameter sniffing Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/980653 Server Windows Linux OnPremises [11.0,)
41 TF4137 override TRUE Information Disable trace flag 4137 to instruct SQL Server to generate plan using partial correlation of filters. Verify need to set non-default trace flag with the current system build and configuration Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration. [11.0.2316,)
42 TF4137 definition TRUE Warning TF 4137 causes plans to use partial correlation for filters Trace flag 4137 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). However it does not apply to this SQL Server version. Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2658214 Server Windows Linux OnPremises [11.0,)
43 TF4138 override TRUE Information Trace Flag 4138 enables plan that without row goal adjustments. Verify need to set a non-default trace flag with the current system build and configuration Trace Flag 4138 causes SQL Server to generate a plan that does not use row goal adjustments with queries that contain TOP, OPTION (FAST N), IN, or EXISTS keywords. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'DISABLE_OPTIMIZER_ROWGOAL' query hint. Verify need to set a Non-default trace flag with current system build and configuration. [11.0.2325,)
45 TF4139 override TRUE Information Trace Flag 4139 enables automatic statistics for any key ordering. Verify need to set a non-default trace flag with the current system build and configuration Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. This trace flag is recommended to be set in cases where queries access newly inserted key values that may change plan shape, but the new values are not yet updated in the statistics histogram for the affected columns. In this case, regardless of the leading statistics column status (ascending, descending, or stationary), the histogram used to estimate cardinality will be adjusted at query compile time. This trace flag does not apply to the cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Verify need to set a non-default trace flag with the current system build and configuration. [11.0.3431,11.0.5058) [11.0.5532,)
46 TF4139 definition TRUE Warning TF 4139 enables automatic statistics for any key ordering Trace flag 4139 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Statistics Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. However, this trace flag does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2952101 Server Windows Linux OnPremises [11.0,)
47 TF4199 definition TRUE Information TF 4199 enables query optimizer fixes Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, QueryOptimizer Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs. http://support.microsoft.com/help/974006 Server Windows Linux OnPremises [11.0, 14.0)
48 TF6498 override definition TRUE Information Low TF 6498 enables additional concurrent large queries Trace Flag 6498 enables concurrent large queries Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Performance, Memory Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect. https://support.microsoft.com/help/3024815 Server Windows Linux OnPremises [12.0.2474,12.0.2480] [12.0.4416,12.0.5000) [12.0.5000,)
49 TF6498 TF6532 override definition TRUE Warning Information TF 6532 enables performance improvements for spatial data Disable trace flag 6498 in SQL Server 2014 SP2, SQL Server 2016 and higher versions Enable trace flag 6532 to enable performance improvements for spatial data DefaultRuleset, TraceFlag, Performance Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect. Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects. https://support.microsoft.com/help/3107399 Server Windows Linux OnPremises [12.0.5000,) [11.0.6020,11.0.6518)
TF6498 definition TRUE Warning TF 6498 enables additional concurrent large queries Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Performance, Memory Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect. https://support.microsoft.com/help/3024815 Server Windows OnPremises [11.0,)
TF6532 definition TRUE Information TF 6532 enables performance improvements for spatial data Enable trace flag 6532 to enable performance improvements for spatial data DefaultRuleset, TraceFlag, Performance Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects. https://support.microsoft.com/help/3107399 Server Windows OnPremises [11.0.6020,11.0.6518)
TF6532.6533 override TRUE Information Enable trace flag 6532 and trace flag 6533 to enable performance improvements for spatial data Trace Flag 6532 and trace flag 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects. [11.0.6518,12.0) [12.0.5000,13.0)
50 TF6532.6533 override TRUE Warning Disable trace flag 6532 in SQL Server 2016 and higher versions. [13.0,)
51 TF6532.6533 definition TRUE Warning Information TF 6532 and TF 6533 enable performance improvements for spatial data TF 6532 and 6533 improve spatial data performance Trace flags 6532 and 6533 do not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration Enable trace flags 6532 and 6533 to improve spatial data performance DefaultRuleset, TraceFlag, Performance Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Starting with SQL Server 2016, this behavior is controlled by the engine and trace flags 6532 and 6533 have no effect. Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, types of queries, and objects. https://support.microsoft.com/help/3107399 Server Windows OnPremises [11.0,)
52 TF6534 override TRUE Information Enable trace flag 6534 to enable performance improvement of query operations with spatial data types Trace Flag 6534 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects. [11.0.6020,12.0) [12.0.5000,13.0)
53 TF6534 definition TRUE Warning TF 6534 enables performance improvements for spatial data Trace flag 6534 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Performance Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration. https://support.microsoft.com/help/3107399 Server Windows OnPremises [11.0,)
54 TF7412 definition TRUE Information TF 7412 enables the lightweight profiling infrastructure Enable trace flag 7412 to enable lightweight profiling infrastructure for live query performance troubleshooting DefaultRuleset, TraceFlag, Performance Trace Flag 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting. Consider enabling TF 7412 to have the ability to access runtime information on query execution plans for any session. https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure Server Windows Linux OnPremises [13.0.4001,15.0)
55 TF9024 definition TRUE Warning Low TF 9024 converts global log pool memory object Verify need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance, NUMA, Memory, CPU TF9024 converts a global log pool memory object into NUMA node partitioned memory object. https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser Server Windows OnPremises
56 TF9024 override TRUE Information Enable trace flag 9024 to convert global log pool memory objects into NUMA node partitioned memory objects [11.0.3349, 11.0.6020) [12.0, 12.0.4100)
57 TF9024 override TRUE Warning TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above. [11.0.6020, 12.0) [12.0.4100,)
58 TF8048 definition TRUE Warning Low TF 8048 converts NUMA partitioned memory objects into CPU partitioned Verify need to set a Non-default TF with current system build and configuration Verify need to set a Non-default TF 8048 with current system build and configuration DefaultRuleset, TraceFlag, Performance, NUMA, CPU, Memory TF 8048 converts NUMA partitioned memory objects into CPU partitioned. https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser Server Windows OnPremises
59 TF8048 override TRUE Warning Disable trace flag 8048 in SQL Server 2014 SP2, SQL Server 2016 and above [12.0.4100,)
60 TF8048 override TRUE Information Enable trace flag 8048 to convert NUMA partitioned memory objects into CPU partitioned [11.0, 12.0.4100)
61 DeprecatedFeatures definition TRUE Warning Deprecated or discontinued features should not be used Replace deprecated or discontinued feature @{DeprecatedFeature} with actual features for SQL Server version @{ProductVersion} DefaultRuleset, Deprecated, Security, UpdateIssues, Performance This check detects deprecated or discontinued features used on target SQL Server instances. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Server Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
62 SystemHealthSession definition TRUE Warning Medium 'system_health' XEvent session is not active Start system health session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer DefaultRuleset, XEvent, SystemHealth This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session. https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session Server Windows Linux OnPremises, ManagedInstance [11.0,)
63 SPServerDiagnosticsSession definition TRUE Warning Low 'sp_server_diagnostics' xEvent session is not active Start xEvent session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer DefaultRuleset, XEvent, SystemHealth This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session. https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql Server Windows Linux OnPremises [11.0,)
64 BlackboxTrace DefaultTrace definition TRUE Warning Low Black box trace is running Default trace was not found or is inactive Check that you need black box trace and stop it otherwise Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it DefaultRuleset, Traces This trace is designed to behave similarly to an airplane black box, to help you diagnose intermittent server crashes. It consumes more resources than the default trace and should not be running for extended periods of time. Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur. https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-trace-create-transact-sql https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled Server Windows Linux OnPremises OnPremises, ManagedInstance [11.0,)
DefaultTrace definition TRUE Warning Default trace was not found or is inactive Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it DefaultRuleset, Traces Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur. https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled Server Windows Linux OnPremises, ManagedInstance [11.0,)
65 HintsStatistics definition TRUE Information Hints are used Use <join_hint>, <query_hint> and <table_hint> in specific cases only since SQL Server Query Optimizer typically selects best execution plan for queries DefaultRuleset, QueryOptimizer, Performance, Statistics Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators. https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql Server Windows Linux OnPremises, ManagedInstance [11.0,)
66 HintsUsageInModules definition False Information Hints usage in modules @{Hint} used in @{type_desc} @{Schema_Name}.@{Object_Name} DefaultRuleset, QueryOptimizer, Performance, Statistics Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators. https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql Database Windows Linux OnPremises, ManagedInstance [11.0,)
67 PlansUseRatio definition TRUE Warning Medium Amount of single use plans in cache is high Amount of single-use plans in cache is high Enable 'Optimize for ad hoc workloads' setting on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0}) Enable 'Optimize for ad hoc workloads' option on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0}) DefaultRuleset, Performance, QueryOptimizer Single use plans waste system resources. The 'Optimize for ad hoc workloads' option helps relieve memory pressure by not allowing the plan cache to become filled with compiled plans that aren't reused. https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option Server Windows Linux OnPremises, ManagedInstance [11.0,) 0.5
68 HypotheticalIndexes definition TRUE Warning Medium Hypothetical indexes found Drop hypothetical @{IndexName} index for @{Schema}.@{Object} DefaultRuleset, Indexes, Performance Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible. https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
69 HypotheticalStatistics definition TRUE Warning Medium Hypothetical statistics found Drop hypothetical @{StatName} statistics for @{Schema}.@{Object} DefaultRuleset, Statistics Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible. https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes Database Windows Linux OnPremises, ManagedInstance [11.0,)
70 LatestCU definition TRUE Warning Medium SQL Server instance is not up to date Update SQL Server and install Service Packs and Cumulative Updates as they are released. Current product version @{ProductVersion} is not up to date DefaultRuleset, Security, UpdateIssues On an installed instance of SQL Server, we recommend that you apply the latest security updates and critical updates including general distribution releases (GDRs), service packs (SPs), and cumulative updates (CUs). https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an Server Windows Linux OnPremises [11.0,)
71 LatestCU override TRUE Warning SQL Server instance is up to date Product version @{ProductVersion} is the latest available https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an [11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.5882, 14.0) [14.0.3370, 15.0) [15.0.4102,) [11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.6300, 14.0) [14.0.3411, 15.0) [15.0.4178,)
72 FKNoIndexes definition TRUE Warning Medium Foreign key constraints should have corresponding indexes Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName} DefaultRuleset, Performance, Indexes Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful. https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
73 MissedIndexes definition TRUE Information Potentially missing indexes Create index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #} DefaultRuleset, Performance, Indexes Potentially missing indexes were found based on query history. It may be important to revise them. https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
74 FullBackup definition TRUE Warning Medium Full backup is missed or outdated Create full backup. Last full backup is over @{threshold} days old DefaultRuleset, Backup Database doesn't have any full backup or the latest full backup is over 7 days old. https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server Database Windows Linux OnPremises [11.0,) NOT: model tempdb 7
75 OutdatedTranLogBackup definition TRUE Warning Medium Transaction Log backup is missed or outdated Create transaction log backup. Database recovery model: @{recovery_model_desc} DefaultRuleset, Backup Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H. https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server Database Windows Linux OnPremises [11.0,) NOT: master model msdb tempdb
76 DbDiffCollation definition TRUE Warning Medium Database collation doesn't match master collation Keep database collation the same as master or model collation DefaultRuleset, DBConfiguration, Collation We recommend that the collations of user-defined databases match the collation of master or model. Otherwise, collation conflicts can occur that might prevent code from executing. For example, when a stored procedure joins one table to a temporary table, SQL Server might end the batch and return a collation conflict error if the collations of the user-defined database and the model database are different. This occurs because temporary tables are created in tempdb, which bases its collation on that of model. https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases Database Windows Linux OnPremises, ManagedInstance [11.0,)
77 AutoClose definition TRUE Warning Medium 'AUTO_CLOSE' option should be OFF Set 'AUTO_CLOSE' option to OFF DefaultRuleset, Performance, DBConfiguration When AUTO_CLOSE is set ON, this can cause performance degradation on frequently accessed databases because of the increased overhead of opening and closing the database after each connection. AUTO_CLOSE also flushes the procedure cache after each connection. https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off Database Windows Linux OnPremises [11.0,) NOT: master msdb tempdb
78 AutoShrink definition TRUE Warning Medium 'AUTO_SHRINK' option should be OFF Set 'AUTO_SHRINK' option to OFF DefaultRuleset, DBConfiguration, Performance Shrinking databases is the fastest way to achieve fragmentation. SQL Server goes to the last page in the database, moves it to the first free available space, and then repeats the process again. This shuffles the deck, putting your pages out of order. https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master msdb tempdb
79 PageVerify definition TRUE Warning Medium 'PAGE_VERIFY' option should be 'CHECKSUM' Set 'PAGE_VERIFY' option to 'CHECKSUM' DefaultRuleset, DBConfiguration, DataIntegrity When CHECKSUM is enabled for the PAGE_VERIFY database option, the SQL Server Database Engine calculates a checksum over the contents of the whole page, and stores the value in the page header when a page is written to disk. When the page is read from disk, the checksum is recomputed and compared to the checksum value that is stored in the page header. This helps provide a high level of data-file integrity. https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum Database Windows Linux OnPremises [11.0,) NOT: master msdb tempdb
80 DbChaining definition TRUE Warning Medium Cross-Database access should be disabled Turn off 'DB_CHAINING' option DefaultRuleset, DBConfiguration, Security Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to the additional security risks. https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master msdb tempdb
81 AutoCreateStatsIncremental definition TRUE Warning Low Incremental option of auto stats should be ON Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options DefaultRuleset, DBConfiguration, Statistics, Performance Incremental statistics update at partition level is a feature introduced in SQL Server 2014. When the option INCREMENTAL is turn on at the database level, newly auto created column statistics will use incremental statistics on partitioned tables by default. https://docs.microsoft.com/sql/relational-databases/statistics/statistics Database Windows Linux OnPremises, ManagedInstance [12.0,) NOT: master msdb tempdb
82 TrustWorthy definition TRUE Warning Low 'TRUSTWORTHY' should be OFF Set 'TRUSTWORTHY' option to OFF DefaultRuleset, DBConfiguration, Security You can use the TRUSTWORTHY database setting to indicate whether the instance of Microsoft SQL Server trusts the database and the contents within the database. By default, this setting is set to OFF to mitigate certain threats that may be present when a database is attached to the server. https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server Database Windows Linux OnPremises [11.0,) NOT: master msdb tempdb
83 ParameterizationNotSimple definition TRUE Warning Low 'PARAMETERIZATION' should be 'SIMPLE' Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries DefaultRuleset, DBConfiguration, Performance, QueryOptimizer When the PARAMETERIZATION database option is set to SIMPLE, the SQL Server query optimizer may choose to parameterize the queries. This means that any literal values that are contained in a query are substituted with parameters. This process is referred to as simple parameterization. When SIMPLE parameterization is in effect, you cannot control which queries are parameterized and which queries are not. However, you can specify that all queries in a database be parameterized by setting the PARAMETERIZATION database option to FORCED. Regardless of whether you have a Plan-Stability or not, SQL Server will always auto parameterize your SQL Statements, and reuse the cached execution plan over and over again. It doesn't matter how terrible the execution plan is. Therefore you have to know in exact detail the shape of your execution plans, and whether they can lead to some performance related problems. https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master msdb tempdb
84 TempDBFilesNotSameSize definition TRUE Warning Medium TempDB data files are not the same size Make all TempDB data files the same size DefaultRuleset, TempDB, Performance, DBFileConfiguration We recommend that you create all TempDB data files at the same size. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises [11.0,)
85 TempDBFilesMultiple4 definition TRUE Warning Low Number of TempDB data files should be in multiples of 4 Number of TempDB data files should be in multiples of 4 Make the number of data files be in multiples of 4. For example, 8, 12, 16, and so on, depending on your workloads. Currently you have @{physical_name} TempDB data files DefaultRuleset, TempDB, Performance, DBFileConfiguration Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises [11.0,)
86 TempDBFiles1PerCPU definition TRUE Warning Medium Number of TempDB data files should depend on CPU count 1 data file per logical processor is required (processors count: @{online_logical_processors}) DefaultRuleset, TempDB, Performance, DBFileConfiguration Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises [11.0,)
87 TempDBFilesNotLess8 definition TRUE Warning Medium Number of TempDB data files should be at least 8 Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8 DefaultRuleset, TempDB, Performance, DBFileConfiguration Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises [11.0,)
88 TempDBFilesAutoGrowth definition TRUE Warning Medium TempDB data files have different auto-growth settings Make auto-growth settings the same for each TempDB data file DefaultRuleset, TempDB, Performance, DBFileConfiguration TempDB data files should be of equal size within each filegroup, as SQL Server uses a proportional-fill algorithm that favors allocations in files with more free space. https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database Server Windows Linux OnPremises [11.0,)
89 FilesAutogrowth definition TRUE Warning Medium Database files auto-growth over 1GB Set file growth to less than 1GB for files: @{FileName} DefaultRuleset, Performance, DBFileConfiguration A data or log file will be extended with auto-growth value to prevent the lack of free space in files. This process can perform significant impact on SQL Server performance if auto-growth value gets over 1 GB. By default, SQL Server will put zeros to a newly allocated space. And the more space it takes, the more time it takes to initialize it. https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server Database Windows Linux OnPremises, ManagedInstance [13.0.4001,)
90 DuplicateIndexes definition TRUE Warning Low Duplicate indexes Remove duplicate indexes in table @{Table}: @{ToDelete} DefaultRuleset, Performance, Indexes A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
91 RedundantIndexes definition TRUE Warning Low Tables with redundant indexes Remove redundant indexes in table @{Table}: @{Indexes} DefaultRuleset, Performance, Indexes There are tables with possibly redundant indexes according to the set of key and included columns. We recommended to revise all these objects as soon as possible. https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
92 UserObjectsInMaster definition TRUE Warning User objects in master database Remove user objects from 'master' database: @{Object_Name} DefaultRuleset, masterDB, Backup We highly recommend you not create user objects in the master database. If it's unavoidable for some reason, make sure to back up the database more frequently. https://docs.microsoft.com/sql/relational-databases/databases/master-database Database Windows Linux OnPremises, ManagedInstance [11.0,) master
93 HighCPUUsage definition TRUE Warning Medium High CPU usage on server Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}% DefaultRuleset, Performance, CPU Keeping CPU usage rates within normal ranges is vital for servers hosting SQL Server instances. A continually high rate of CPU usage may indicate the need to upgrade the CPU or add multiple processors. Alternatively, a high CPU usage rate may indicate a poorly tuned or designed application. Optimizing the application can lower CPU utilization. https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage Server Windows OnPremises, ManagedInstance [11.0,) 70
94 ReplErrors24H definition TRUE Warning Medium Replication errors within last 24 hours Review '@{publisher_db}' database replication errors for publications: @{publication} DefaultRuleset, Replication This check searches for errors in distribution database agent's history table for the last 24 hours. https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication Server Windows Linux OnPremises, ManagedInstance [11.0,)
95 AgentAlertsSeverity10 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 10 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
96 AgentAlertsSeverity16 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 16 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
97 AgentAlertsSeverity17 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 17 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
98 AgentAlertsSeverity19 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 19 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
99 AgentAlertsSeverity20 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 20 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
100 AgentAlertsSeverity21 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 21 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
101 AgentAlertsSeverity22 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 22 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
102 AgentAlertsSeverity23 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 23 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
103 AgentAlertsSeverity24 definition TRUE Warning Low Agent doesn't rise alerts for errors with severity 24 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance [11.0,)
104 WeakPassword definition TRUE Warning Medium Weak password SQL logins have weak passwords Set strong passwords for logins: @{PasswordData} DefaultRuleset, Security, WeakPassword Some user logins have weak passwords. Some SQL logins have weak passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities. https://docs.microsoft.com/sql/relational-databases/security/strong-passwords Server Windows Linux OnPremises, ManagedInstance [11.0,)
105 VLFCount definition TRUE Warning Medium VLF count Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId} DefaultRuleset, Backup, Performance The SQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. The Database Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. The Database Engine tries to maintain a small number of virtual files. The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. The size or number of virtual log files cannot be configured or set by administrators. If the log files grow to a large size in many small increments, they will have many virtual log files. This can slow down database startup and also log backup and restore operations. Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value. https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide Database Windows Linux OnPremises, ManagedInstance [11.0,) 50
106 TF8015 definition TRUE Warning Medium TF 8015 disables auto-detection and NUMA setup Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, CPU, NUMA SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups. https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044 Server Windows Windows Linux OnPremises [11.0,11.0.3349)
107 TF8032 definition TRUE Warning Medium TF 8032 reverts cache limit parameters to SQL Server 2005 RTM Disable trace flag 8032 DefaultRuleset, TraceFlag, Performance Trace Flag 8032 reverts the cache limit parameters to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP. Server Windows Windows Linux OnPremises [11.0,)
108 TF8744 definition TRUE Warning Medium TF 8744 disables pre-fetching for Nested Loop operator Disable trace flag 8744 for this SQL Server instance. This trace flag does not apply to this SQL Server version Disable trace flag 8744 DefaultRuleset, TraceFlag, Performance Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator. https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa Server Windows Windows Linux OnPremises [11.0,12.0)
109 TF9347 definition TRUE Warning Medium TF 9347 disables batch mode for sort operator Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries. Server Windows Windows Linux OnPremises [11.0,13.0)
110 TF9349 definition TRUE Warning Medium TF 9349 disables batch mode for top N sort operator Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries. Server Windows Windows Linux OnPremises [11.0,13.0)
111 TF9389 definition TRUE Warning Medium TF 9389 enables dynamic memory grant for batch mode operators Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance, TempDB Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available. Server Windows Windows Linux OnPremises, ManagedInstance [11.0,13.0)
112 TF9476 definition TRUE Warning Medium TF 9476 causes SQL Server to generate plan using Simple Containment assumption Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance, QueryOptimizer Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions. Server Windows Windows Linux OnPremises [11.0,13.0)
113 TF9481 definition TRUE Warning Medium TF 9481 enables Legacy CE model Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database. Server Windows Windows Linux OnPremises [11.0,12.0)
114 TF10204 definition TRUE Warning Medium TF 10204 disables merge/recompress Disable trace flag 10204. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance, ColumnStore Trace flag 10204 disables merge/recompress during columnstore index reorganization. In SQL Server 2016 (13.x), when a columnstore index is reorganized, there is new functionality to automatically merge any small compressed rowgroups into larger compressed rowgroups, as well as recompressing any rowgroups that have a large number of deleted rows. Server Windows Windows Linux OnPremises [11.0,13.0)
115 SPNaming definition TRUE Warning Medium Stored procedure naming Rename the following stored procedures to eliminate 'sp_' prefix: @{ObjectName} DefaultRuleset, Naming In SQL Server, the sp_ prefix designates system stored procedures. If you use that prefix for your stored procedures, the name of your procedure might conflict with the name of a system stored procedure that will be created in the future. If such a conflict occurs, your application might break if your application refers to the procedure without qualifying the reference by schema. In this situation, the name will bind to the system procedure instead of to your procedure. https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100) Database Windows Linux OnPremises, ManagedInstance [11.0,)
116 ObjectNamingSpecialChar definition TRUE Warning Low Special characters in object names Rename the following objects to eliminate special characters: @{ObjectName} DefaultRuleset, Naming If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object. https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) Database Windows Linux OnPremises, ManagedInstance [11.0,)
117 ColumnNamingSpecialChar definition TRUE Warning Low Special characters in column names Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{ObjectName} DefaultRuleset, Naming Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object. https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) Database Windows Linux OnPremises, ManagedInstance [11.0,)
118 FnNaming definition TRUE Warning Medium User function naming Rename the following functions to eliminate 'fn_ prefix': @{ObjectName} DefaultRuleset, Naming In SQL Server, the fn_ prefix designates system functions. If you use that prefix for your functions, the name of your function might conflict with the name of a system function that will be created in the future. If such a conflict occurs, your application might break if your application refers to the function without qualifying the reference by schema. In this situation, the name will bind to the system function instead of to your function. https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql Database Windows Linux OnPremises, ManagedInstance [11.0,)
119 ObjectNamingResKeywords definition TRUE Warning Low Object names contain reserved keywords Rename the following objects to eliminate reserved keywords: @{ObjectName} DefaultRuleset, Naming Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers. https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql Database Windows Linux OnPremises, ManagedInstance [11.0,)
120 DeprFeaturesInModules definition TRUE Warning Low Deprecated or discontinued features in modules Remove deprecated or discontinued features in @{ObjectName}: @{Keyword} DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
121 DeprFeaturesInJobs DeprFeaturesInModules definition override TRUE False Warning Deprecated or discontinued features in modules Remove deprecated or discontinued features in @{ObjectName}: @{Keyword} DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Server Database Windows Linux AzureSQL OnPremises, ManagedInstance [11.0,)
122 NUMANodeSingleCPU DeprFeaturesInJobs definition TRUE Warning Low Single CPU assigned to NUMA node Deprecated or discontinued features in modules Assign additional CPUs to NUMA nodes with only one CPU Remove deprecated or discontinued features in @{ObjectName}: @{Keyword} DefaultRuleset, NUMA, CPU, Memory, Performance DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA. Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Server Windows Windows Linux OnPremises, ManagedInstance [11.0,)
123 NUMANodeNoCPU DeprFeaturesInJobs definition override TRUE False Warning NUMA nodes without CPUs Assign CPUs to each NUMA node DefaultRuleset, NUMA, Performance, CPU, Memory Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA. https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) Server Windows Windows Linux AzureSQL OnPremises, ManagedInstance [11.0,)
124 IndexKeyGuid NUMANodeSingleCPU definition TRUE Warning Medium Guid in clustered index key column Single CPU assigned to NUMA node Remove GUIDs in clustered indexes keys: @{IndexName} Assign additional CPUs to NUMA nodes with only one CPU DefaultRuleset, Indexes, Performance DefaultRuleset, NUMA, CPU, Memory, Performance A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects. Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA. https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/ https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) Database Server Windows Linux Windows OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
125 IndexesLargeKeys NUMANodeNoCPU definition TRUE Warning Medium Indexes keys with more than 900 bytes NUMA nodes without CPUs Remove keys larger than 900 bytes in @{FullName} index Assign CPUs to each NUMA node DefaultRuleset, Indexes, Performance DefaultRuleset, NUMA, Performance, CPU, Memory When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA. http://msdn.microsoft.com/library/ms191241.aspx https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) Database Server Windows Linux Windows OnPremises, ManagedInstance [11.0,13.0) [11.0,) NOT: master model msdb tempdb
126 IndexesLargeKeysNonClust IndexKeyGuid definition TRUE Warning Low NonClustered indexes keys with more than 1700 bytes Guid in clustered index key column Remove keys larger than 1700 bytes in @{FullName} index Remove GUIDs in clustered indexes keys: @{IndexName} DefaultRuleset, Indexes, Performance When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects. http://msdn.microsoft.com/library/ms191241.aspx https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/ Database Windows Linux OnPremises, ManagedInstance [13.0,) [11.0,) NOT: master model msdb tempdb NOT: master tempdb model msdb
127 IndexesLargeKeysClust IndexesLargeKeys definition TRUE Warning Low Clustered indexes keys with more than 900 bytes Indexes keys with more than 900 bytes Remove keys larger than 900 bytes in @{FullName} index DefaultRuleset, Indexes, Performance When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. http://msdn.microsoft.com/library/ms191241.aspx Database Windows Linux OnPremises, ManagedInstance [13.0,) [11.0,13.0) NOT: master model msdb tempdb
128 DisabledIndexes IndexesLargeKeysNonClust definition TRUE Warning Low Disabled indexes exist NonClustered indexes keys with more than 1700 bytes Remove or enable disabled index: @{FullName} Remove keys larger than 1700 bytes in @{FullName} index DefaultRuleset, Indexes, Performance If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them. When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints http://msdn.microsoft.com/library/ms191241.aspx Database Windows Linux OnPremises, ManagedInstance [11.0,) [13.0,) NOT: master model msdb tempdb
129 IndexesFillFactor IndexesLargeKeysClust definition TRUE Warning Low Index fill factor is below 80% Clustered indexes keys with more than 900 bytes Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent Remove keys larger than 900 bytes in @{FullName} index DefaultRuleset, Indexes, Performance The fill-factor option is provided for fine-tuning index data storage and performance. When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index. When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index http://msdn.microsoft.com/library/ms191241.aspx Database Windows Linux OnPremises, ManagedInstance [11.0,) [13.0,) NOT: master model msdb tempdb
130 NonUniqueClusterIndex DisabledIndexes definition TRUE Warning Medium Non-unique clustered indexes Disabled indexes exist Review non-unique @{FullName} clustered index Remove or enable disabled index: @{FullName} DefaultRuleset, Indexes, Performance Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. That’s why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive. If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them. https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
131 SuspectPages IndexesFillFactor definition TRUE Warning Low Suspect pages found Index fill factor is below 80% Run 'DBCC CHECKDB' to verify affected database. Suspect pages were found: @{EventType} Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent DefaultRuleSet, Pages, DataIntegrity DefaultRuleset, Indexes, Performance The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary. The fill-factor option is provided for fine-tuning index data storage and performance. When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index. https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
132 SparseFiles NonUniqueClusterIndex definition TRUE Warning Medium Sparse files Non-unique clustered indexes Remove sparse files: @{SparseFiles} Review non-unique @{FullName} clustered index DefaultRuleSet, Snapshots, Backup, DataIntegrity DefaultRuleset, Indexes, Performance If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size. Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. That’s why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive. https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/ https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
133 TableNoIndex SuspectPages definition TRUE Warning High Tables without indexes Suspect pages found Review @{TableName} table and create reasonable indexes Run 'DBCC CHECKDB' to verify affected database. Suspect pages were found: @{EventType} DefaultRuleset, Indexes, Performance DefaultRuleSet, Pages, DataIntegrity Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient. The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary. https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
134 TableNoClusteredIndex SparseFiles definition TRUE Warning Low Tables without clustered indexes Sparse files Review @{TableName} table and create clustered index Remove sparse files: @{SparseFiles} DefaultRuleset, Indexes, Performance DefaultRuleSet, Snapshots, Backup, DataIntegrity Tables without clustered indexes are called heaps. They’re scattered on disk anywhere that SQL Server can find a spot, and they’re not stored in any order whatsoever. This can make for really fast inserts – SQL Server can just throw the data down – but slow selects, updates, and deletes. If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size. https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/ Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
135 TablePSAlign TableNoIndex definition TRUE Warning Low Table index not aligned with PS Tables without indexes Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema Review @{TableName} table and create reasonable indexes DefaultRuleset, Indexes, Performance Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index. Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient. https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
136 LoginNoPassword TableNoClusteredIndex definition TRUE Warning Low Logins with no passwords Tables without clustered indexes Set strong passwords for logins: @{PasswordData} Review @{TableName} table and create clustered index DefaultRuleset, Security, WeakPassword DefaultRuleset, Indexes, Performance Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Tables without clustered indexes are called heaps. They’re scattered on disk anywhere that SQL Server can find a spot, and they’re not stored in any order whatsoever. This can make for really fast inserts – SQL Server can just throw the data down – but slow selects, updates, and deletes. https://docs.microsoft.com/sql/relational-databases/security/password-policy https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes Server Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
137 LoginEqPassword TablePSAlign definition False TRUE Warning Low Logins with passwords that are same as login names Table index not aligned with PS Review logins with password equals to login: @{PasswordData} Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema DefaultRuleset, Security, WeakPassword DefaultRuleset, Indexes, Performance Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index. https://docs.microsoft.com/sql/relational-databases/security/password-policy https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes Server Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master tempdb model msdb
138 SystemHealth LoginNoPassword definition TRUE False Warning System Health important messages SQL logins have no passwords Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago Set strong passwords for logins: @{PasswordData} DefaultRuleset, XEvent, SystemHealth, Performance DefaultRuleset, Security, WeakPassword The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities. https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session https://docs.microsoft.com/sql/relational-databases/security/password-policy Server Windows Linux OnPremises, ManagedInstance [11.0,)
139 RarelyUsedIndex LoginEqPassword definition TRUE False Warning Rarely used index Passwords and SQL login names are the same Revise rarely used index @{IndexName} Review logins that have passwords equal to SQL login names: @{PasswordData} DefaultRuleset, Indexes, Performance DefaultRuleset, Security, WeakPassword Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup. Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use passwords that are different from your SQL login names. https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql https://docs.microsoft.com/sql/relational-databases/security/password-policy Database Server Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
140 UnusedIndex SystemHealth definition TRUE Warning High Unused index System Health important messages Revise unused @{IndexName} index Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago DefaultRuleset, Index, Performance DefaultRuleset, XEvent, SystemHealth, Performance Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere. The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session Database Server Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
141 SkewedCompatibilityLevel RarelyUsedIndex definition TRUE Warning Low Database with skewed compatibility level Rarely used index Update database compatibility level. Current level is @{CompatibilityLevel} Revise rarely used index @{IndexName} DefaultRuleset, CompatibilityLevel, Security, Performance, UpdateIssues DefaultRuleset, Indexes, Performance Some databases may have a compatibility level lower than the allowed level by the Database Engine. Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
142 PendingDiskIORequests UnusedIndex definition TRUE Warning Medium Pending disk I/O requests Unused index Solve I/O related issues to get rid of pending requests Revise unused @{IndexName} index on @{TableName} table DefaultRuleset, IO, Performance DefaultRuleset, Index, Performance A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment. Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere. https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql Server Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
143 MaxDOP SkewedCompatibilityLevel definition TRUE Warning Low MaxDOP should be less or equal to number of CPUs Database with skewed compatibility level Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server Update database compatibility level. Current level is @{CompatibilityLevel} DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU DefaultRuleset, CompatibilityLevel, Security, Performance, UpdateIssues The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. Some databases may have a compatibility level lower than the allowed level by the Database Engine. https://support.microsoft.com/kb/2806535 https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level Server Database Windows Linux OnPremises [11.0,)
144 MaxDOPFewNUMA PendingDiskIORequests definition TRUE Warning Medium MAXDOP set in accordance with CPU count Pending disk I/O requests Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node Solve I/O related issues to get rid of pending requests DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU DefaultRuleset, IO, Performance The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment. https://support.microsoft.com/kb/2806535 https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations Server Windows Linux OnPremises [11.0, 13.0) [11.0,)
145 DbIntegrity MaxDOP definition TRUE Warning Medium Database Integrity Checks MaxDOP should be less or equal to number of CPUs Run 'DBCC CHECKDB' command checks Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server DefaultRuleset, DBCC, Performance, DataIntegrity DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation. The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://msdn.microsoft.com/library/ms176064.aspx https://support.microsoft.com/kb/2806535 Database Server Windows Linux OnPremises, ManagedInstance OnPremises [11.0,) NOT: tempdb
146 DirectCatalogUpdates MaxDOPFewNUMA definition TRUE Warning Low Direct Catalog Updates MAXDOP set in accordance with CPU count Avoid using direct catalog update feature Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node DefaultRuleset, DBCC, Deprecated DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported. The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option https://support.microsoft.com/kb/2806535 Database Server Windows Linux OnPremises, ManagedInstance OnPremises [11.0,) [11.0, 13.0) NOT: tempdb
147 DataPurityCheck DbIntegrity definition TRUE Warning Medium Data Purity Check Database Integrity Checks Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command Run 'DBCC CHECKDB' command checks DefaultRuleset, DBCC, DataIntegrity DefaultRuleset, DBCC, Performance, DataIntegrity The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues. The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation. http://support.microsoft.com/kb/923247 https://msdn.microsoft.com/library/ms176064.aspx Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb NOT: tempdb
148 StatSamplingRate DirectCatalogUpdates definition TRUE Warning Low Statistics sampling rate Direct Catalog Updates Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName} Avoid using direct catalog update feature DefaultRuleset, Performance, Statistics DefaultRuleset, DBCC, Deprecated For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results. The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported. https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: tempdb 0.25
149 IndexFragmentation DataPurityCheck definition TRUE Warning Low Index Fragmentation Data Purity Check Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}% Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command DefaultRuleset, Index, Performance DefaultRuleset, DBCC, DataIntegrity The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations. The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues. https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes http://support.microsoft.com/kb/923247 Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb 5
150 StatSamplingRate definition TRUE Low Statistics sampling rate Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName} DefaultRuleset, Performance, Statistics For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results. https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql Database Windows Linux OnPremises, ManagedInstance [11.0,) 0.25
151 IndexFragmentation definition TRUE Medium Index Fragmentation Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}% DefaultRuleset, Index, Performance The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations. https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb 5
152 IndexFragmentation override TRUE Warning [12.0,)
153 XTPHashAvgChainBuckets definition TRUE Warning Medium High avg chain length and empty buckets Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in key values DefaultRuleset, Index, Performance, XTP Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table. https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725 Database Windows Linux OnPremises, ManagedInstance [12.0,) NOT: master model msdb tempdb
154 XTPTooManyBuckets definition TRUE Warning Low Too many buckets Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which wastes memory and marginally slows down full table scans DefaultRuleset, Index, Performance, XTP Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table. https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725 Database Windows Linux OnPremises, ManagedInstance [12.0,) NOT: master model msdb tempdb
155 XTPTooFewBuckets definition TRUE Warning Medium Too few buckets Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which leads to chaining records DefaultRuleset, Index, Performance, XTP Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table. https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725 Database Windows Linux OnPremises, ManagedInstance [12.0,) NOT: master model msdb tempdb
156 XTPRangeIXHealth definition TRUE Warning Low NonClustered index retry amount Review @{IndexFullName} index as its retry count is over @{RetryCountPct}% of total, which indicates possible concurrency issues DefaultRuleset, Index, Performance, XTP When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues. https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql Database Windows Linux OnPremises, ManagedInstance [12.0,) NOT: master model msdb tempdb
157 TF6533Misuse definition TRUE Warning Low 'STRelate' and 'STAsBinary' functions unexpected results due to TF 6533 Disable trace flag 6533 to avoid unexpected results of 'STRelate' and 'STAsBinary' functions DefaultRuleset, TraceFlag, Performance, TF6533 The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions. https://support.microsoft.com/help/3107399 Database Windows Windows Linux OnPremises [11.0.6020, 11.0.6518) NOT: master model msdb tempdb
158 UntrustedConstraints definition TRUE Warning Low Untrusted constraints Execute 'ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name>' statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity DefaultRuleset, Performance, DataIntegrity If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them. https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql Database Windows Linux OnPremises, ManagedInstance [11.0,) NOT: master model msdb tempdb
159 PercentAutogrows definition TRUE Warning Low Database files have growth ratio in percentage Do not use "File Growth In Percent" for Autogrowth setting. Affected files: @{fileName} have growth ratio set in percentage DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options Database Windows Linux OnPremises [11.0,) NOT: master model msdb tempdb
160 StatsUpdate definition TRUE Warning Statistics need to be updated Update stats in @{TableName} table to improve query performance DefaultRuleset, Performance, Statistics, QueryOptimizer The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics Database Windows Linux OnPremises, ManagedInstance [11.0,) 500
161 AdHocQueriesOff definition TRUE Warning Low Option 'ad hoc distributed queries' should be disabled Disable 'ad hoc distributed queries' option DefaultRuleset, Configuration, Security Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login. https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option Server Windows Linux OnPremises [11.0,)
162 AffinityMasksOverlap definition TRUE Warning Low Affinity Mask and Affinity I/O Mask overlapping Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask} DefaultRuleset, Configuration, Performance Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states. https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap Server Windows Linux OnPremises [11.0,)
163 AgentSvcAccNotRecommended definition TRUE Warning Low 'SQL Server Agent' service uses non-recommended account Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not recommended DefaultRuleset, Configuration Running the 'SQL Server Agent' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
164 AgentSvcAccNotRecommended override False Warning Express
165 AgentSvcAccNotSupported definition TRUE Warning Low 'SQL Server Agent' service uses not supported account Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not supported DefaultRuleset, Configuration Running the 'SQL Server Agent' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
166 AgentSvcAccNotSupported override False Warning Express
167 AgentSvcAccSame definition TRUE Warning Low 'SQL Server Agent' and 'SQL Server Database Engine' use same account Use different accounts for 'SQL Server Agent' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::SQLAgent.account}' account DefaultRuleset, Configuration Running the 'SQL Server Agent' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
168 AgentSvcAccSame override False Warning Express
169 AgentSvcStoped definition TRUE Warning Low 'SQL Server Agent' service is stopped Run 'SQL Server Agent' service DefaultRuleset, Configuration The 'SQL Server Agent' service executes jobs, monitors SQL Servers, fires alerts and enables automation for some administrative tasks. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises [11.0,)
170 AgentSvcStoped override False Warning Express
171 AutoSoftNUMAOn definition TRUE Warning Low Auto Soft NUMA should be enabled Turn 'automatic soft-NUMA disabled' option on to avoid inefficient allocation of cores between NUMA nodes DefaultRuleset, Configuration, NUMA Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts. https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server Server Windows Linux OnPremises [13.0,)
172 AzSqlVmSize definition TRUE Warning Information VM size is not memory-optimized Use memory optimized virtual machine sizes for the best performance of SQL Server workloads DefaultRuleset, SqlOnVm, Azure, Performance Memory optimized VM sizes offer a high memory-to-CPU ratio that is great for relational database servers. The DSv2 11-15, Edsv4 series, the M-, and the Mv2- series offer the optimal memory-to-vCore ratio required for OLTP workloads. Both M series VMs offer the highest memory-to-vCore ratio required for mission critical workloads and is also ideal for data warehouse workloads. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices Server AzureSQL
173 BlockingChains definition TRUE Warning Low Blocking chains Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''} DefaultRuleset, Statistics Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource. https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql Database Windows Linux OnPremises [11.0,)
174 BlockProcThreshNotRecommend definition TRUE Warning Low Blocked process threshold is set to recommended value Increase or disable blocked process threshold option. Current value is @{block_threshold} DefaultRuleset, Configuration This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support. https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold Server Windows Linux OnPremises [11.0,) 5
175 BrowserSvcAccSame definition TRUE Warning Low 'SQL Server Browser' and 'SQL Server Database Engine' use same account Use different accounts for 'SQL Server Browser' and 'SQL Server Database Engine'. Now both services use '@{attr::service::SQLBrowser.account}' account DefaultRuleset, Configuration Running the 'SQL Server Browser' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
176 BrowserSvcStoped definition TRUE Warning Low 'SQL Server Browser' service is stopped Run 'SQL Server Browser' service DefaultRuleset, Configuration The 'SQL Server Browser' service is a name resolution service that provides SQL Server connection information to client computers. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises [11.0,)
177 CrossDBOwnershipOff definition TRUE Warning Low Option 'cross db ownership chaining' should be disabled Disable 'cross db ownership chaining' option DefaultRuleset, Configuration, Security Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks. https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server Server Windows Linux OnPremises [11.0,)
178 DefaultTraceOff definition TRUE Warning Low Default trace is enabled Enable 'default trace enabled' option to get troubleshooting assistance DefaultRuleset, Configuration Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option Server Windows Linux OnPremises [11.0,)
179 DiskFragmentationAnalysis definition TRUE Warning Low Disk fragmentation analysis Defragment volume '@{Output.Name}' with physical fragmentation DefaultRuleset, Configuration If you do not defragment your hard disk, the operating system may have to go to several physical locations on the disk to retrieve the database file, making file access slower. To get information about the fragmentation level, this check requires the destination SQL Server to be running under the sysadmin account. https://support.microsoft.com/help/3195161/defragmenting-sql-server-database-disk-drives Server Windows OnPremises [11.0,)
180 DiskPartitionAlignment definition TRUE Warning Low Disk Partition alignment Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset} DefaultRuleset, Performance, Storage Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist. https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100) Server Windows OnPremises [11.0,) 65536
181 DtsSvcAccSame definition TRUE Warning Low 'Integration Services' and 'SQL Server Database Engine' use same account Use different accounts for 'Integration Services' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::MsDtsServer.account}' account DefaultRuleset, Configuration Running the 'Integration Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
182 DtsSvcStoped definition TRUE Warning Low 'Integration Services' service is stopped Run 'Integration Services' service DefaultRuleset, Configuration The 'Integration Services' service provides management support for Integration Services package storage and execution. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises [11.0,)
183 ErrorLogSize definition TRUE Warning Low Error log file size is too big Cycle error log files or revise error log settings. Current error log file size is more than @{threshold} MB. DefaultRuleset, Configuration, Performance Cycling error log files makes it easier to read the error log. https://docs.microsoft.com/sql/tools/configuration-manager/viewing-the-sql-server-error-log Server Windows Linux OnPremises [11.0,) 50
184 FullTextServiceLoadOSResources definition TRUE Warning Low Full-text search option 'load_os_resources' set to default Set full-text search option 'load_os_resources' to @{defaultLoadOSResources} DefaultRuleset, Configuration The full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1. Server Windows Linux OnPremises, ManagedInstance [11.0,)
185 FullTextServiceVerifySignature definition TRUE Warning Low Full-text search option 'verify_signature' set to default Set full-text search option 'load_os_resources' to @{defaultVerifySignature} DefaultRuleset, Configuration, Security The full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded. Server Windows Linux OnPremises, ManagedInstance [11.0,)
186 FullTextSvcAccNotRecommended definition TRUE Warning Low 'Full-text search' service uses non-recommended account Use another account to run 'Full-text search' service. Current account '@{attr::service::MSSQLFDLauncher.account}' is not recommended DefaultRuleset, Configuration Running the 'Full-text search' service under the 'NT AUTHORITY\SYSTEM' account is not recommended for security reasons. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
187 FullTextSvcAccSame definition TRUE Warning Low 'Full-text search' and 'SQL Server Database Engine' use same account Use different accounts for the 'Full-text search' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSSQLFDLauncher.account}' account DefaultRuleset, Configuration Running the 'Full-text search' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
188 FullTextSvcStoped definition TRUE Warning Low 'Full-text search' service is stopped Run 'Full-text search' service DefaultRuleset, Configuration The 'Full-text search' service quickly creates full-text indexes on content and properties of structured and semistructured data to provide document filtering and word-breaking for SQL Server. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises [11.0,)
189 HPLogicalProcessor definition TRUE Warning Low HP Logical Processor issue Update server BIOS to the latest version. It may be affected by the HP Logical Processor issue DefaultRuleset, Performance HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use. https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594 Server Windows OnPremises [11.0,)
190 IndexCreateMemory definition TRUE Warning Low 'index create memory' should be greater than 'min memory per query' Set 'index create memory' to 0 or make it greater than 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB. Current 'min memory per query' is @{min_memory_per_query} KB DefaultRuleset, Configuration, IndexCreateMemory The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option Server Windows Linux OnPremises [11.0,)
191 LightweightPoolingOn definition TRUE Warning Low Lightweight pooling option disabled Disable 'lightweight pooling' option as fiber mode scheduling can decrease performance DefaultRuleset, Configuration, Performance The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode. https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option Server Windows Linux OnPremises [11.0,)
192 LocksOptionNotDefault definition TRUE Warning Low Option 'locks' should be set to default Set 'locks' option to @{recommended_max_lock_number}. Current value is @{locks} DefaultRuleset, Configuration, Performance The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option Server Windows Linux OnPremises [11.0,)
193 MaxDOP1NUMA definition TRUE Warning Low MAXDOP set in accordance with CPU count Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors} DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises [11.0,)
194 MaxDopFewNumaLess16 definition TRUE Warning Low MAXDOP set in accordance with CPU count Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises [13.0,)
195 MaxDopFewNumaOver16 definition TRUE Warning Low MAXDOP set in accordance to CPU count Update MAXDOP configuration option value: @{max_dop}. It should be half the number of logical processors per NUMA node with maximum value of 16 DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises [13.0,)
196 MaxDopFewNumaOver8 definition TRUE Warning Medium MAXDOP set in accordance with CPU count Update MAXDOP configuration option value: @{max_dop}. It should be equal to 8 DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises [11.0, 13.0)
197 MaxMemory definition TRUE Warning Low Max allowed memory Set 'max server memory' value to @{recommended:N0} MB or less to avoid detrimental memory pressure. Current 'max server memory' value is @{max_server_memory:N0}, which is greater than recommended DefaultRuleset, Memory, Performance, MaxMemory Setting the 'max server memory' value too high can cause a single instance of SQL Server to compete for memory with other SQL Server instances hosted on the same machine. However, setting this value too low could cause significant memory pressure and performance problems. https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options Server Windows Linux OnPremises, ManagedInstance [11.0,) 2147483647
198 MaxMemory override TRUE Warning Express 1410
199 MaxMemory override TRUE Warning Standard 131072
200 MaxMemorySystem definition TRUE Warning Low Max server memory exceeds system memory Set 'max server memory' to @{recommended:N0} MB or less to avoid detrimental memory pressure. System memory of @{sysmem:N0} MB is not sufficient for current 'max server memory' setting of @{max_server_memory:N0} MB DefaultRuleset, Memory, Performance, MaxMemory Setting the 'max server memory' value higher than system memory can cause SQL Server to compete for memory with the operating system and processes running on the same machine. https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options Server Windows Linux OnPremises, ManagedInstance [11.0,) 2147483647
201 MaxMemorySystem override TRUE Warning Express 1410
202 MaxMemorySystem override TRUE Warning Standard 131072
203 MinMemoryPerQuery definition TRUE Warning Low Option 'min memory per query' set to default Set 'min memory per query' option to @{recommended_min_memory_per_query} KB. Current value is '@{min_memory_per_query}' DefaultRuleset, Configuration, Memory, Performance The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option Server Windows Linux OnPremises [11.0,)
204 NetworkPacketSize definition TRUE Warning Low Option 'network packet size' set to default Set 'network packet size' option to @{recommended_network_packet_size} bytes. Current value is @{network_packet_size} DefaultRuleset, Configuration, Network The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option Server Windows Linux OnPremises [11.0,)
205 NtfsBlockSizeNotFormatted definition TRUE Warning Low NTFS block size in volumes with database files <> 64KB Set allocation unit size on volume '@{masterFilesVolumeName}' to 64 KB. Current size is @{Output.BlockSize} bytes Set allocation unit size on volume '@{volume_mount_point}' to 64 KB. Current size is @{Output.BlockSize} bytes DefaultRuleset, Performance, Configuration, NTFS A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB. https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server Server Windows OnPremises [11.0,)
206 OlapSvcAccSame NtfsBlockSizeNotFormatted definition override TRUE Warning Medium 'Analysis Services' and 'SQL Server Database Engine' use same account Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account DefaultRuleset, Configuration Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows AzureSQL OnPremises [11.0,)
207 OlapSvcStoped OlapSvcAccSame definition TRUE Warning Low 'Analysis Services' service is stopped 'Analysis Services' and 'SQL Server Database Engine' use same account Run 'Analysis Services' service Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account DefaultRuleset, Configuration The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications. Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
208 OleAutomationProceduresOn OlapSvcStoped definition TRUE Warning Low Option 'Ole Automation Procedures' set to default 'Analysis Services' service is stopped Disable 'Ole Automation Procedures' option to avoid security risks Run 'Analysis Services' service DefaultRuleset, Configuration, Security DefaultRuleset, Configuration Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value). The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications. https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows Linux Windows OnPremises [11.0,)
209 PageFileAutoManaged OleAutomationProceduresOn definition TRUE Warning Low Page file is not automatically managed Option 'Ole Automation Procedures' set to default Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}' Disable 'Ole Automation Procedures' option to avoid security risks DefaultRuleset, Performance, Memory, PageFile, SysAdminReq DefaultRuleset, Configuration, Security Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value). https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option Server Windows Windows Linux OnPremises [11.0,)
210 PageFileAutoManagedAllDrives PageFileAutoManaged definition TRUE Warning Low Page file is not automatically managed Disable 'Automatically manage paging file size for all drives' option Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}' DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth Server Windows @{not=AzureSQL} OnPremises [11.0,)
211 PageFileLess10FreeSpace PageFileAutoManagedAllDrives definition TRUE Warning Low Insufficient page file free space Page file is not automatically managed Revise page file settings. Less than 10% of page file is available Disable 'Automatically manage paging file size for all drives' option DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized. Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth Server Windows Linux Windows OnPremises [11.0,) 0.1
212 PageFileNotConfigured PageFileLess10FreeSpace definition TRUE Warning Low Page file not configured Insufficient page file free space Create page file on server Revise page file settings. Less than 10% of page file is available DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized. https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size Server Windows Windows Linux OnPremises [11.0,) 0.1
213 PageFileOut PageFileNotConfigured definition TRUE Warning Low Memory paged out Page file not configured Revise LPIM settings. Part of SQL Server process memory has been paged out Create page file on server DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the "Dynamic memory management" topic and the "Server memory options" topic in SQL Server Books Online. Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized. https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size Server Windows Linux Windows OnPremises [11.0,)
214 PowerPlanSchemeNotRecommended PageFileOut definition TRUE Warning Low Power plan is High Performance Memory paged out Switch server to High Performance power plan Revise LPIM settings. Part of SQL Server process memory has been paged out DefaultRuleset, Configuration, Performance DefaultRuleset, Performance, Memory, PageFile, SysAdminReq In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution. Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the "Dynamic memory management" topic and the "Server memory options" topic in SQL Server Books Online. https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows Server Windows Windows Linux OnPremises [11.0,)
215 PriorityBoostOn PowerPlanSchemeNotRecommended definition TRUE Critical Medium Option 'priority boost' set to default Power plan is High Performance Set 'priority boost' option to default value Switch server to High Performance power plan DefaultRuleset, Configuration, Performance The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'. In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan Server Windows OnPremises [11.0,)
216 QueryWaitNotDefault PriorityBoostOn definition TRUE Critical High Option 'query wait' set to default Option 'priority boost' set to default Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries Set 'priority boost' option to default value DefaultRuleset, Configuration DefaultRuleset, Configuration, Performance Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost. The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option Server Windows Linux Windows OnPremises [11.0,)
217 RecoveryIntervalOn QueryWaitNotDefault definition TRUE Warning High Option 'recovery interval' set to default Option 'query wait' set to default Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval} Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries DefaultRuleset, Configuration, Performance DefaultRuleset, Configuration The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes. Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option Server Windows Linux OnPremises [11.0,)
218 RemoteDacClusterOn RecoveryIntervalOn definition TRUE Warning Low Remote admin connections enabled on cluster (DAC) Option 'recovery interval' set to default Enable 'remote admin connections' option Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval} DefaultRuleset, Configuration DefaultRuleset, Configuration, Performance SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems. The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes. https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option Server Windows Linux OnPremises [11.0,)
219 RemoteQueryTimeout RemoteDacClusterOn definition TRUE Warning Low Option 'remote query timeout' set to default Remote admin connections enabled on cluster (DAC) Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout} Enable 'remote admin connections' option DefaultRuleset, Configuration The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query. SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators Server Windows Linux OnPremises [11.0,)
220 RsSvcAccSame RemoteQueryTimeout definition TRUE Warning Low 'Reporting Services' and 'SQL Server Database Engine' use same account Option 'remote query timeout' set to default Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout} DefaultRuleset, Configuration Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option Server Windows Windows Linux OnPremises [11.0,)
221 RsSvcStoped RsSvcAccSame definition TRUE Warning Low 'Reporting Services' service is stopped 'Reporting Services' and 'SQL Server Database Engine' use same account Run 'Reporting Services' service Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account DefaultRuleset, Configuration 'The Reporting Services' service manages, executes, creates, schedules and delivers reports. Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
222 ScanStartupProcs RsSvcStoped definition TRUE Warning Low Option 'scan for startup procs' disabled on replication servers 'Reporting Services' service is stopped Disable 'scan for startup procs' option for servers that participate in replication Run 'Reporting Services' service DefaultRuleset, Configuration Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication. 'The Reporting Services' service manages, executes, creates, schedules and delivers reports. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises [11.0,)
223 SqlSvcAccNotRecommended ScanStartupProcs definition TRUE Warning Low 'SQL Server Database Engine' service uses non-recommended account Option 'scan for startup procs' disabled on replication servers Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended Disable 'scan for startup procs' option for servers that participate in replication DefaultRuleset, Configuration Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons. Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option Server Windows OnPremises [11.0,)
224 SqlSvcAccNotSupported SqlSvcAccNotRecommended definition TRUE Warning Low 'SQL Server Database Engine' service uses not supported account 'SQL Server Database Engine' service uses non-recommended account Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended DefaultRuleset, Configuration Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported. Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises [11.0,)
225 ThreadExhaustionCPUBound SqlSvcAccNotSupported definition TRUE Warning Low Worker thread exhaustion on CPU-bound system 'SQL Server Database Engine' service uses not supported account Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}' Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported DefaultRuleset, Performance DefaultRuleset, Configuration Consider overall runnable tasks count and schedulers work queue count. Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows Linux Windows OnPremises [11.0,)
226 ThreadExhaustionNotCPUBound ThreadExhaustionCPUBound definition TRUE Warning Low Possible worker thread exhaustion on non-CPU-bound system Worker thread exhaustion on CPU-bound system Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}') Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}' DefaultRuleset, Performance Consider overall runnable tasks count and schedulers work queue count. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows Linux OnPremises [11.0,)
227 ThresholdForParallelism ThreadExhaustionNotCPUBound definition TRUE Warning Low Option 'cost threshold for parallelism' set to default Possible worker thread exhaustion on non-CPU-bound system Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism} Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}') DefaultRuleset, Configuration, Performance DefaultRuleset, Performance The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5. Consider overall runnable tasks count and schedulers work queue count. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows Linux OnPremises [11.0,)
228 WorkerThreadsLargeX64 ThresholdForParallelism definition TRUE Warning Medium Option 'max worker threads' set to recommended value on x64 system Option 'cost threshold for parallelism' set to default Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads}) Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism} DefaultRuleset, Configuration, Performance, CPU DefaultRuleset, Configuration, Performance The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup. The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option Server Windows Windows Linux OnPremises [11.0,)
229 WorkerThreadsLargeX86 WorkerThreadsLargeX64 definition TRUE Warning Low Option 'max worker threads' set to recommended value on x86 system Option 'max worker threads' set to recommended value on x64 system Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads}) Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads}) DefaultRuleset, Configuration, Performance, CPU The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows OnPremises [11.0,)
230 XpCmdShellOn WorkerThreadsLargeX86 definition TRUE Warning Low Option 'xp_cmdshell' is disabled Option 'max worker threads' set to recommended value on x86 system Disable 'xp_cmdshell' as it exposes to security risks Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads}) DefaultRuleset, Configuration DefaultRuleset, Configuration, Performance, CPU The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup. https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows Linux Windows OnPremises [11.0,)
231 XpCmdShellOn definition TRUE Low Option 'xp_cmdshell' is disabled Disable 'xp_cmdshell' as it exposes to security risks DefaultRuleset, Configuration The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option Server Windows Linux OnPremises [11.0,)
232 AzDataDiskCache definition TRUE High Azure disk caching for data files Set caching to 'ReadOnly' for disk @{name} (@{volume_mount_point}) as it is used for storing data files. Current setting: '@{caching}' DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Uncached IOPS and throughput plus Cached IOPS and throughput will yield the total possible performance available from the virtual machine within the VMs limits. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies Database Windows AzureSQL OnPremises [11.0,) NOT: tempdb
233 AzDataOnDataDisks definition TRUE Medium Data files on Azure data disks Move data files from @{volume_mount_point} to Premium SSD data disk(s) DefaultRuleset, DBFileConfiguration, DBConfiguration Azure data disks can be configured for optimal data security and performance. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Database Windows AzureSQL OnPremises [11.0,) NOT: tempdb
234 AzDataOnDataDisks override TRUE Low master model msdb
235 AzDbDefaultLocation definition TRUE Medium Database default locations Configure default @{setting_name} file location DefaultRuleset, Configuration, Performance Default database file location setting makes new data and transaction log files placed on drives configured for this specific workload. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureSQL OnPremises [11.0,)
236 AzDiskColumnCount definition TRUE Medium Storage spaces disk column count Use all @{poolDiskCount} physical disks of storage pool for virtual disk (@{volume_mount_point}). @{columnCount} physical disk(s) are used now. DefaultRuleset, DBFileConfiguration, DBConfiguration, Performance Increasing virtual disk column count improves the disk's performance. The number of disks in the pool is the maximum available number of columns. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows OnPremises [11.0,)
237 AzErrorLogLocation definition TRUE Medium Error log and default trace files on Azure data disk Move error log and default trace files to data disk DefaultRuleset, Configuration, Performance Storing error log and default trace files on data disk improves performance. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureSQL OnPremises [11.0,)
238 AzPremSsdDataFiles definition TRUE High Use premium SSDs for SQL Server data files Move data files from @{volume_mount_point} to Premium SSD disk DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Standard HDDs and SSDs have varying latencies and bandwidth and are only recommended for dev/test workloads. Production workloads should use premium SSDs. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage Database Windows AzureSQL OnPremises [11.0,) NOT: tempDb
239 AzPremSsdDataFiles override TRUE Low master model msdb
240 AzTempDbFileLocation definition TRUE High Tempdb files on Azure temp drive Move tempdb files from @{volume_mount_point} to the local ephemeral SSD (temp disk) DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Storing tempdb files on a local ephemeral SSD improves the performance of workloads that use temporary objects heavily (e.g. queries handling large recordsets, index rebuilds, row versioning isolation levels, temp tables, and triggers). https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Database Windows AzureSQL OnPremises [11.0,) tempdb
241 AzTranLogDiskCache definition TRUE High Azure disk caching for transaction logs Set caching to 'None' for disk @{name} (@{volume_mount_point}) as it is used for storing transaction log files. Current setting: '@{caching}' DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration There is no performance benefit to enabling caching for the Transaction log disk, and in fact having either Read-only or Read/Write caching enabled on the log drive can decrease the amount of cache available for reads on the data drive https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies Database Windows AzureSQL OnPremises [11.0,) NOT: tempdb
242 InstantFileInitialization definition TRUE High Instant file initialization (IFI) is disabled Enable instant file initialization DefaultRuleset, DBConfiguration, Performance Instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files. https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization Server Windows OnPremises [11.0.7001,12.0) [12.0.5000, )
243 LockedPagesInMemory definition TRUE High Lock pages in memory Enable the 'Lock pages in memory' option DefaultRuleset, Performance, Memory This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureSQL OnPremises [11.0,)
244 LockedPagesInMemory override TRUE Warning [11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.4001,)
245 PlansUseRatioNotOptimal definition TRUE Information Cache needs to be cleared of single-use plans Check if the plan cache needs to be cleared. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0}) DefaultRuleset, Performance, QueryOptimizer Setting the 'Optimize for ad hoc workloads' option to 1 affects only new plans; plans that are already in the plan cache are unaffected. Make sure to check whether you need to clear the cache from the old single-use plans that may continue to remain. https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option Server Windows Linux OnPremises, ManagedInstance [11.0,) 0.5
File diff suppressed because it is too large Load Diff