Updated DefaultRuleset.csv

Removed unnecessary columns and reordered columns, kept only rule definitions (removed overrides)
This commit is contained in:
Alex Protsenko
2019-12-17 18:18:36 +03:00
committed by GitHub
parent 3298c6a79c
commit 3759465a9d
@@ -1,234 +1,194 @@
,id,itemType,tags,displayName,description,message,helpLink,probes,condition,target.type,target.platform,target.engineEdition,target.version,target.name.not,condition.equal,level,condition.in,condition.not.in,targetFilter.version,condition.and,condition.not,condition.@HintUsageCount,enabled,condition.less,condition.@ConstraintName,threshold,condition.not.equal,condition.@page_verify_option,condition.@filesizeCount,condition.@FileName,target.name,condition.@Object_Name,condition.@publication,error_ids,severityN,condition.le,condition.@IsDisabled,ReadsThreshold,condition.ge,targetFilter.type,targetFilter.name
0,AutoCreateStats,definition,"['DefaultRuleset', 'Performance', 'Statistics', 'QueryOptimizer']",Auto-Create Statistics should be on,"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.",Turn Auto-Create Statistics option on to improve query performance.,https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics,['DatabaseConfiguration'],@is_auto_create_stats_on,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
1,AutoUpdateStats,definition,"['DefaultRuleset', 'Performance', 'Statistics', 'QueryOptimizer']",Auto-Update Statistics should be on,"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.",Turn Auto-Update Statistics option on to improve query performance.,https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics,['DatabaseConfiguration'],@is_auto_update_stats_on,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
2,QueryStoreOn,definition,"['DefaultRuleset', 'Performance', 'QueryStore', 'Statistics']",Query Store should be active,"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.",Make sure Query Store actual operation mode is 'Read Write' to keep your performance analysis accurate,https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0,)",/^(master|tempdb|model)$/,"['@query_store_state', 2]",Warning,,,,,,,,,,,,,,,,,,,,,,,,,
3,TF174,definition,"['DefaultRuleset', 'TraceFlag', 'Memory', 'Performance']",TF 174 increases the plan cache bucket count,"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.",Consider enabling trace flag 174 to increase the plan cache bucket count.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"['[11.0.3368,12.0)', '[12.0.2480,13.0)', '[13.0,)']",,,Information,"[174, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
4,TF634,definition,"['DefaultRuleset', 'TraceFlag', 'Memory', 'Performance', 'ColumnStore']",TF 634 disables background columnstore compression,"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.",Trace Flag 634 disables the background columnstore compression task. 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,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,,"[634, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
5,TF652,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'Memory', 'Pages']",TF 652 disables page pre-fetching scans,"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.",Trace Flag 652 disables Page Pre-fetching Scans. Verify need to set a non-default trace flag with the current system build and configuration.,http://support.microsoft.com/kb/920093,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Information,,"[652, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
6,TF661,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 661 disables Ghost Cleanup Task,"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.",Trace flag 661 disables the background ghost cleanup task. Verify need to set a non-default trace flag with the current system build and configuration.,https://support.microsoft.com/help/920093,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Information,,"[661, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
7,TF834,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'Memory', 'ColumnStore']",TF 834 enables large-page allocations,"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.",Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads.,https://support.microsoft.com/help/4465518,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,"[834, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
8,TF845,definition,"['DefaultRuleset', 'TraceFlag', 'Memory', 'Performance']",TF 845 is not needed in SQL Server 2012 and higher versions,"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.",Disable trace flag 845 in SQL Server 2012 and higher versions.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,"[845, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
9,TF902,definition,"['DefaultRuleset', 'TraceFlag', 'UpdateIssues']",TF 902: Database Upgrade Bypass should be disabled,"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.",Disable trace flag 902 which bypasses database upgrade.,https://support.microsoft.com/help/2163980,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,"[902, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
10,TF1117,definition,"['DefaultRuleset', 'TraceFlag', 'DBFileConfiguration', 'Performance']",TF 1117 Enables Filegroup-level Autogrow,"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.",Consider enabling trace flag 1117 to enable filegroup autogrow.,https://support.microsoft.com/help/2154845,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Information,"[1117, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
11,TF1117,override,,TF 1117 has no effect 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.",Disable trace flag 1117 in SQL Server 2016 and higher versions.,https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options,,,,,,,,,Warning,,"[1117, '@TraceFlag']","[13.0,)",,,,,,,,,,,,,,,,,,,,,,
12,TF1118,definition,"['DefaultRuleset', 'TraceFlag', 'Memory', 'Performance', 'Pages']",TF 1118 Disables Single Page Allocations,"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.",Consider enabling trace flag 1118 to force page allocations on uniform extents.,https://support.microsoft.com/help/328551,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Information,"[1118, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
13,TF1118,override,,TF 1118 has no effect 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.",Disable trace flag 1118 in SQL Server 2016 and higher versions.,https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options,,,,,,,,,Warning,,"[1118, '@TraceFlag']","[13.0,)",,,,,,,,,,,,,,,,,,,,,,
14,TF1204,definition,"['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance']",TF 1204 returns deadlock information,"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.",Trace Flag 1204 returns deadlock information.,https://support.microsoft.com/help/832524,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,,"[1204, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
15,TF1211,definition,"['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance']",TF 1211: Lock Escalation should be enabled,"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.",Disable trace flag 1211 to allow lock escalation.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[1211, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
16,TF1222,definition,"['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance']",TF 1222 returns deadlock information,"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.",Trace Flag 1222 returns deadlock information.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,,"[1222, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
17,TF1224,definition,"['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance']",TF 1224 should be disabled,"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.",Disable trace flag 1224 to allow lock escalation.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[1224, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
18,TF1229,definition,"['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance', 'CPU']",TF 1229: Lock Partitioning should be enabled,"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.",Disable trace flag 1229 to allow lock partitioning.,https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[1229, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
19,TF1236,definition,"['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance']",TF 1236: Database Lock Partitioning should be enabled,"Trace Flag 1236 enables database-level lock partitioning.
Lock Partitioning is utilized to improve the scalability characteristics on larger systems.",Enable trace Flag 1236 to allow database lock partitioning.,https://support.microsoft.com/help/2926217,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,"[1236, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
20,TF1236,override,,"TF 1236 is not needed 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.","Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions.",,,,,,,,,,Warning,,"[1236, '@TraceFlag']","['[11.0.6020,12.0)', '[12.0.4100,)']",,,,,,,,,,,,,,,,,,,,,,
21,TF1462,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'AvailabilityGroups']",TF 1462 should be disabled to allow Log Stream Compression,"Trace Flag 1462 disables log stream compression for asynchronous availability groups.
This feature is enabled by default on asynchronous replicas to optimize network bandwidth.",Disable trace flag 1462 to allow log stream compression.,https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[1462, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
22,TF2312,definition,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']",TF 2312 sets the default Cardinality Estimation model,"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).",Trace Flag 2312 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/2801413,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,"[2312, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
23,TF2312,override,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']",,,,,,,,,,,,,Information,,,"[12.0, 13.0)",,,,,,,,,,,,,,,,,,,,,,
24,TF2312,override,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']",,,"TF2312 enables New CE model to SQL Server 2014 or above versions, dependent of the compatibility level of the database",,,,,,,,,,Information,,,"[13.0, )",,,,,,,,,,,,,,,,,,,,,,
25,TF2330,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'Indexes']",TF 2330 disables recording of index usage stats,"Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005.",Trace Flag 2330 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://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[2330, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
26,TF2340,definition,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']",TF 2340 disables Batch Sorts for optimized nested loops joins,"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.",Trace Flag 2340 disables Batch Sorts for optimized nested loops joins.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,,"[2340, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
27,TF2371,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'Statistics']",TF 2371 enables a linear recompilation threshold for 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.",Enable trace Flag 2371 to allow a linear recompilation threshold for statistics.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Information,"[2371, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
28,TF2371,override,,TF 2371 has no effect in SQL Server 2016 and higher versions,"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.",Disable trace flag 2371 in SQL Server 2016 and higher versions when all databases are at compatibility level 130 and above.,,,,,,,,,,Warning,,"[2371, '@TraceFlag']","[13.0,)",,,,,,,,,,,,,,,,,,,,,,
29,TF2389,definition,"['DefaultRuleset', 'TraceFlag', 'Statistics', 'Performance']",TF 2389 enables automatic statistics for Ascending Keys,"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.",Trace Flag 2389 enables automatic statistics for ascending keys. Verify need to set a non-default trace flag with the current system build and configuration.,https://support.microsoft.com/help/2801413,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Information,,"[2389, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
30,TF2390,definition,"['DefaultRuleset', 'TraceFlag', 'Statistics', 'Performance', 'Indexes']",TF 2390 enables automatic statistics for Ascending or Unknown Keys,"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.",Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Verify need to set a non-default trace flag with the current system build and configuration.,https://support.microsoft.com/help/2801413,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Information,,"[2390, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
31,TF2528,definition,"['DefaultRuleset', 'TraceFlag', 'DataIntegrity', 'DBCC']",TF 2528 disables parallel operations for integrity checking,"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.",Trace Flag 2528 disables parallel operations for integrity checking.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[2528, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
32,TF2549,definition,"['DefaultRuleset', 'TraceFlag', 'DBCC']",TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB,"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.",Trace Flag 2549 forces DBCC CHECKDB to treat different physical files as one logical file.,https://support.microsoft.com/help/2634571,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[2549, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
33,TF2562,definition,"['DefaultRuleset', 'TraceFlag', 'DBCC', 'TempDB']",TF 2562 forces the DBCC CHECKDB command to execute in a single batch,"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.",Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch.,https://support.microsoft.com/help/2634571,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[2562, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
34,TF2566,definition,"['DefaultRuleset', 'TraceFlag', 'DBCC', 'DataIntegrity']",TF 2566 disables default data purity check,"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.",Trace Flag 2566 disables default data purity check.,https://support.microsoft.com/help/945770,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[2566, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
35,TF3023,definition,"['DefaultRuleset', 'TraceFlag', 'Backup']",TF 3023 enables Backup Checksum option by default,"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.",Trace Flag 3023 enables CHECKSUM option as default for BACKUP command.,https://support.microsoft.com/help/2656988,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Information,,"[3023, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
36,TF3042,definition,"['DefaultRuleset', 'TraceFlag', 'Backup']",TF 3042 bypasses the default backup compression pre-allocation algorithm,"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.",Trace Flag 3042 enables the bypass of the default backup compression.,https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,,"[3042, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
37,TF3226,definition,"['DefaultRuleset', 'TraceFlag', 'Backup']",TF 3226 disables ErrorLog entries for every successful backup operation,"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.",Trace Flag 3226 disables ErrorLog entries for every successful backup operation.,https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Information,,"[3226, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
38,TF4136,override,,,"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.",Trace Flag 4136 disables parameter sniffing. Verify need to set a non-default trace flag with the current system build and configuration.,,,,,,,,,,Information,,,"[11.0.2316,)",,,,,,,,,,,,,,,,,,,,,,
39,TF4136,definition,"['DefaultRuleset', 'TraceFlag']",TF 4136 disables Parameter Sniffing,"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.",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.,https://support.microsoft.com/help/980653,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[4136, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
40,TF4137,override,,,"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.",Trace Flag 4137 causes SQL Server to generate a plan using partial correlation of filters. Verify need to set a non-default trace flag with the current system build and configuration.,,,,,,,,,,Information,,,"[11.0.2316,)",,,,,,,,,,,,,,,,,,,,,,
41,TF4137,definition,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']",TF 4137 causes plans to use partial correlation for filters,"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.",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.,https://support.microsoft.com/help/2658214,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[4137, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
42,TF4138,override,,,"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.",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.,,,,,,,,,,Information,,,"[11.0.2325,)",,,,,,,,,,,,,,,,,,,,,,
43,TF4138,definition,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']",TF 4138 causes plans to not use Row Goal adjustments,"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. However it does not apply to this SQL Server version.
Verify need to set a Non-default trace flag with current system build and configuration.",Trace flag 4138 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/2667211,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[4138, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
44,TF4139,override,,,"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.",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.,,,,,,,,,,Information,,,"['[11.0.3431,11.0.5058)', '[11.0.5532,)']",,,,,,,,,,,,,,,,,,,,,,
45,TF4139,definition,"['DefaultRuleset', 'TraceFlag', 'Statistics']",TF 4139 enables automatic statistics for any key ordering,"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.",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.,https://support.microsoft.com/help/2952101,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,"[4139, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
46,TF4199,definition,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer']",TF 4199 enables Query Optimizer fixes,Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs.,Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration.,http://support.microsoft.com/help/974006,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0, 14.0)",,,Information,,"[4199, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
47,TF6498,override,,,,Trace Flag 6498 enables concurrent large queries.,,,,,,,,,,Information,,,"['[12.0.2474,12.0.2480]', '[12.0.4416,12.0.5000)']",,,,,,,,,,,,,,,,,,,,,,
48,TF6498,override,,,"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.","Disable trace flag 6498 in SQL Server 2014 SP2, SQL Server 2016 and higher versions.",,,,,,,,,,Warning,,,"[12.0.5000,)",,,,,,,,,,,,,,,,,,,,,,
49,TF6498,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'Memory']",TF 6498 enables additional concurrent large queries,"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.",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.,https://support.microsoft.com/help/3024815,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,"[6498, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
50,TF6532,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 6532 enables performance improvements for Spatial data,"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.",Enable trace flag 6532 to enable performance improvements for Spatial data.,https://support.microsoft.com/help/3107399,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"['[11.0.6020,11.0.6518)']",,,Information,"[6532, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
51,TF6532.6533,override,,,"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.",Enable trace flag 6532 and trace flag 6533 to enable performance improvements for Spatial data.,,,,,,,,,,Information,,,"['[11.0.6518,12.0)', '[12.0.5000,13.0)']","[{'in': [6532, '@TraceFlag']}, {'in': [6533, '@TraceFlag']}]",,,,,,,,,,,,,,,,,,,,,
52,TF6532.6533,override,,,,Disable trace flag 6532 in SQL Server 2016 and higher versions.,,,,,,,,,,Warning,,,"[13.0,)",,,,,,,,,,,,,,,,,,,,,,
53,TF6532.6533,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 6532 and TF 6533 enable performance improvements for Spatial data,"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 do 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/3107399,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,,,"[{'not': {'in': [6532, '@TraceFlag']}}, {'not': {'in': [6533, '@TraceFlag']}}]",,,,,,,,,,,,,,,,,,,,,
54,TF6534,override,,,"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.",Enable trace flag 6534 to enable performance improvement of query operations with spatial data types.,,,,,,,,,,Information,"[6534, '@TraceFlag']",,"['[11.0.6020,12.0)', '[12.0.5000,13.0)']",,,,,,,,,,,,,,,,,,,,,,
55,TF6534,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 6534 enables performance improvements for Spatial data,"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.",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.,https://support.microsoft.com/help/3107399,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,"[6534, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
56,TF7412,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting,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.,Enable trace flag 7412 to enables the lightweight profiling infrastructure for live query performance troubleshooting.,https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure,['EnabledGlobalTraceFlags'],,Server,/^(Windows|Linux)$/,OnPremises,"[13.0.4001,15.0)",,,Information,"[7412, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,,
57,TF9024,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'NUMA', 'Memory', 'CPU']",TF 9024 converts a global log pool memory object into NUMA node partitioned memory object,TF9024 converts a global log pool memory object into NUMA node partitioned memory object.,Verify need to set a Non-default TF with current system build and configuration.,https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,,,,Warning,,"[9024, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
58,TF9024,override,,,,Consider enabling TF9024 to convert global log pool memory objects into NUMA node partitioned memory objects.,,"['EnabledGlobalTraceFlags', 'ServerInstanceConfiguration']","[{'in': [9024, '@TraceFlag']}, {'gt': [8, {'div': ['@online_logical_processors', '@numa_nodes']}]}]",,,,,,,Information,,,"['[11.0.3349, 11.0.6020)', '[12.0, 12.0.4100)']",,,,,,,,,,,,,,,,,,,,,,
59,TF9024,override,,,,"TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above.",,,,,,,,,,Warning,,,"['[11.0.6020, 12.0)', '[12.0.4100,)']",,,,,,,,,,,,,,,,,,,,,,
60,TF8048,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'NUMA', 'CPU', 'Memory']",TF 8048 converts NUMA partitioned memory objects into CPU partitioned,TF 8048 converts NUMA partitioned memory objects into CPU partitioned.,Verify need to set a Non-default TF with current system build and configuration.,https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,,,,Warning,,"[8048, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
61,TF8048,override,,,,"TF8048 is not needed in SQL Server 2014 SP2, SQL Server 2016 and above.",,,,,,,,,,Warning,,,"[12.0.4100,)",,,,,,,,,,,,,,,,,,,,,,
62,TF8048,override,,,,Consider enabling TF 8048 to convert NUMA partitioned memory objects into CPU partitioned.,,"['EnabledGlobalTraceFlags', 'ServerInstanceConfiguration']","[{'in': [8048, '@TraceFlag']}, {'gt': [8, {'div': ['@online_logical_processors', '@numa_nodes']}]}]",,,,,,,Information,,,"[11.0, 12.0.4100)",,,,,,,,,,,,,,,,,,,,,,
63,DeprecatedFeatures,definition,"['DefaultRuleset', 'Deprecated', 'Security', 'UpdateIssues', 'Performance']",Deprecated or discontinued features should not be used,This check detects deprecated or discontinued features used on target SQL Server instance. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.,Detected deprecated or discontinued feature uses: @{DeprecatedFeature}. We recommend to replace them with features actual for SQL Server version @{ProductVersion}.,https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object,"['DeprecatedFeaturesStats', 'SQLServerVersion']",,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,"['@DeprecatedFeature', '']",Warning,,,,,,,,,,,,,,,,,,,,,,,,,
64,SystemHealthSession,definition,"['DefaultRuleset', 'XEvent', 'SystemHealth']",system_health XEvent session is not active,"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.",Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer.,https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session,['XEvent.SystemHealth'],@XEvent.SystemHealthCount,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
65,SPServerDiagnosticsSession,definition,"['DefaultRuleset', 'XEvent', 'SystemHealth']",sp_server_diagnostics xEvent session is not active,"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.",Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer.,https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql,['XEvent.SPServerDiagnostics'],@XEvent.SPServerDiagnostics,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
66,BlackboxTrace,definition,"['DefaultRuleset', 'Traces']",Blackbox trace is configured and running,"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.",Make sure you still need the blackbox trace and stop it otherwise.,https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-trace-create-transact-sql,['CountBlackBoxTraces'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,@BlackBoxTraceCount,,,,,,,,,,,,,,,,,,,,
67,DefaultTrace,definition,"['DefaultRuleset', 'Traces']",No default trace was found or is not active,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.,Make sure that there is enough space for SQL Server to write the default trace file. Then have the default trace run by disabling and re-enabling it.,https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled,['CountDefaultTraces'],@DefaultTraceCount,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
68,HintsStatistics,definition,"['DefaultRuleset', 'QueryOptimizer', 'Performance', 'Statistics']",Hints are being used,"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.","We recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators, because the SQL Server Query Optimizer typically selects the best execution plan for a query.",https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql,['Hints.InstanceStatistics'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Information,,,,,,0,,,,,,,,,,,,,,,,,,,
69,HintsUsageInModules,definition,"['DefaultRuleset', 'QueryOptimizer', 'Performance', 'Statistics']",Hints usage in modules,"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.",@{Hint} was used in @{type_desc} @{Schema_Name}.@{Object_Name}.,https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql,['Hints.ModuleUsage'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Information,,,,,,,FALSE,,,,,,,,,,,,,,,,,,
70,PlansUseRatio,definition,"['DefaultRuleset', 'Performance', 'QueryOptimizer']",Amount of single use plans in cache is high,Single use plans waste system resources.,Amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0}). Consider enabling the Optimize for ad hoc workloads setting on heavy OLTP ad-hoc workloads to conserve resources.,https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option,['CachedPlans.SingleUseRatio'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,"['@SingleUsePlansUseRatio', 0.5]",,,,,,,,,,,,,,,,,
71,HypotheticalIndexes,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Hypothetical indexes found,"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.",Index @{IndexName} for @{Schema}.@{Object} is marked as hypothetical. It is recommended to drop hypothetical index @{IndexName} as soon as possible.,https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes,['Hypothetical.Indexes'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
72,HypotheticalStatistics,definition,"['DefaultRuleset', 'Statistics']",Hypothetical statistics found,"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.",Statistics @{StatName} for @{Schema}.@{Object} is hypothetical. It is recommended to drop hypothetical statistics @{StatName} as soon as possible.,https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes,['Hypothetical.Statistics'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
73,LatestCU,definition,"['DefaultRuleset', 'Security', 'UpdateIssues']",SQL Server instance is not up to date,"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).",Product version @{ProductVersion} is not the latest available. We recommend keeping your SQL Server up to date and install Service Packs and Cumulative Updates as they are released.,"https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an, https://docs.microsoft.com/sql/database-engine/install-windows/install-sql-server-servicing-updates",['SQLServerVersion'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
74,LatestCU,override,,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, https://docs.microsoft.com/sql/database-engine/install-windows/install-sql-server-servicing-updates",,TRUE,,,,,,,Warning,,,"['[11.0.7001, 12.0)', '[12.0.6329, 13.0)', '[13.0.5492, 14.0)', '[14.0.3238, 15.0)', '[15.0.2070,)']",,,,,,,,,,,,,,,,,,,,,,
75,FKNoIndexes,definition,"['DefaultRuleset', 'Performance', 'Indexes']",Foreign key constraints should have corresponding 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.",Create a corresponding index for each foreign key. There is no index on the following foreign keys: @{ConstraintName}.,https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints,['FKNoIndexes'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
76,MissedIndexes,definition,"['DefaultRuleset', 'Performance', 'Indexes']",Potentially missing indexes,Potentially missing indexes were found based on query history. It may be important to revise them.,Create an index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #},https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide,['MissedIndexes'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Information,,,,,,,,,,,,,,,,,,,,,,,,,
77,FullBackup,definition,"['DefaultRuleset', 'Backup']",Full backup is missed or outdated,Database doesn't have any full backup or the latest full backup is over 7 days.,The last full backup had been created more than @{threshold} days ago. Create a new full backup.,https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server,['DatabaseBackups'],,Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(model|tempdb)$/,,Warning,,,,,,,,"['@LastFullBackup', {'mul': ['@threshold', 24]}]",,7,"['@LastFullBackup', None]",,,,,,,,,,,,,,
78,OutdatedTranLogBackup,definition,"['DefaultRuleset', 'Backup']",Transaction Log backup is missed or outdated,"Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H.",Create a backup of Transaction Log. Database recovery model: @{recovery_model_desc},https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server,['DatabaseBackups'],,Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,"['@LastTLBackup', 24]",,,"['@LastTLBackup', None]",,,,,,,,,,,,,,
79,DbDiffCollation,definition,"['DefaultRuleset', 'DBConfiguration', 'Collation']",Database collation doesn't match the collation of master,"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.",Keep database collation the same as the collation for master or model,https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,"['@collation_name', '@master_collation']",Warning,,,,,,,,,,,,,,,,,,,,,,,,,
80,AutoClose,definition,"['DefaultRuleset', 'Performance', 'DBConfiguration']",Auto Close Option should be OFF,"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.",Set AUTO_CLOSE option to OFF,https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,@is_auto_close_on,,,,,,,,,,,,,,,,,,,,
81,AutoShrink,definition,"['DefaultRuleset', 'DBConfiguration', 'Performance']",Auto Shrink Option should be OFF,"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.",Set AUTO_SHRINK option to OFF,https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,@is_auto_shrink_on,,,,,,,,,,,,,,,,,,,,
82,PageVerify,definition,"['DefaultRuleset', 'DBConfiguration', 'DataIntegrity']",PAGE_VERIFY option should be CHECKSUM,"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.",Set PAGE_VERIFY option to CHECKSUM,https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,,,,,,,,2,,,,,,,,,,,,,
83,DbChaining,definition,"['DefaultRuleset', 'DBConfiguration', 'Security']",Cross-Database Access should be disabled,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.,Set DB_CHAINING option to OFF,https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,@is_db_chaining_on,,,,,,,,,,,,,,,,,,,,
84,AutoCreateStatsIncremental,definition,"['DefaultRuleset', 'DBConfiguration', 'Statistics', 'Performance']",Incremental option of auto stats should be ON,"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.",Set AUTO_CREATE_STATISTICS to ON and set INCREMENTAL to ON,https://docs.microsoft.com/sql/relational-databases/statistics/statistics,['DatabaseConfiguration'],@is_auto_create_stats_incremental_on,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[12.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
85,TrustWorthy,definition,"['DefaultRuleset', 'DBConfiguration', 'Security']",TRUSTWORTHY should be OFF,"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.",Set TRUSTWORTHY option to OFF,https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,@is_trustworthy_on,,,,,,,,,,,,,,,,,,,,
86,ParameterizationNotSimple,definition,"['DefaultRuleset', 'DBConfiguration', 'Performance', 'QueryOptimizer']",PARAMETERIZATION should be SIMPLE,"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.","Set PARAMETERIZATION = SIMPLE and use forced parameterization only on a certain class of queries, instead of all queries",https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides,['DatabaseConfiguration'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|msdb|tempdb)$/,,Warning,,,,,@is_parameterization_forced,,,,,,,,,,,,,,,,,,,,
87,TempDBFilesNotSameSize,definition,"['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration']",TempDB data files are not the same size,We recommend that you create all TempDB data files at the same size.,Make all TempDB data files the same size,https://support.microsoft.com/kb/2154845,['TempDBFiles'],,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,,,,,,,,,1,,,,,,,,,,,,
88,TempDBFilesMultiple4,definition,"['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration']",Number of TempDB data files should be in multiples of 4,"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.",Make sure number of TempDB data files is in multiples of 4,https://support.microsoft.com/kb/2154845,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration']","[{'less': ['@online_logical_processors', 8]}, {'equal': [{'mod': ['@physical_name', 4]}, 0]}]",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
89,TempDBFiles1PerCPU,definition,"['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration']",Number of TempDB data files should depend on CPU count,"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.",Make sure to have 1 data file per logical processor (processors count: @{online_logical_processors}),https://support.microsoft.com/kb/2154845,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration']","[{'greater': ['@online_logical_processors', 8]}, {'greaterequal': ['@physical_name', '@online_logical_processors']}]",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
90,TempDBFilesNotLess8,definition,"['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration']",Number of TempDB data files should be at least 8,"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.","Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8",https://support.microsoft.com/kb/2154845,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration']","[{'less': ['@online_logical_processors', 9]}, {'greater': ['@physical_name', 7]}]",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
91,TempDBFilesAutoGrowth,definition,"['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration']",TempDB data files have different auto growth settings,"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.",Make Autogrowth settings the same for each TempDB data file,https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'growth': 'count', 'is_percent_growth': 'count'}}}]",,Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,,Warning,,,,"[{'@growth': 1}, {'@is_percent_growth': 1}]",,,,,,,,,,,,,,,,,,,,,
92,FilesAutogrowth,definition,"['DefaultRuleset', 'Performance', 'DBFileConfiguration']",Database files have Autogrowth setting over 1GB,"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.",Set File Growth to less than 1GB for files: @{FileName},https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server,['Autogrow1GB'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0.4001,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
93,DuplicateIndexes,definition,"['DefaultRuleset', 'Performance', 'Indexes']",There are tables with duplicate indexes,There are tables with duplicate indexes according to their definitions. We recommended to revise all these objects as soon as possible.,Consider removing duplicate indexes in table @{Table}: @{ToDelete},https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide,"[{'id': 'IndexesDefinitions', 'transform': {'type': 'duplicateIndexes'}}]",,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
94,RedundantIndexes,definition,"['DefaultRuleset', 'Performance', 'Indexes']",There are tables with possibly redundant 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.,Consider removing redundant indexes in table @{Table}: @{Indexes},https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide,"[{'id': 'IndexesDefinitions', 'transform': {'type': 'redundantIndexes'}}]",,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
95,UserObjectsInMaster,definition,"['DefaultRuleset', 'masterDB', 'Backup']",User objects in database master,"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.",Remove user objects from database master: @{Object_Name},https://docs.microsoft.com/sql/relational-databases/databases/master-database,['UserObjectsCountInMasterDB'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,master,,,,,,,,,,
96,HighCPUUsage,definition,"['DefaultRuleset', 'Performance', 'CPU']",High CPU usage on server,"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.","Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}%",https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage,['CpuUsage'],,Server,Windows,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,"['@AVGTotalCPUUsage', '@threshold']",,70,,,,,,,,,,,,,,,
97,ReplErrors24H,definition,"['DefaultRuleset', 'Replication']",Replication errors in the last 24 hours,This check searches for errors in distribution database agent's history table for the last 24 hours.,Review replication errors for the following publications: @{publication},https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication,['ReplicationErrors'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
98,AgentAlertsSeverity10,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 10,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,"[825, 833, 855, 856, 3452, 3619, 17179, 17883, 17884, 17887, 17888, 17890, 28036]",10,,,,,,
99,AgentAlertsSeverity16,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 16,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,"[2508, 2511, 3271, 5228, 5229, 5242, 5243, 5250, 5901, 17130, 17300]",16,,,,,,
100,AgentAlertsSeverity17,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 17,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,"[802, 845, 1101, 1105, 1121, 1214, 8642, 9002]",17,,,,,,
101,AgentAlertsSeverity19,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 19,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,[701],19,,,,,,
102,AgentAlertsSeverity20,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 20,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,[3624],20,,,,,,
103,AgentAlertsSeverity21,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 21,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,[605],21,,,,,,
104,AgentAlertsSeverity22,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 22,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,"[5180, 8966]",22,,,,,,
105,AgentAlertsSeverity23,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 23,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,"[5572, 9100]",23,,,,,,
106,AgentAlertsSeverity24,definition,"['DefaultRuleset', 'Agent']",Agent doesn't rise alerts for errors with severity 24,"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.",Consider creating alerts for the following errors: @{error_ids},https://docs.microsoft.com/sql/ssms/agent/alerts,['SysAlerts'],"[{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}]",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,"[823, 824, 832]",24,,,,,,
107,WeakPassword,definition,"['DefaultRuleset', 'Security', 'WeakPassword']",Weak password,Some user logins have weak passwords.,Make sure to set strong passwords on the following logins: @{PasswordData},https://docs.microsoft.com/sql/relational-databases/security/strong-passwords,['WeakPassword'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
108,VLFCount,definition,"['DefaultRuleset', 'Backup', 'Performance']",VLF count,"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.",Update transaction log settings to reduce the number of VLFs (current number is: @{RecoveryUnitId}),https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide,"[{'id': 'VLF', 'transform': {'type': 'aggregate', 'map': {'RecoveryUnitId': {'type': 'count', 'distinct': False}}}}]",,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,"['@RecoveryUnitId', '@threshold']",,50,,,,,,,,,,,,,,,
109,TF8015,definition,"['DefaultRuleset', 'TraceFlag', 'CPU', 'NUMA']",TF 8015 disables auto-detection and NUMA setup,"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.",Disable trace flag 8015 for this SQL Server instance. This TF does not apply to this SQL Server version,https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,11.0.3349)",,,Warning,,"[8015, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
110,TF8032,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 8032 reverts the cache limit parameters to the SQL Server 2005 RTM,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.,The cache limit parameters reverted 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,,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,)",,,Warning,,"[8032, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
111,TF8744,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 8744 disables pre-fetching for the Nested Loop operator,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.,Disable trace flag 8744 for this SQL Server instance. This TF does not apply to this SQL Server version,https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,12.0)",,,Warning,,"[8744, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
112,TF9347,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 9347 disables batch mode for sort operator,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.,Disable trace flag 9347 for this SQL Server instance. This TF does not apply to this SQL Server version,,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,13.0)",,,Warning,,"[9347, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
113,TF9349,definition,"['DefaultRuleset', 'TraceFlag', 'Performance']",TF 9349 disables batch mode for top N sort operator,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.,Disable trace flag 9349 for this SQL Server instance. This TF does not apply to this SQL Server version,,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,13.0)",,,Warning,,"[9349, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
114,TF9389,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'TempDB']",TF 9389 enables dynamic memory grant for batch mode operators,"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.",Disable trace flag 9389 for this SQL Server instance. The TF does not apply to this SQL Server version,,['EnabledGlobalTraceFlags'],,Server,Windows,"OnPremises, ManagedInstance","[11.0,13.0)",,,Warning,,"[9389, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
115,TF9476,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'QueryOptimizer']",TF 9476 causes SQL Server to generate a plan using the Simple Containment instead of the default Base Containment under New CE,"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.",Disable trace flag 9476 for this SQL Server instance. The TF does not apply to this SQL Server version,,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,13.0)",,,Warning,,"[9476, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
116,TF9481,definition,"['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance']","TF 9481 enables Legacy CE model, irrespective of the compatibility level of the database","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.",Disable trace flag 9481 for this SQL Server instance. The TF does not apply to this SQL Server version,,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,12.0)",,,Warning,,"[9481, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
117,TF10204,definition,"['DefaultRuleset', 'TraceFlag', 'Performance', 'ColumnStore']",TF 10204 disables merge/recompress during columnstore index reorganization,"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.",Disable trace flag 10204 for this SQL Server instance. The TF does not apply to this SQL Server version,,['EnabledGlobalTraceFlags'],,Server,Windows,OnPremises,"[11.0,13.0)",,,Warning,,"[10204, '@TraceFlag']",,,,,,,,,,,,,,,,,,,,,,,
118,SPNaming,definition,"['DefaultRuleset', 'Naming']",Stored Procedure 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.",Rename the following stored procedures to get rid of the sp_ prefix: @{ObjectName},https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100),['BadNamingSP'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@ObjectName,,,,,,,,,,,,,,,,,,,,
119,ObjectNamingSpecialChar,definition,"['DefaultRuleset', 'Naming']",Object 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.",Rename the following objects to get rid of special characters: @{ObjectName},https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100),['BadNamingSpecialChars'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@ObjectName,,,,,,,,,,,,,,,,,,,,
120,ColumnNamingSpecialChar,definition,"['DefaultRuleset', 'Naming']",Column 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.",Rename the following columns to get rid of special characters: @{ObjectName},https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100),['BadNamingSpecialCharsColumns'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@ObjectName,,,,,,,,,,,,,,,,,,,,
121,FnNaming,definition,"['DefaultRuleset', 'Naming']",User Function 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.",Rename the following functions to get rid of the fn_ prefix: @{ObjectName},https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql,['BadNamingUserFunctions'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@ObjectName,,,,,,,,,,,,,,,,,,,,
122,ObjectNamingResKeywords,definition,"['DefaultRuleset', 'Naming']",Object names contain reserved keywords,"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.",Rename the following objects to get rid of reserved keywords: @{ObjectName},https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql,['BadNamingKeywords'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@ObjectName,,,,,,,,,,,,,,,,,,,,
123,DeprFeaturesInModules,definition,"['DefaultRuleset', 'Security', 'Deprecated', 'LongRunningChecks', 'UpdateIssues']",Use of deprecated or discontinued features in modules,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.,Consider getting rid of the following deprecated or discontinued features in @{ObjectName}: @{Keyword},https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object,['DeprecatedFeaturesSQLModules'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
124,DeprFeaturesInJobs,definition,"['DefaultRuleset', 'Security', 'Deprecated', 'Agent', 'Jobs', 'LongRunningChecks', 'UpdateIssues']",Use of deprecated or discontinued features in modules,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.,Consider getting rid of the following deprecated or discontinued features in job @{ObjectName}: @{Keyword},https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object,['DeprecatedFeaturesJobs'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
125,NUMANodeSingleCPU,definition,"['DefaultRuleset', 'NUMA', 'CPU', 'Memory', 'Performance']",Single CPU assigned to NUMA node,"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.",Consider assigning additional CPUs to NUMA nodes that have only one assigned CPU,https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105),['ServerInstanceConfiguration'],,Server,Windows,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@nodes_single_cpu,,,,,,,,,,,,,,,,,,,,
126,NUMANodeNoCPU,definition,"['DefaultRuleset', 'NUMA', 'Performance', 'CPU', 'Memory']",NUMA nodes without CPUs,"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.",Make sure that all NUMA nodes have assigned CPUs,https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105),['AffinityNUMANodeNoAssignedCPUs'],,Server,Windows,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,@NodeCnt,,,,,,,,,,,,,,,,,,,,
127,IndexKeyGuid,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Guid in clustered index key column,"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.",Get rid of GUIDs in the following clustered indexes' keys: @{IndexName},https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/,['IndexesGuidKeyColumns'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
128,IndexesLargeKeys,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Indexes keys with more than 900 bytes,"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.",Get rid of keys larger than 900 bytes in index @{FullName},http://msdn.microsoft.com/library/ms191241.aspx,['IndexesDefinitions'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,13.0)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,"['@KeySize', 900]",,,,,
129,IndexesLargeKeysNonClust,definition,"['DefaultRuleset', 'Indexes', 'Performance']",NonClustered indexes keys with more than 1700 bytes,"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.",Get rid of keys larger than 1700 bytes in index @{FullName},http://msdn.microsoft.com/library/ms191241.aspx,['IndexesDefinitions'],"[{'le': ['@KeySize', 1700]}, {'not': {'in': ['@Type', [2, 6]]}}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
130,IndexesLargeKeysClust,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Clustered indexes keys with more than 900 bytes,"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.",Get rid of keys larger than 900 bytes in index @{FullName},http://msdn.microsoft.com/library/ms191241.aspx,['IndexesDefinitions'],"[{'le': ['@KeySize', 900]}, {'not': {'in': ['@Type', [1, 5]]}}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
131,DisabledIndexes,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Disabled Indexes exist,"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.",Remove or enable this disabled index: @{FullName},https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints,['IndexesDefinitions'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,FALSE,,,,
132,IndexesFillFactor,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Index fill factor lower 80%,"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.",Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent,https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index,['IndexesDefinitions'],"[{'less': ['@FillFactor', 1]}, {'ge': ['@FillFactor', 80]}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
133,NonUniqueClusterIndex,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Non-unique clustered indexes,"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.",Review this clustered index @{FullName} as it is non-unique,https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described,['IndexesDefinitions'],"[{'gt': ['@Type', 1]}, {'@IsUnique': True}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
134,SuspectPages,definition,"['DefaultRuleSet', 'Pages', 'DataIntegrity']",Suspect pages,"The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary.",Run DBCC CHECKDB to verify affected database. Suspect pages were found: @{EventType},https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server,['SuspectPagesValidation'],,Database,/^(Windows|Linux)$/,,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
135,SparseFiles,definition,"['DefaultRuleSet', 'Snapshots', 'Backup', 'DataIntegrity']",Sparse files,"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.",Get rid of sparse files: @{SparseFiles},"https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/, https://techcommunity.microsoft.com/t5/SQL-Server-Support/Did-your-backup-program-utility-leave-your-SQL-Server-running-in/ba-p/315840",['SparseFilesValidation'],,Database,/^(Windows|Linux)$/,,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
136,TableNoIndex,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Tables without indexes,"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.",Review table @{TableName} and create reasonable indexes,https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes,['TableIndexes'],"[{'gt': ['@IndexCount', 1]}, {'gt': ['@MaxIndexId', 0]}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
137,TableNoClusteredIndex,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Tables without clustered indexes,"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.",Review table @{TableName} and consider creating a clustered index,https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes,['TableIndexes'],"[{'le': ['@IndexCount', 1]}, {'gt': ['@MinIndexId', 0]}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
138,TablePSAlign,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Table index not aligned with PS,"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.",Consider recreating index @{IndexName} in table @{TableName} to have it aligned with your schema,https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes,['TableIndexesPartitioned'],,Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
139,LoginNoPassword,definition,"['DefaultRuleset', 'Security', 'WeakPassword']",Logins with no passwords,Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords.,Make sure to set strong passwords on the following logins: @{PasswordData},https://docs.microsoft.com/sql/relational-databases/security/password-policy,['NullPassword'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
140,LoginEqPassword,definition,"['DefaultRuleset', 'Security', 'WeakPassword']",Logins with passwords that are same as the login names,Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords.,Please review logins with password equals to login: @{PasswordData},https://docs.microsoft.com/sql/relational-databases/security/password-policy,['NamePassword'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
141,SystemHealth,definition,"['DefaultRuleset', 'XEvent', 'SystemHealth', 'Performance']",System Health important messages,"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",Error @{Error_Number} has occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago,https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session,['SystemHealth'],,Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
142,RarelyUsedIndex,definition,"['DefaultRuleset', 'Indexes', 'Performance']",Rarely used index,"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.",Make sure you need index @{IndexName} as it's used too rarely,https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql,['IndexesDefinitions'],"[{'@Hits': 0}, {'ge': ['@ReadsRatio', '@ReadsThreshold']}, {'@IsPrimaryKey': True}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,5,,,
143,UnusedIndex,definition,"['DefaultRuleset', 'Index', 'Performance']",Unused index,"Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere.",Make sure you need index @{IndexName} as it's unused,https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql,['IndexesDefinitions'],"[{'and': [{'ne': ['@Type', 2]}, {'ne': ['@Type', 6]}]}, {'@IsPrimaryKey': True}, {'gt': ['@Hits', 0]}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,,Warning,,,,,,,,,,,,,,,,,,,,,,,,,
144,SkewedCompatibilityLevel,definition,"['DefaultRuleset', 'CompatibilityLevel', 'Security', 'Performance', 'UpdateIssues']",Database with skewed compatibility level,Some databases may have a compatibility level lower than the allowed level by the Database Engine.,Update database compatibility level (current level: @{CompatibilityLevel}),https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level,"['CompatibilityLevel', 'SQLServerVersion']",,Database,/^(Windows|Linux)$/,,"[11.0,)",,,Warning,,,,,,,,,,,,,,,,,,,,,,,"[{'div': ['@CompatibilityLevel', 10]}, '@ServerMajorVersion']",,
id,level,displayName,message,tags,description,helpLink,probes,target.type,target.platform,target.engineEdition,target.version,target.name.not,threshold
AutoCreateStats,Warning,Auto-Create Statistics should be on,Turn Auto-Create Statistics option on 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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AutoUpdateStats,Warning,Auto-Update Statistics should be on,Turn Auto-Update Statistics option on 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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
QueryStoreOn,Warning,Query Store should be active,Make sure Query Store actual operation mode is 'Read Write' to keep your 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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0,)",/^(master|tempdb|model)$/,
TF174,Information,TF 174 increases the plan cache bucket count,Consider enabling trace flag 174 to increase the 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"['[11.0.3368,12.0)', '[12.0.2480,13.0)', '[13.0,)']",,
TF634,Information,TF 634 disables background columnstore compression,Trace Flag 634 disables the background columnstore compression task. Verify need to set a non-default trace flag with the 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF652,Information,TF 652 disables page pre-fetching scans,Trace Flag 652 disables Page Pre-fetching Scans. Verify need to set a non-default trace flag with the 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF661,Information,TF 661 disables Ghost Cleanup Task,Trace flag 661 disables the background ghost cleanup task. Verify need to set a non-default trace flag with the 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF834,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/help/4465518,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF845,Warning,TF 845 is not needed in SQL Server 2012 and higher versions,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF902,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF1117,Information,TF 1117 Enables Filegroup-level Autogrow,Consider enabling trace flag 1117 to enable filegroup autogrow.,"['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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF1118,Information,TF 1118 Disables Single Page Allocations,Consider enabling 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF1204,Information,TF 1204 returns deadlock information,Trace Flag 1204 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF1211,Warning,TF 1211: Lock Escalation should be enabled,Disable trace flag 1211 to allow 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF1222,Information,TF 1222 returns deadlock information,Trace Flag 1222 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF1224,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF1229,Warning,TF 1229: Lock Partitioning should be enabled,Disable trace flag 1229 to allow 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF1236,Warning,TF 1236: Database Lock Partitioning should be enabled,Enable trace Flag 1236 to allow 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF1462,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF2312,Warning,TF 2312 sets the default Cardinality Estimation model,Trace Flag 2312 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 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF2330,Warning,TF 2330 disables recording of index usage stats,Trace Flag 2330 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', '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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF2340,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF2371,Information,TF 2371 enables a linear recompilation threshold for statistics,Enable trace Flag 2371 to allow a 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF2389,Information,TF 2389 enables automatic statistics for Ascending Keys,Trace Flag 2389 enables automatic statistics for ascending keys. Verify need to set a non-default trace flag with the 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
TF2390,Information,TF 2390 enables automatic statistics for Ascending or Unknown Keys,Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Verify need to set a non-default trace flag with the 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
TF2528,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF2549,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF2562,Warning,TF 2562 forces the DBCC CHECKDB command to execute in a single batch,Trace Flag 2562 forces the DBCC CHECKDB command to execute in a 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF2566,Warning,TF 2566 disables default data purity check,Trace Flag 2566 disables 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF3023,Information,TF 3023 enables Backup Checksum option by default,Trace Flag 3023 enables 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF3042,Information,TF 3042 bypasses the default backup compression pre-allocation algorithm,Trace Flag 3042 enables the bypass of the 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF3226,Information,TF 3226 disables ErrorLog entries for every successful backup operation,Trace Flag 3226 disables ErrorLog entries for every 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF4136,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF4137,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF4138,Warning,TF 4138 causes plans to not use Row Goal adjustments,Trace flag 4138 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 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. However it 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/2667211,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF4139,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TF4199,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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0, 14.0)",,
TF6498,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF6532,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"['[11.0.6020,11.0.6518)']",,
TF6532.6533,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF6534,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF7412,Information,TF 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting,Enable trace flag 7412 to enables the 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,['EnabledGlobalTraceFlags'],Server,/^(Windows|Linux)$/,OnPremises,"[13.0.4001,15.0)",,
TF9024,Warning,TF 9024 converts a global log pool memory object into NUMA node partitioned memory object,Verify need to set a Non-default TF 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,,,
TF8048,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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,,,
DeprecatedFeatures,Warning,Deprecated or discontinued features should not be used,Detected deprecated or discontinued feature uses: @{DeprecatedFeature}. We recommend to replace them with features actual for SQL Server version @{ProductVersion}.,"['DefaultRuleset', 'Deprecated', 'Security', 'UpdateIssues', 'Performance']",This check detects deprecated or discontinued features used on target SQL Server instance. 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,"['DeprecatedFeaturesStats', 'SQLServerVersion']",Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,
SystemHealthSession,Warning,system_health XEvent session is not active,Start the session by using the ALTER EVENT SESSION statement or by using the 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,['XEvent.SystemHealth'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
SPServerDiagnosticsSession,Warning,sp_server_diagnostics xEvent session is not active,Start the session by using the ALTER EVENT SESSION statement or by using the 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,['XEvent.SPServerDiagnostics'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
BlackboxTrace,Warning,Blackbox trace is configured and running,Make sure you still need the blackbox 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,['CountBlackBoxTraces'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
DefaultTrace,Warning,No default trace was found or is not active,Make sure that there is enough space for SQL Server to write the default trace file. Then have the default trace run by disabling and re-enabling 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,['CountDefaultTraces'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
HintsStatistics,Information,Hints are being used,"We recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators, because the SQL Server Query Optimizer typically selects the best execution plan for a query.","['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,['Hints.InstanceStatistics'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
HintsUsageInModules,Information,Hints usage in modules,@{Hint} was 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,['Hints.ModuleUsage'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
PlansUseRatio,Warning,Amount of single use plans in cache is high,Amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0}). Consider enabling the Optimize for ad hoc workloads setting on heavy OLTP ad-hoc workloads to conserve resources.,"['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,['CachedPlans.SingleUseRatio'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
HypotheticalIndexes,Warning,Hypothetical indexes found,Index @{IndexName} for @{Schema}.@{Object} is marked as hypothetical. It is recommended to drop hypothetical index @{IndexName} as soon as possible.,"['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,['Hypothetical.Indexes'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
HypotheticalStatistics,Warning,Hypothetical statistics found,Statistics @{StatName} for @{Schema}.@{Object} is hypothetical. It is recommended to drop hypothetical statistics @{StatName} as soon as possible.,"['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,['Hypothetical.Statistics'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
LatestCU,Warning,SQL Server instance is not up to date,Product version @{ProductVersion} is not the latest available. We recommend keeping your SQL Server up to date and install Service Packs and Cumulative Updates as they are released.,"['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, https://docs.microsoft.com/sql/database-engine/install-windows/install-sql-server-servicing-updates",['SQLServerVersion'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
FKNoIndexes,Warning,Foreign key constraints should have corresponding indexes,Create a corresponding index for each foreign key. There is no index on the following 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,['FKNoIndexes'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
MissedIndexes,Information,Potentially missing indexes,Create an 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,['MissedIndexes'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
FullBackup,Warning,Full backup is missed or outdated,The last full backup had been created more than @{threshold} days ago. Create a new full backup.,"['DefaultRuleset', 'Backup']",Database doesn't have any full backup or the latest full backup is over 7 days.,https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server,['DatabaseBackups'],Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(model|tempdb)$/,7.0
OutdatedTranLogBackup,Warning,Transaction Log backup is missed or outdated,Create a backup of Transaction Log. 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,['DatabaseBackups'],Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|model|msdb|tempdb)$/,
DbDiffCollation,Warning,Database collation doesn't match the collation of master,Keep database collation the same as the collation for master or model,"['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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AutoClose,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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|msdb|tempdb)$/,
AutoShrink,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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|msdb|tempdb)$/,
PageVerify,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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|msdb|tempdb)$/,
DbChaining,Warning,Cross-Database Access should be disabled,Set DB_CHAINING option to OFF,"['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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|msdb|tempdb)$/,
AutoCreateStatsIncremental,Warning,Incremental option of auto stats should be ON,Set AUTO_CREATE_STATISTICS to ON and set INCREMENTAL to ON,"['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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[12.0,)",/^(master|msdb|tempdb)$/,
TrustWorthy,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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,OnPremises,"[11.0,)",/^(master|msdb|tempdb)$/,
ParameterizationNotSimple,Warning,PARAMETERIZATION should be SIMPLE,"Set PARAMETERIZATION = SIMPLE and use forced parameterization only on a certain class 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,['DatabaseConfiguration'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|msdb|tempdb)$/,
TempDBFilesNotSameSize,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,['TempDBFiles'],Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TempDBFilesMultiple4,Warning,Number of TempDB data files should be in multiples of 4,Make sure number of TempDB data files is 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,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration']",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TempDBFiles1PerCPU,Warning,Number of TempDB data files should depend on CPU count,Make sure to have 1 data file per logical processor (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,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration']",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TempDBFilesNotLess8,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,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration']",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
TempDBFilesAutoGrowth,Warning,TempDB data files have different auto growth settings,Make Autogrowth 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,"[{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'growth': 'count', 'is_percent_growth': 'count'}}}]",Server,/^(Windows|Linux)$/,OnPremises,"[11.0,)",,
FilesAutogrowth,Warning,Database files have Autogrowth setting 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,['Autogrow1GB'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0.4001,)",,
DuplicateIndexes,Warning,There are tables with duplicate indexes,Consider removing duplicate indexes in table @{Table}: @{ToDelete},"['DefaultRuleset', 'Performance', 'Indexes']",There are tables with duplicate indexes according to their definitions. We recommended to revise all these objects as soon as possible.,https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide,"[{'id': 'IndexesDefinitions', 'transform': {'type': 'duplicateIndexes'}}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
RedundantIndexes,Warning,There are tables with possibly redundant indexes,Consider removing 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,"[{'id': 'IndexesDefinitions', 'transform': {'type': 'redundantIndexes'}}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
UserObjectsInMaster,Warning,User objects in database master,Remove user objects from database master: @{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,['UserObjectsCountInMasterDB'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
HighCPUUsage,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,['CpuUsage'],Server,Windows,"OnPremises, ManagedInstance","[11.0,)",,70.0
ReplErrors24H,Warning,Replication errors in the last 24 hours,Review replication errors for the following 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,['ReplicationErrors'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity10,Warning,Agent doesn't rise alerts for errors with severity 10,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity16,Warning,Agent doesn't rise alerts for errors with severity 16,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity17,Warning,Agent doesn't rise alerts for errors with severity 17,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity19,Warning,Agent doesn't rise alerts for errors with severity 19,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity20,Warning,Agent doesn't rise alerts for errors with severity 20,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity21,Warning,Agent doesn't rise alerts for errors with severity 21,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity22,Warning,Agent doesn't rise alerts for errors with severity 22,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity23,Warning,Agent doesn't rise alerts for errors with severity 23,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
AgentAlertsSeverity24,Warning,Agent doesn't rise alerts for errors with severity 24,Consider creating alerts for the following 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,['SysAlerts'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
WeakPassword,Warning,Weak password,Make sure to set strong passwords on the following logins: @{PasswordData},"['DefaultRuleset', 'Security', 'WeakPassword']",Some user logins have weak passwords.,https://docs.microsoft.com/sql/relational-databases/security/strong-passwords,['WeakPassword'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
VLFCount,Warning,VLF count,Update transaction log settings to reduce the 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,"[{'id': 'VLF', 'transform': {'type': 'aggregate', 'map': {'RecoveryUnitId': {'type': 'count', 'distinct': False}}}}]",Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,50.0
TF8015,Warning,TF 8015 disables auto-detection and NUMA setup,Disable trace flag 8015 for this SQL Server instance. This TF 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,11.0.3349)",,
TF8032,Warning,TF 8032 reverts the cache limit parameters to the SQL Server 2005 RTM,The cache limit parameters reverted 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,"['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.,,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,)",,
TF8744,Warning,TF 8744 disables pre-fetching for the Nested Loop operator,Disable trace flag 8744 for this SQL Server instance. This TF 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,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,12.0)",,
TF9347,Warning,TF 9347 disables batch mode for sort operator,Disable trace flag 9347 for this SQL Server instance. This TF 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.,,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,13.0)",,
TF9349,Warning,TF 9349 disables batch mode for top N sort operator,Disable trace flag 9349 for this SQL Server instance. This TF 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.,,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,13.0)",,
TF9389,Warning,TF 9389 enables dynamic memory grant for batch mode operators,Disable trace flag 9389 for this SQL Server instance. The TF 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.",,['EnabledGlobalTraceFlags'],Server,Windows,"OnPremises, ManagedInstance","[11.0,13.0)",,
TF9476,Warning,TF 9476 causes SQL Server to generate a plan using the Simple Containment instead of the default Base Containment under New CE,Disable trace flag 9476 for this SQL Server instance. The TF 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.",,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,13.0)",,
TF9481,Warning,"TF 9481 enables Legacy CE model, irrespective of the compatibility level of the database",Disable trace flag 9481 for this SQL Server instance. The TF 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.",,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,12.0)",,
TF10204,Warning,TF 10204 disables merge/recompress during columnstore index reorganization,Disable trace flag 10204 for this SQL Server instance. The TF 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.",,['EnabledGlobalTraceFlags'],Server,Windows,OnPremises,"[11.0,13.0)",,
SPNaming,Warning,Stored Procedure Naming,Rename the following stored procedures to get rid of the 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),['BadNamingSP'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
ObjectNamingSpecialChar,Warning,Object Naming,Rename the following objects to get rid of 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),['BadNamingSpecialChars'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
ColumnNamingSpecialChar,Warning,Column Naming,Rename the following columns to get rid of 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),['BadNamingSpecialCharsColumns'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
FnNaming,Warning,User Function Naming,Rename the following functions to get rid of the 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,['BadNamingUserFunctions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
ObjectNamingResKeywords,Warning,Object names contain reserved keywords,Rename the following objects to get rid of 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,['BadNamingKeywords'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
DeprFeaturesInModules,Warning,Use of deprecated or discontinued features in modules,Consider getting rid of the following 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,['DeprecatedFeaturesSQLModules'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,
DeprFeaturesInJobs,Warning,Use of deprecated or discontinued features in modules,Consider getting rid of the following deprecated or discontinued features in job @{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,['DeprecatedFeaturesJobs'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
NUMANodeSingleCPU,Warning,Single CPU assigned to NUMA node,Consider assigning additional CPUs to NUMA nodes that have only one assigned 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),['ServerInstanceConfiguration'],Server,Windows,"OnPremises, ManagedInstance","[11.0,)",,
NUMANodeNoCPU,Warning,NUMA nodes without CPUs,Make sure that all NUMA nodes have assigned CPUs,"['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),['AffinityNUMANodeNoAssignedCPUs'],Server,Windows,"OnPremises, ManagedInstance","[11.0,)",,
IndexKeyGuid,Warning,Guid in clustered index key column,Get rid of GUIDs in the following 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/,['IndexesGuidKeyColumns'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,
IndexesLargeKeys,Warning,Indexes keys with more than 900 bytes,Get rid of keys larger than 900 bytes in index @{FullName},"['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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,13.0)",/^(master|model|msdb|tempdb)$/,
IndexesLargeKeysNonClust,Warning,NonClustered indexes keys with more than 1700 bytes,Get rid of keys larger than 1700 bytes in index @{FullName},"['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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0,)",/^(master|model|msdb|tempdb)$/,
IndexesLargeKeysClust,Warning,Clustered indexes keys with more than 900 bytes,Get rid of keys larger than 900 bytes in index @{FullName},"['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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[13.0,)",/^(master|model|msdb|tempdb)$/,
DisabledIndexes,Warning,Disabled Indexes exist,Remove or enable this 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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
IndexesFillFactor,Warning,Index fill factor lower 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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
NonUniqueClusterIndex,Warning,Non-unique clustered indexes,Review this clustered index @{FullName} as it is non-unique,"['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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
SuspectPages,Warning,Suspect pages,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,['SuspectPagesValidation'],Database,/^(Windows|Linux)$/,,"[11.0,)",,
SparseFiles,Warning,Sparse files,Get rid of 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/, https://techcommunity.microsoft.com/t5/SQL-Server-Support/Did-your-backup-program-utility-leave-your-SQL-Server-running-in/ba-p/315840",['SparseFilesValidation'],Database,/^(Windows|Linux)$/,,"[11.0,)",,
TableNoIndex,Warning,Tables without indexes,Review table @{TableName} 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,['TableIndexes'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,
TableNoClusteredIndex,Warning,Tables without clustered indexes,Review table @{TableName} and consider creating a 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,['TableIndexes'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,
TablePSAlign,Warning,Table index not aligned with PS,Consider recreating index @{IndexName} in table @{TableName} to have it aligned with your 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,['TableIndexesPartitioned'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|tempdb|model|msdb)$/,
LoginNoPassword,Warning,Logins with no passwords,Make sure to set strong passwords on the following 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,['NullPassword'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
LoginEqPassword,Warning,Logins with passwords that are same as the login names,Please 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,['NamePassword'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
SystemHealth,Warning,System Health important messages,Error @{Error_Number} has 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,['SystemHealth'],Server,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",,
RarelyUsedIndex,Warning,Rarely used index,Make sure you need index @{IndexName} as it's used too rarely,"['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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
UnusedIndex,Warning,Unused index,Make sure you need index @{IndexName} as it's unused,"['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,['IndexesDefinitions'],Database,/^(Windows|Linux)$/,"OnPremises, ManagedInstance","[11.0,)",/^(master|model|msdb|tempdb)$/,
SkewedCompatibilityLevel,Warning,Database with skewed compatibility level,Update database compatibility level (current level: @{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,"['CompatibilityLevel', 'SQLServerVersion']",Database,/^(Windows|Linux)$/,,"[11.0,)",,
1 id level itemType displayName message tags description helpLink probes target.type condition target.platform target.engineEdition target.version target.name.not threshold condition.equal condition.in condition.not.in targetFilter.version condition.and condition.not condition.@HintUsageCount enabled condition.less condition.@ConstraintName condition.not.equal condition.@page_verify_option condition.@filesizeCount condition.@FileName target.name condition.@Object_Name condition.@publication error_ids severityN condition.le condition.@IsDisabled ReadsThreshold condition.ge targetFilter.type targetFilter.name
2 0 AutoCreateStats Warning definition Auto-Create Statistics should be on Turn Auto-Create Statistics option on 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 ['DatabaseConfiguration'] Database @is_auto_create_stats_on /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,)
3 1 AutoUpdateStats Warning definition Auto-Update Statistics should be on Turn Auto-Update Statistics option on 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 ['DatabaseConfiguration'] Database @is_auto_update_stats_on /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,)
4 2 QueryStoreOn Warning definition Query Store should be active Make sure Query Store actual operation mode is 'Read Write' to keep your 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 ['DatabaseConfiguration'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [13.0,) /^(master|tempdb|model)$/ ['@query_store_state', 2]
5 3 TF174 Information definition TF 174 increases the plan cache bucket count Consider enabling trace flag 174 to increase the 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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises ['[11.0.3368,12.0)', '[12.0.2480,13.0)', '[13.0,)'] [174, '@TraceFlag']
6 4 TF634 Information definition TF 634 disables background columnstore compression Trace Flag 634 disables the background columnstore compression task. Verify need to set a non-default trace flag with the 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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [634, '@TraceFlag']
7 5 TF652 Information definition TF 652 disables page pre-fetching scans Trace Flag 652 disables Page Pre-fetching Scans. Verify need to set a non-default trace flag with the 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [652, '@TraceFlag']
8 6 TF661 Information definition TF 661 disables Ghost Cleanup Task Trace flag 661 disables the background ghost cleanup task. Verify need to set a non-default trace flag with the 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [661, '@TraceFlag']
9 7 TF834 Information definition 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/help/4465518 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [834, '@TraceFlag']
10 8 TF845 Warning definition TF 845 is not needed in SQL Server 2012 and higher versions 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [845, '@TraceFlag']
11 9 TF902 Warning definition 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [902, '@TraceFlag']
12 10 TF1117 Information definition TF 1117 Enables Filegroup-level Autogrow Consider enabling trace flag 1117 to enable filegroup autogrow. ['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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [1117, '@TraceFlag']
13 11 TF1117 TF1118 Warning Information override TF 1117 has no effect in SQL Server 2016 and higher versions TF 1118 Disables Single Page Allocations Disable trace flag 1117 in SQL Server 2016 and higher versions. Consider enabling trace flag 1118 to force page allocations on uniform extents. ['DefaultRuleset', 'TraceFlag', 'Memory', 'Performance', 'Pages'] 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. 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://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options https://support.microsoft.com/help/328551 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [1117, '@TraceFlag'] [13.0,)
14 12 TF1118 TF1204 Information definition TF 1118 Disables Single Page Allocations TF 1204 returns deadlock information Consider enabling trace flag 1118 to force page allocations on uniform extents. Trace Flag 1204 returns deadlock information. ['DefaultRuleset', 'TraceFlag', 'Memory', 'Performance', 'Pages'] ['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance'] 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. 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/328551 https://support.microsoft.com/help/832524 ['EnabledGlobalTraceFlags'] Server Windows /^(Windows|Linux)$/ OnPremises [11.0,) [1118, '@TraceFlag']
15 13 TF1118 TF1211 Warning override TF 1118 has no effect in SQL Server 2016 and higher versions TF 1211: Lock Escalation should be enabled Disable trace flag 1118 in SQL Server 2016 and higher versions. Disable trace flag 1211 to allow lock escalation. ['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance'] 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. 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/statements/alter-database-transact-sql-file-and-filegroup-options https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1118, '@TraceFlag'] [13.0,)
16 14 TF1204 TF1222 Information definition TF 1204 returns deadlock information TF 1222 returns deadlock information Trace Flag 1204 returns deadlock information. Trace Flag 1222 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. 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://support.microsoft.com/help/832524 https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1204, '@TraceFlag']
17 15 TF1211 TF1224 Warning definition TF 1211: Lock Escalation should be enabled TF 1224 should be disabled Disable trace flag 1211 to allow lock escalation. Disable trace flag 1224 to allow 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. 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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1211, '@TraceFlag']
18 16 TF1222 TF1229 Information Warning definition TF 1222 returns deadlock information TF 1229: Lock Partitioning should be enabled Trace Flag 1222 returns deadlock information. Disable trace flag 1229 to allow lock partitioning. ['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance'] ['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance', 'CPU'] 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. 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/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1222, '@TraceFlag']
19 17 TF1224 TF1236 Warning definition TF 1224 should be disabled TF 1236: Database Lock Partitioning should be enabled Disable trace flag 1224 to allow lock escalation. Enable trace Flag 1236 to allow database lock partitioning. ['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. Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql https://support.microsoft.com/help/2926217 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises [11.0,) [1224, '@TraceFlag']
20 18 TF1229 TF1462 Warning definition TF 1229: Lock Partitioning should be enabled TF 1462 should be disabled to allow Log Stream Compression Disable trace flag 1229 to allow lock partitioning. Disable trace flag 1462 to allow log stream compression. ['DefaultRuleset', 'TraceFlag', 'Locks', 'Performance', 'CPU'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'AvailabilityGroups'] 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. 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/relational-databases/sql-server-transaction-locking-and-row-versioning-guide https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1229, '@TraceFlag']
21 19 TF1236 TF2312 Warning definition TF 1236: Database Lock Partitioning should be enabled TF 2312 sets the default Cardinality Estimation model Enable trace Flag 1236 to allow database lock partitioning. Trace Flag 2312 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', 'Locks', 'Performance'] ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems. 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/2926217 https://support.microsoft.com/help/2801413 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [1236, '@TraceFlag']
22 20 TF1236 TF2330 Warning override TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions TF 2330 disables recording of index usage stats Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions. Trace Flag 2330 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', 'Indexes'] 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. 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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1236, '@TraceFlag'] ['[11.0.6020,12.0)', '[12.0.4100,)']
23 21 TF1462 TF2340 Warning Information definition TF 1462 should be disabled to allow Log Stream Compression TF 2340 disables Batch Sorts for optimized nested loops joins Disable trace flag 1462 to allow log stream compression. Trace Flag 2340 disables Batch Sorts for optimized nested loops joins. ['DefaultRuleset', 'TraceFlag', 'Performance', 'AvailabilityGroups'] ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth. 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/database-engine/availability-groups/windows/tune-compression-for-availability-group https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [1462, '@TraceFlag']
24 22 TF2312 TF2371 Warning Information definition TF 2312 sets the default Cardinality Estimation model TF 2371 enables a linear recompilation threshold for statistics Trace Flag 2312 does 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 Flag 2371 to allow a linear recompilation threshold for statistics. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'Statistics'] 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). 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://support.microsoft.com/help/2801413 https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [2312, '@TraceFlag']
25 23 TF2312 TF2389 Information override TF 2389 enables automatic statistics for Ascending Keys Trace Flag 2389 enables automatic statistics for ascending keys. Verify need to set a non-default trace flag with the current system build and configuration. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [12.0, 13.0)
26 24 TF2312 TF2390 Information override TF 2390 enables automatic statistics for Ascending or Unknown Keys TF2312 enables New CE model to SQL Server 2014 or above versions, dependent of the compatibility level of the database Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Verify need to set a non-default trace flag with the current system build and configuration. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [13.0, )
27 25 TF2330 TF2528 Warning definition TF 2330 disables recording of index usage stats TF 2528 disables parallel operations for integrity checking Trace Flag 2330 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration. Trace Flag 2528 disables parallel operations for integrity checking. ['DefaultRuleset', 'TraceFlag', 'Performance', 'Indexes'] ['DefaultRuleset', 'TraceFlag', 'DataIntegrity', 'DBCC'] Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005. 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://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2330, '@TraceFlag']
28 26 TF2340 TF2549 Information Warning definition TF 2340 disables Batch Sorts for optimized nested loops joins TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB Trace Flag 2340 disables Batch Sorts for optimized nested loops joins. Trace Flag 2549 forces DBCC CHECKDB to treat different physical files as one logical file. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['DefaultRuleset', 'TraceFlag', 'DBCC'] 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. 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://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql https://support.microsoft.com/help/2634571 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2340, '@TraceFlag']
29 27 TF2371 TF2562 Information Warning definition TF 2371 enables a linear recompilation threshold for statistics TF 2562 forces the DBCC CHECKDB command to execute in a single batch Enable trace Flag 2371 to allow a linear recompilation threshold for statistics. Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch. ['DefaultRuleset', 'TraceFlag', 'Performance', 'Statistics'] ['DefaultRuleset', 'TraceFlag', 'DBCC', 'TempDB'] 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. 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://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql https://support.microsoft.com/help/2634571 ['EnabledGlobalTraceFlags'] Server Windows /^(Windows|Linux)$/ OnPremises [11.0,) [2371, '@TraceFlag']
30 28 TF2371 TF2566 Warning override TF 2371 has no effect in SQL Server 2016 and higher versions TF 2566 disables default data purity check Disable trace flag 2371 in SQL Server 2016 and higher versions when all databases are at compatibility level 130 and above. Trace Flag 2566 disables default data purity check. ['DefaultRuleset', 'TraceFlag', 'DBCC', 'DataIntegrity'] 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. 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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2371, '@TraceFlag'] [13.0,)
31 29 TF2389 TF3023 Information definition TF 2389 enables automatic statistics for Ascending Keys TF 3023 enables Backup Checksum option by default Trace Flag 2389 enables automatic statistics for ascending keys. Verify need to set a non-default trace flag with the current system build and configuration. Trace Flag 3023 enables CHECKSUM option as default for BACKUP command. ['DefaultRuleset', 'TraceFlag', 'Statistics', 'Performance'] ['DefaultRuleset', 'TraceFlag', 'Backup'] 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. 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/2801413 https://support.microsoft.com/help/2656988 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance OnPremises [11.0,) [2389, '@TraceFlag']
32 30 TF2390 TF3042 Information definition TF 2390 enables automatic statistics for Ascending or Unknown Keys TF 3042 bypasses the default backup compression pre-allocation algorithm Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Verify need to set a non-default trace flag with the current system build and configuration. Trace Flag 3042 enables the bypass of the default backup compression. ['DefaultRuleset', 'TraceFlag', 'Statistics', 'Performance', 'Indexes'] ['DefaultRuleset', 'TraceFlag', 'Backup'] 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. 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://support.microsoft.com/help/2801413 https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance OnPremises [11.0,) [2390, '@TraceFlag']
33 31 TF2528 TF3226 Warning Information definition TF 2528 disables parallel operations for integrity checking TF 3226 disables ErrorLog entries for every successful backup operation Trace Flag 2528 disables parallel operations for integrity checking. Trace Flag 3226 disables ErrorLog entries for every successful backup operation. ['DefaultRuleset', 'TraceFlag', 'DataIntegrity', 'DBCC'] ['DefaultRuleset', 'TraceFlag', 'Backup'] 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. 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 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2528, '@TraceFlag']
34 32 TF2549 TF4136 Warning definition TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB TF 4136 disables Parameter Sniffing Trace Flag 2549 forces DBCC CHECKDB to treat different physical files as one logical file. 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', 'DBCC'] ['DefaultRuleset', 'TraceFlag'] 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. 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/2634571 https://support.microsoft.com/help/980653 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2549, '@TraceFlag']
35 33 TF2562 TF4137 Warning definition TF 2562 forces the DBCC CHECKDB command to execute in a single batch TF 4137 causes plans to use partial correlation for filters Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch. 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', 'DBCC', 'TempDB'] ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] 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. 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/2634571 https://support.microsoft.com/help/2658214 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2562, '@TraceFlag']
36 34 TF2566 TF4138 Warning definition TF 2566 disables default data purity check TF 4138 causes plans to not use Row Goal adjustments Trace Flag 2566 disables default data purity check. Trace flag 4138 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', 'DBCC', 'DataIntegrity'] ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] 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. 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. However it 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/945770 https://support.microsoft.com/help/2667211 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [2566, '@TraceFlag']
37 35 TF3023 TF4139 Information Warning definition TF 3023 enables Backup Checksum option by default TF 4139 enables automatic statistics for any key ordering Trace Flag 3023 enables CHECKSUM option as default for BACKUP command. 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', 'Backup'] ['DefaultRuleset', 'TraceFlag', 'Statistics'] 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. 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/2656988 https://support.microsoft.com/help/2952101 ['EnabledGlobalTraceFlags'] Server Windows /^(Windows|Linux)$/ OnPremises [11.0,) [3023, '@TraceFlag']
38 36 TF3042 TF4199 Information definition TF 3042 bypasses the default backup compression pre-allocation algorithm TF 4199 enables Query Optimizer fixes Trace Flag 3042 enables the bypass of the default backup compression. 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', 'Backup'] ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer'] 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. Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs. https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server http://support.microsoft.com/help/974006 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [11.0, 14.0) [3042, '@TraceFlag']
39 37 TF3226 TF6498 Information Warning definition TF 3226 disables ErrorLog entries for every successful backup operation TF 6498 enables additional concurrent large queries Trace Flag 3226 disables ErrorLog entries for every successful backup operation. 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', 'Backup'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'Memory'] 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. 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://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql https://support.microsoft.com/help/3024815 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises [11.0,) [3226, '@TraceFlag']
40 38 TF4136 TF6532 Information override TF 6532 enables performance improvements for Spatial data Trace Flag 4136 disables parameter sniffing. Verify need to set a non-default trace flag with the current system build and configuration. Enable trace flag 6532 to enable performance improvements for Spatial data. ['DefaultRuleset', 'TraceFlag', 'Performance'] 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. 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises ['[11.0.6020,11.0.6518)'] [11.0.2316,)
41 39 TF4136 TF6532.6533 Warning definition TF 4136 disables Parameter Sniffing TF 6532 and TF 6533 enable performance improvements for Spatial data 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. 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'] ['DefaultRuleset', 'TraceFlag', 'Performance'] 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. 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/980653 https://support.microsoft.com/help/3107399 ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises [11.0,) [4136, '@TraceFlag']
42 40 TF4137 TF6534 Information Warning override TF 6534 enables performance improvements for Spatial data Trace Flag 4137 causes SQL Server to generate a plan using partial correlation of filters. Verify need to set a non-default trace flag with the current system build and configuration. 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 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. 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0,) [11.0.2316,)
43 41 TF4137 TF7412 Warning Information definition TF 4137 causes plans to use partial correlation for filters TF 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting 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. Enable trace flag 7412 to enables the lightweight profiling infrastructure for live query performance troubleshooting. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['DefaultRuleset', 'TraceFlag', '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. 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://support.microsoft.com/help/2658214 https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [13.0.4001,15.0) [4137, '@TraceFlag']
44 42 TF4138 TF9024 Information Warning override TF 9024 converts a global log pool memory object into NUMA node partitioned memory object 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. Verify need to set a Non-default TF with current system build and configuration. ['DefaultRuleset', 'TraceFlag', 'Performance', 'NUMA', 'Memory', 'CPU'] 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. 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 ['EnabledGlobalTraceFlags'] Server Windows OnPremises [11.0.2325,)
45 43 TF4138 TF8048 Warning definition TF 4138 causes plans to not use Row Goal adjustments TF 8048 converts NUMA partitioned memory objects into CPU partitioned Trace flag 4138 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 TF with current system build and configuration. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'NUMA', 'CPU', 'Memory'] 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. However it does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration. TF 8048 converts NUMA partitioned memory objects into CPU partitioned. https://support.microsoft.com/help/2667211 https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises [11.0,) [4138, '@TraceFlag']
46 44 TF4139 DeprecatedFeatures Information Warning override Deprecated or discontinued features should not be used 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. Detected deprecated or discontinued feature uses: @{DeprecatedFeature}. We recommend to replace them with features actual for SQL Server version @{ProductVersion}. ['DefaultRuleset', 'Deprecated', 'Security', 'UpdateIssues', 'Performance'] 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. This check detects deprecated or discontinued features used on target SQL Server instance. 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 ['DeprecatedFeaturesStats', 'SQLServerVersion'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|tempdb|model|msdb)$/ ['[11.0.3431,11.0.5058)', '[11.0.5532,)']
47 45 TF4139 SystemHealthSession Warning definition TF 4139 enables automatic statistics for any key ordering system_health XEvent session is not active 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. Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer. ['DefaultRuleset', 'TraceFlag', 'Statistics'] ['DefaultRuleset', 'XEvent', 'SystemHealth'] 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. 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://support.microsoft.com/help/2952101 https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session ['EnabledGlobalTraceFlags'] ['XEvent.SystemHealth'] Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) [4139, '@TraceFlag']
48 46 TF4199 SPServerDiagnosticsSession Information Warning definition TF 4199 enables Query Optimizer fixes sp_server_diagnostics xEvent session is not active Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration. Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer. ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer'] ['DefaultRuleset', 'XEvent', 'SystemHealth'] Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs. 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. http://support.microsoft.com/help/974006 https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql ['EnabledGlobalTraceFlags'] ['XEvent.SPServerDiagnostics'] Server /^(Windows|Linux)$/ OnPremises [11.0, 14.0) [11.0,) [4199, '@TraceFlag']
49 47 TF6498 BlackboxTrace Information Warning override Blackbox trace is configured and running Trace Flag 6498 enables concurrent large queries. Make sure you still need the blackbox 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 ['CountBlackBoxTraces'] Server /^(Windows|Linux)$/ OnPremises [11.0,) ['[12.0.2474,12.0.2480]', '[12.0.4416,12.0.5000)']
50 48 TF6498 DefaultTrace Warning override No default trace was found or is not active Disable trace flag 6498 in SQL Server 2014 SP2, SQL Server 2016 and higher versions. Make sure that there is enough space for SQL Server to write the default trace file. Then have the default trace run by disabling and re-enabling it. ['DefaultRuleset', 'Traces'] 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. 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 ['CountDefaultTraces'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [12.0.5000,)
51 49 TF6498 HintsStatistics Warning Information definition TF 6498 enables additional concurrent large queries Hints are being used 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. We recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators, because the SQL Server Query Optimizer typically selects the best execution plan for a query. ['DefaultRuleset', 'TraceFlag', 'Performance', 'Memory'] ['DefaultRuleset', 'QueryOptimizer', 'Performance', 'Statistics'] 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. 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://support.microsoft.com/help/3024815 https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql ['EnabledGlobalTraceFlags'] ['Hints.InstanceStatistics'] Server Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) [6498, '@TraceFlag']
52 50 TF6532 HintsUsageInModules Information definition TF 6532 enables performance improvements for Spatial data Hints usage in modules Enable trace flag 6532 to enable performance improvements for Spatial data. @{Hint} was used in @{type_desc} @{Schema_Name}.@{Object_Name}. ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'QueryOptimizer', 'Performance', 'Statistics'] 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. 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://support.microsoft.com/help/3107399 https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql ['EnabledGlobalTraceFlags'] ['Hints.ModuleUsage'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance ['[11.0.6020,11.0.6518)'] [11.0,) [6532, '@TraceFlag']
53 51 TF6532.6533 PlansUseRatio Information Warning override Amount of single use plans in cache is high Enable trace flag 6532 and trace flag 6533 to enable performance improvements for Spatial data. Amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0}). Consider enabling the Optimize for ad hoc workloads setting on heavy OLTP ad-hoc workloads to conserve resources. ['DefaultRuleset', 'Performance', 'QueryOptimizer'] 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. Single use plans waste system resources. https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option ['CachedPlans.SingleUseRatio'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) ['[11.0.6518,12.0)', '[12.0.5000,13.0)'] [{'in': [6532, '@TraceFlag']}, {'in': [6533, '@TraceFlag']}]
54 52 TF6532.6533 HypotheticalIndexes Warning override Hypothetical indexes found Disable trace flag 6532 in SQL Server 2016 and higher versions. Index @{IndexName} for @{Schema}.@{Object} is marked as hypothetical. It is recommended to drop hypothetical index @{IndexName} as soon as possible. ['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 ['Hypothetical.Indexes'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/ [13.0,)
55 53 TF6532.6533 HypotheticalStatistics Warning definition TF 6532 and TF 6533 enable performance improvements for Spatial data Hypothetical statistics found 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. Statistics @{StatName} for @{Schema}.@{Object} is hypothetical. It is recommended to drop hypothetical statistics @{StatName} as soon as possible. ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Statistics'] 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. 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://support.microsoft.com/help/3107399 https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes ['EnabledGlobalTraceFlags'] ['Hypothetical.Statistics'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) [{'not': {'in': [6532, '@TraceFlag']}}, {'not': {'in': [6533, '@TraceFlag']}}]
56 54 TF6534 LatestCU Information Warning override SQL Server instance is not up to date Enable trace flag 6534 to enable performance improvement of query operations with spatial data types. Product version @{ProductVersion} is not the latest available. We recommend keeping your SQL Server up to date and install Service Packs and Cumulative Updates as they are released. ['DefaultRuleset', 'Security', 'UpdateIssues'] 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. 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, https://docs.microsoft.com/sql/database-engine/install-windows/install-sql-server-servicing-updates ['SQLServerVersion'] Server /^(Windows|Linux)$/ OnPremises [11.0,) [6534, '@TraceFlag'] ['[11.0.6020,12.0)', '[12.0.5000,13.0)']
57 55 TF6534 FKNoIndexes Warning definition TF 6534 enables performance improvements for Spatial data Foreign key constraints should have corresponding indexes 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. Create a corresponding index for each foreign key. There is no index on the following foreign keys: @{ConstraintName}. ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Performance', 'Indexes'] 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. 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://support.microsoft.com/help/3107399 https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints ['EnabledGlobalTraceFlags'] ['FKNoIndexes'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/ [6534, '@TraceFlag']
58 56 TF7412 MissedIndexes Information definition TF 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting Potentially missing indexes Enable trace flag 7412 to enables the lightweight profiling infrastructure for live query performance troubleshooting. Create an index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #} ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Performance', 'Indexes'] 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. Potentially missing indexes were found based on query history. It may be important to revise them. https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide ['EnabledGlobalTraceFlags'] ['MissedIndexes'] Server Database /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [13.0.4001,15.0) [11.0,) /^(master|model|msdb|tempdb)$/ [7412, '@TraceFlag']
59 57 TF9024 FullBackup Warning definition TF 9024 converts a global log pool memory object into NUMA node partitioned memory object Full backup is missed or outdated Verify need to set a Non-default TF with current system build and configuration. The last full backup had been created more than @{threshold} days ago. Create a new full backup. ['DefaultRuleset', 'TraceFlag', 'Performance', 'NUMA', 'Memory', 'CPU'] ['DefaultRuleset', 'Backup'] TF9024 converts a global log pool memory object into NUMA node partitioned memory object. Database doesn't have any full backup or the latest full backup is over 7 days. https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server ['EnabledGlobalTraceFlags'] ['DatabaseBackups'] Server Database Windows /^(Windows|Linux)$/ OnPremises [11.0,) /^(model|tempdb)$/ 7.0 [9024, '@TraceFlag']
60 58 TF9024 OutdatedTranLogBackup Information Warning override Transaction Log backup is missed or outdated Consider enabling TF9024 to convert global log pool memory objects into NUMA node partitioned memory objects. Create a backup of Transaction Log. 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 ['EnabledGlobalTraceFlags', 'ServerInstanceConfiguration'] ['DatabaseBackups'] Database [{'in': [9024, '@TraceFlag']}, {'gt': [8, {'div': ['@online_logical_processors', '@numa_nodes']}]}] /^(Windows|Linux)$/ OnPremises [11.0,) /^(master|model|msdb|tempdb)$/ ['[11.0.3349, 11.0.6020)', '[12.0, 12.0.4100)']
61 59 TF9024 DbDiffCollation Warning override Database collation doesn't match the collation of master TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above. Keep database collation the same as the collation for master or model ['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 ['DatabaseConfiguration'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) ['[11.0.6020, 12.0)', '[12.0.4100,)']
62 60 TF8048 AutoClose Warning definition TF 8048 converts NUMA partitioned memory objects into CPU partitioned Auto Close Option should be OFF Verify need to set a Non-default TF with current system build and configuration. Set AUTO_CLOSE option to OFF ['DefaultRuleset', 'TraceFlag', 'Performance', 'NUMA', 'CPU', 'Memory'] ['DefaultRuleset', 'Performance', 'DBConfiguration'] TF 8048 converts NUMA partitioned memory objects into CPU partitioned. 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://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off ['EnabledGlobalTraceFlags'] ['DatabaseConfiguration'] Server Database Windows /^(Windows|Linux)$/ OnPremises [11.0,) /^(master|msdb|tempdb)$/ [8048, '@TraceFlag']
63 61 TF8048 AutoShrink Warning override Auto Shrink Option should be OFF TF8048 is not needed in SQL Server 2014 SP2, SQL Server 2016 and above. 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 ['DatabaseConfiguration'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ [12.0.4100,)
64 62 TF8048 PageVerify Information Warning override PAGE_VERIFY option should be CHECKSUM Consider enabling TF 8048 to convert NUMA partitioned memory objects into CPU partitioned. 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 ['EnabledGlobalTraceFlags', 'ServerInstanceConfiguration'] ['DatabaseConfiguration'] Database [{'in': [8048, '@TraceFlag']}, {'gt': [8, {'div': ['@online_logical_processors', '@numa_nodes']}]}] /^(Windows|Linux)$/ OnPremises [11.0,) /^(master|msdb|tempdb)$/ [11.0, 12.0.4100)
65 63 DeprecatedFeatures DbChaining Warning definition Deprecated or discontinued features should not be used Cross-Database Access should be disabled Detected deprecated or discontinued feature uses: @{DeprecatedFeature}. We recommend to replace them with features actual for SQL Server version @{ProductVersion}. Set DB_CHAINING option to OFF ['DefaultRuleset', 'Deprecated', 'Security', 'UpdateIssues', 'Performance'] ['DefaultRuleset', 'DBConfiguration', 'Security'] This check detects deprecated or discontinued features used on target SQL Server instance. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. 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/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server ['DeprecatedFeaturesStats', 'SQLServerVersion'] ['DatabaseConfiguration'] Server Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|tempdb|model|msdb)$/ /^(master|msdb|tempdb)$/ ['@DeprecatedFeature', '']
66 64 SystemHealthSession AutoCreateStatsIncremental Warning definition system_health XEvent session is not active Incremental option of auto stats should be ON Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer. Set AUTO_CREATE_STATISTICS to ON and set INCREMENTAL to ON ['DefaultRuleset', 'XEvent', 'SystemHealth'] ['DefaultRuleset', 'DBConfiguration', 'Statistics', 'Performance'] 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. 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/extended-events/use-the-system-health-session https://docs.microsoft.com/sql/relational-databases/statistics/statistics ['XEvent.SystemHealth'] ['DatabaseConfiguration'] Server Database @XEvent.SystemHealthCount /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [12.0,) /^(master|msdb|tempdb)$/
67 65 SPServerDiagnosticsSession TrustWorthy Warning definition sp_server_diagnostics xEvent session is not active TRUSTWORTHY should be OFF Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer. Set TRUSTWORTHY option to OFF ['DefaultRuleset', 'XEvent', 'SystemHealth'] ['DefaultRuleset', 'DBConfiguration', 'Security'] 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. 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://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server ['XEvent.SPServerDiagnostics'] ['DatabaseConfiguration'] Server Database @XEvent.SPServerDiagnostics /^(Windows|Linux)$/ OnPremises [11.0,) /^(master|msdb|tempdb)$/
68 66 BlackboxTrace ParameterizationNotSimple Warning definition Blackbox trace is configured and running PARAMETERIZATION should be SIMPLE Make sure you still need the blackbox trace and stop it otherwise. Set PARAMETERIZATION = SIMPLE and use forced parameterization only on a certain class of queries, instead of all queries ['DefaultRuleset', 'Traces'] ['DefaultRuleset', 'DBConfiguration', 'Performance', 'QueryOptimizer'] 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. 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/system-stored-procedures/sp-trace-create-transact-sql https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides ['CountBlackBoxTraces'] ['DatabaseConfiguration'] Server Database /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ @BlackBoxTraceCount
69 67 DefaultTrace TempDBFilesNotSameSize Warning definition No default trace was found or is not active TempDB data files are not the same size Make sure that there is enough space for SQL Server to write the default trace file. Then have the default trace run by disabling and re-enabling it. Make all TempDB data files the same size ['DefaultRuleset', 'Traces'] ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] 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. We recommend that you create all TempDB data files at the same size. https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled https://support.microsoft.com/kb/2154845 ['CountDefaultTraces'] ['TempDBFiles'] Server @DefaultTraceCount /^(Windows|Linux)$/ OnPremises, ManagedInstance OnPremises [11.0,)
70 68 HintsStatistics TempDBFilesMultiple4 Information Warning definition Hints are being used Number of TempDB data files should be in multiples of 4 We recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators, because the SQL Server Query Optimizer typically selects the best execution plan for a query. Make sure number of TempDB data files is in multiples of 4 ['DefaultRuleset', 'QueryOptimizer', 'Performance', 'Statistics'] ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] 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. 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://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql https://support.microsoft.com/kb/2154845 ['Hints.InstanceStatistics'] [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance OnPremises [11.0,) 0
71 69 HintsUsageInModules TempDBFiles1PerCPU Information Warning definition Hints usage in modules Number of TempDB data files should depend on CPU count @{Hint} was used in @{type_desc} @{Schema_Name}.@{Object_Name}. Make sure to have 1 data file per logical processor (processors count: @{online_logical_processors}) ['DefaultRuleset', 'QueryOptimizer', 'Performance', 'Statistics'] ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] 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. 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://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql https://support.microsoft.com/kb/2154845 ['Hints.ModuleUsage'] [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance OnPremises [11.0,) FALSE
72 70 PlansUseRatio TempDBFilesNotLess8 Warning definition Amount of single use plans in cache is high Number of TempDB data files should be at least 8 Amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0}). Consider enabling the Optimize for ad hoc workloads setting on heavy OLTP ad-hoc workloads to conserve resources. Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8 ['DefaultRuleset', 'Performance', 'QueryOptimizer'] ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] Single use plans waste system resources. 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://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option https://support.microsoft.com/kb/2154845 ['CachedPlans.SingleUseRatio'] [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration'] Server /^(Windows|Linux)$/ OnPremises, ManagedInstance OnPremises [11.0,) ['@SingleUsePlansUseRatio', 0.5]
73 71 HypotheticalIndexes TempDBFilesAutoGrowth Warning definition Hypothetical indexes found TempDB data files have different auto growth settings Index @{IndexName} for @{Schema}.@{Object} is marked as hypothetical. It is recommended to drop hypothetical index @{IndexName} as soon as possible. Make Autogrowth settings the same for each TempDB data file ['DefaultRuleset', 'Indexes', 'Performance'] ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] 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. 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://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database ['Hypothetical.Indexes'] [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'growth': 'count', 'is_percent_growth': 'count'}}}] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance OnPremises [11.0,) /^(master|model|msdb|tempdb)$/
74 72 HypotheticalStatistics FilesAutogrowth Warning definition Hypothetical statistics found Database files have Autogrowth setting over 1GB Statistics @{StatName} for @{Schema}.@{Object} is hypothetical. It is recommended to drop hypothetical statistics @{StatName} as soon as possible. Set File Growth to less than 1GB for files: @{FileName} ['DefaultRuleset', 'Statistics'] ['DefaultRuleset', 'Performance', 'DBFileConfiguration'] 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. 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://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server ['Hypothetical.Statistics'] ['Autogrow1GB'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [13.0.4001,)
75 73 LatestCU DuplicateIndexes Warning definition SQL Server instance is not up to date There are tables with duplicate indexes Product version @{ProductVersion} is not the latest available. We recommend keeping your SQL Server up to date and install Service Packs and Cumulative Updates as they are released. Consider removing duplicate indexes in table @{Table}: @{ToDelete} ['DefaultRuleset', 'Security', 'UpdateIssues'] ['DefaultRuleset', 'Performance', 'Indexes'] 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). There are tables with duplicate indexes according to their definitions. We recommended to revise all these objects as soon as possible. https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an, https://docs.microsoft.com/sql/database-engine/install-windows/install-sql-server-servicing-updates https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide ['SQLServerVersion'] [{'id': 'IndexesDefinitions', 'transform': {'type': 'duplicateIndexes'}}] Server Database /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/
76 74 LatestCU RedundantIndexes Warning override SQL Server instance is up to date There are tables with possibly redundant indexes Product version @{ProductVersion} is the latest available. Consider removing 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://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an, https://docs.microsoft.com/sql/database-engine/install-windows/install-sql-server-servicing-updates https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide [{'id': 'IndexesDefinitions', 'transform': {'type': 'redundantIndexes'}}] Database TRUE /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/ ['[11.0.7001, 12.0)', '[12.0.6329, 13.0)', '[13.0.5492, 14.0)', '[14.0.3238, 15.0)', '[15.0.2070,)']
77 75 FKNoIndexes UserObjectsInMaster Warning definition Foreign key constraints should have corresponding indexes User objects in database master Create a corresponding index for each foreign key. There is no index on the following foreign keys: @{ConstraintName}. Remove user objects from database master: @{Object_Name} ['DefaultRuleset', 'Performance', 'Indexes'] ['DefaultRuleset', 'masterDB', 'Backup'] 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. 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/tables/primary-and-foreign-key-constraints https://docs.microsoft.com/sql/relational-databases/databases/master-database ['FKNoIndexes'] ['UserObjectsCountInMasterDB'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/
78 76 MissedIndexes HighCPUUsage Information Warning definition Potentially missing indexes High CPU usage on server Create an index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #} 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', 'Indexes'] ['DefaultRuleset', 'Performance', 'CPU'] Potentially missing indexes were found based on query history. It may be important to revise them. 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/sql-server-index-design-guide https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage ['MissedIndexes'] ['CpuUsage'] Database Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/ 70.0
79 77 FullBackup ReplErrors24H Warning definition Full backup is missed or outdated Replication errors in the last 24 hours The last full backup had been created more than @{threshold} days ago. Create a new full backup. Review replication errors for the following publications: @{publication} ['DefaultRuleset', 'Backup'] ['DefaultRuleset', 'Replication'] Database doesn't have any full backup or the latest full backup is over 7 days. This check searches for errors in distribution database agent's history table for the last 24 hours. https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication ['DatabaseBackups'] ['ReplicationErrors'] Database Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(model|tempdb)$/ 7 ['@LastFullBackup', {'mul': ['@threshold', 24]}] ['@LastFullBackup', None]
80 78 OutdatedTranLogBackup AgentAlertsSeverity10 Warning definition Transaction Log backup is missed or outdated Agent doesn't rise alerts for errors with severity 10 Create a backup of Transaction Log. Database recovery model: @{recovery_model_desc} Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'Backup'] ['DefaultRuleset', 'Agent'] Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H. 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/relational-databases/backup-restore/back-up-a-transaction-log-sql-server https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseBackups'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/ ['@LastTLBackup', 24] ['@LastTLBackup', None]
81 79 DbDiffCollation AgentAlertsSeverity16 Warning definition Database collation doesn't match the collation of master Agent doesn't rise alerts for errors with severity 16 Keep database collation the same as the collation for master or model Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'Collation'] ['DefaultRuleset', 'Agent'] 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. 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/database-engine/set-collation-user-defined-databases-match-master-model-databases https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) ['@collation_name', '@master_collation']
82 80 AutoClose AgentAlertsSeverity17 Warning definition Auto Close Option should be OFF Agent doesn't rise alerts for errors with severity 17 Set AUTO_CLOSE option to OFF Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'Performance', 'DBConfiguration'] ['DefaultRuleset', 'Agent'] 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. 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/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ @is_auto_close_on
83 81 AutoShrink AgentAlertsSeverity19 Warning definition Auto Shrink Option should be OFF Agent doesn't rise alerts for errors with severity 19 Set AUTO_SHRINK option to OFF Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'Performance'] ['DefaultRuleset', 'Agent'] 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. 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://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ @is_auto_shrink_on
84 82 PageVerify AgentAlertsSeverity20 Warning definition PAGE_VERIFY option should be CHECKSUM Agent doesn't rise alerts for errors with severity 20 Set PAGE_VERIFY option to CHECKSUM Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'DataIntegrity'] ['DefaultRuleset', 'Agent'] 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. 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/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ 2
85 83 DbChaining AgentAlertsSeverity21 Warning definition Cross-Database Access should be disabled Agent doesn't rise alerts for errors with severity 21 Set DB_CHAINING option to OFF Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'Security'] ['DefaultRuleset', 'Agent'] 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. 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/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ @is_db_chaining_on
86 84 AutoCreateStatsIncremental AgentAlertsSeverity22 Warning definition Incremental option of auto stats should be ON Agent doesn't rise alerts for errors with severity 22 Set AUTO_CREATE_STATISTICS to ON and set INCREMENTAL to ON Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'Statistics', 'Performance'] ['DefaultRuleset', 'Agent'] 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. 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/relational-databases/statistics/statistics https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server @is_auto_create_stats_incremental_on /^(Windows|Linux)$/ OnPremises, ManagedInstance [12.0,) [11.0,) /^(master|msdb|tempdb)$/
87 85 TrustWorthy AgentAlertsSeverity23 Warning definition TRUSTWORTHY should be OFF Agent doesn't rise alerts for errors with severity 23 Set TRUSTWORTHY option to OFF Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'Security'] ['DefaultRuleset', 'Agent'] 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. 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://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ @is_trustworthy_on
88 86 ParameterizationNotSimple AgentAlertsSeverity24 Warning definition PARAMETERIZATION should be SIMPLE Agent doesn't rise alerts for errors with severity 24 Set PARAMETERIZATION = SIMPLE and use forced parameterization only on a certain class of queries, instead of all queries Consider creating alerts for the following errors: @{error_ids} ['DefaultRuleset', 'DBConfiguration', 'Performance', 'QueryOptimizer'] ['DefaultRuleset', 'Agent'] 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. 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/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides https://docs.microsoft.com/sql/ssms/agent/alerts ['DatabaseConfiguration'] ['SysAlerts'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|msdb|tempdb)$/ @is_parameterization_forced
89 87 TempDBFilesNotSameSize WeakPassword Warning definition TempDB data files are not the same size Weak password Make all TempDB data files the same size Make sure to set strong passwords on the following logins: @{PasswordData} ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] ['DefaultRuleset', 'Security', 'WeakPassword'] We recommend that you create all TempDB data files at the same size. Some user logins have weak passwords. https://support.microsoft.com/kb/2154845 https://docs.microsoft.com/sql/relational-databases/security/strong-passwords ['TempDBFiles'] ['WeakPassword'] Server /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) 1
90 88 TempDBFilesMultiple4 VLFCount Warning definition Number of TempDB data files should be in multiples of 4 VLF count Make sure number of TempDB data files is in multiples of 4 Update transaction log settings to reduce the number of VLFs (current number is: @{RecoveryUnitId}) ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] ['DefaultRuleset', 'Backup', 'Performance'] 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. 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://support.microsoft.com/kb/2154845 https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration'] [{'id': 'VLF', 'transform': {'type': 'aggregate', 'map': {'RecoveryUnitId': {'type': 'count', 'distinct': False}}}}] Server Database [{'less': ['@online_logical_processors', 8]}, {'equal': [{'mod': ['@physical_name', 4]}, 0]}] /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) 50.0
91 89 TempDBFiles1PerCPU TF8015 Warning definition Number of TempDB data files should depend on CPU count TF 8015 disables auto-detection and NUMA setup Make sure to have 1 data file per logical processor (processors count: @{online_logical_processors}) Disable trace flag 8015 for this SQL Server instance. This TF does not apply to this SQL Server version ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] ['DefaultRuleset', 'TraceFlag', 'CPU', 'NUMA'] 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. 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://support.microsoft.com/kb/2154845 https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044 [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration'] ['EnabledGlobalTraceFlags'] Server [{'greater': ['@online_logical_processors', 8]}, {'greaterequal': ['@physical_name', '@online_logical_processors']}] /^(Windows|Linux)$/ Windows OnPremises [11.0,) [11.0,11.0.3349)
92 90 TempDBFilesNotLess8 TF8032 Warning definition Number of TempDB data files should be at least 8 TF 8032 reverts the cache limit parameters to the SQL Server 2005 RTM Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8 The cache limit parameters reverted 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 ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] ['DefaultRuleset', 'TraceFlag', 'Performance'] 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. 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. https://support.microsoft.com/kb/2154845 [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'physical_name': 'count'}}}, 'ServerInstanceConfiguration'] ['EnabledGlobalTraceFlags'] Server [{'less': ['@online_logical_processors', 9]}, {'greater': ['@physical_name', 7]}] /^(Windows|Linux)$/ Windows OnPremises [11.0,)
93 91 TempDBFilesAutoGrowth TF8744 Warning definition TempDB data files have different auto growth settings TF 8744 disables pre-fetching for the Nested Loop operator Make Autogrowth settings the same for each TempDB data file Disable trace flag 8744 for this SQL Server instance. This TF does not apply to this SQL Server version ['DefaultRuleset', 'TempDB', 'Performance', 'DBFileConfiguration'] ['DefaultRuleset', 'TraceFlag', 'Performance'] 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. 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://docs.microsoft.com/sql/relational-databases/databases/tempdb-database https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa [{'id': 'DatabaseMasterFiles', 'params': {'dbId': 2, 'type': 0}, 'transform': {'type': 'aggregate', 'map': {'growth': 'count', 'is_percent_growth': 'count'}}}] ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises [11.0,) [11.0,12.0) [{'@growth': 1}, {'@is_percent_growth': 1}]
94 92 FilesAutogrowth TF9347 Warning definition Database files have Autogrowth setting over 1GB TF 9347 disables batch mode for sort operator Set File Growth to less than 1GB for files: @{FileName} Disable trace flag 9347 for this SQL Server instance. This TF does not apply to this SQL Server version ['DefaultRuleset', 'Performance', 'DBFileConfiguration'] ['DefaultRuleset', 'TraceFlag', 'Performance'] 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. 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. https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server ['Autogrow1GB'] ['EnabledGlobalTraceFlags'] Database Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance OnPremises [13.0.4001,) [11.0,13.0)
95 93 DuplicateIndexes TF9349 Warning definition There are tables with duplicate indexes TF 9349 disables batch mode for top N sort operator Consider removing duplicate indexes in table @{Table}: @{ToDelete} Disable trace flag 9349 for this SQL Server instance. This TF does not apply to this SQL Server version ['DefaultRuleset', 'Performance', 'Indexes'] ['DefaultRuleset', 'TraceFlag', 'Performance'] There are tables with duplicate indexes according to their definitions. We recommended to revise all these objects as soon as possible. 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. https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide [{'id': 'IndexesDefinitions', 'transform': {'type': 'duplicateIndexes'}}] ['EnabledGlobalTraceFlags'] Database Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance OnPremises [11.0,) [11.0,13.0) /^(master|model|msdb|tempdb)$/
96 94 RedundantIndexes TF9389 Warning definition There are tables with possibly redundant indexes TF 9389 enables dynamic memory grant for batch mode operators Consider removing redundant indexes in table @{Table}: @{Indexes} Disable trace flag 9389 for this SQL Server instance. The TF does not apply to this SQL Server version ['DefaultRuleset', 'Performance', 'Indexes'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'TempDB'] 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. 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. https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide [{'id': 'IndexesDefinitions', 'transform': {'type': 'redundantIndexes'}}] ['EnabledGlobalTraceFlags'] Database Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance [11.0,) [11.0,13.0) /^(master|model|msdb|tempdb)$/
97 95 UserObjectsInMaster TF9476 Warning definition User objects in database master TF 9476 causes SQL Server to generate a plan using the Simple Containment instead of the default Base Containment under New CE Remove user objects from database master: @{Object_Name} Disable trace flag 9476 for this SQL Server instance. The TF does not apply to this SQL Server version ['DefaultRuleset', 'masterDB', 'Backup'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'QueryOptimizer'] 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. 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. https://docs.microsoft.com/sql/relational-databases/databases/master-database ['UserObjectsCountInMasterDB'] ['EnabledGlobalTraceFlags'] Database Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance OnPremises [11.0,) [11.0,13.0) master
98 96 HighCPUUsage TF9481 Warning definition High CPU usage on server TF 9481 enables Legacy CE model, irrespective of the compatibility level of the database Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}% Disable trace flag 9481 for this SQL Server instance. The TF does not apply to this SQL Server version ['DefaultRuleset', 'Performance', 'CPU'] ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] 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. 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. https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage ['CpuUsage'] ['EnabledGlobalTraceFlags'] Server Windows OnPremises, ManagedInstance OnPremises [11.0,) [11.0,12.0) 70 ['@AVGTotalCPUUsage', '@threshold']
99 97 ReplErrors24H TF10204 Warning definition Replication errors in the last 24 hours TF 10204 disables merge/recompress during columnstore index reorganization Review replication errors for the following publications: @{publication} Disable trace flag 10204 for this SQL Server instance. The TF does not apply to this SQL Server version ['DefaultRuleset', 'Replication'] ['DefaultRuleset', 'TraceFlag', 'Performance', 'ColumnStore'] This check searches for errors in distribution database agent's history table for the last 24 hours. 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. https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication ['ReplicationErrors'] ['EnabledGlobalTraceFlags'] Server /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance OnPremises [11.0,) [11.0,13.0)
100 98 AgentAlertsSeverity10 SPNaming Warning definition Agent doesn't rise alerts for errors with severity 10 Stored Procedure Naming Consider creating alerts for the following errors: @{error_ids} Rename the following stored procedures to get rid of the sp_ prefix: @{ObjectName} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Naming'] 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. 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/sql/ssms/agent/alerts https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100) ['SysAlerts'] ['BadNamingSP'] Server Database [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [825, 833, 855, 856, 3452, 3619, 17179, 17883, 17884, 17887, 17888, 17890, 28036] 10
101 99 AgentAlertsSeverity16 ObjectNamingSpecialChar Warning definition Agent doesn't rise alerts for errors with severity 16 Object Naming Consider creating alerts for the following errors: @{error_ids} Rename the following objects to get rid of special characters: @{ObjectName} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Naming'] 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. 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/sql/ssms/agent/alerts https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) ['SysAlerts'] ['BadNamingSpecialChars'] Server Database [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [2508, 2511, 3271, 5228, 5229, 5242, 5243, 5250, 5901, 17130, 17300] 16
102 100 AgentAlertsSeverity17 ColumnNamingSpecialChar Warning definition Agent doesn't rise alerts for errors with severity 17 Column Naming Consider creating alerts for the following errors: @{error_ids} Rename the following columns to get rid of special characters: @{ObjectName} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Naming'] 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. 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/sql/ssms/agent/alerts https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) ['SysAlerts'] ['BadNamingSpecialCharsColumns'] Server Database [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [802, 845, 1101, 1105, 1121, 1214, 8642, 9002] 17
103 101 AgentAlertsSeverity19 FnNaming Warning definition Agent doesn't rise alerts for errors with severity 19 User Function Naming Consider creating alerts for the following errors: @{error_ids} Rename the following functions to get rid of the fn_ prefix: @{ObjectName} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Naming'] 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. 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/ssms/agent/alerts https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql ['SysAlerts'] ['BadNamingUserFunctions'] Server Database [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [701] 19
104 102 AgentAlertsSeverity20 ObjectNamingResKeywords Warning definition Agent doesn't rise alerts for errors with severity 20 Object names contain reserved keywords Consider creating alerts for the following errors: @{error_ids} Rename the following objects to get rid of reserved keywords: @{ObjectName} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Naming'] 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. 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/ssms/agent/alerts https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql ['SysAlerts'] ['BadNamingKeywords'] Server Database [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [3624] 20
105 103 AgentAlertsSeverity21 DeprFeaturesInModules Warning definition Agent doesn't rise alerts for errors with severity 21 Use of deprecated or discontinued features in modules Consider creating alerts for the following errors: @{error_ids} Consider getting rid of the following deprecated or discontinued features in @{ObjectName}: @{Keyword} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Security', 'Deprecated', 'LongRunningChecks', 'UpdateIssues'] 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. 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/ssms/agent/alerts https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object ['SysAlerts'] ['DeprecatedFeaturesSQLModules'] Server Database [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|tempdb|model|msdb)$/ [605] 21
106 104 AgentAlertsSeverity22 DeprFeaturesInJobs Warning definition Agent doesn't rise alerts for errors with severity 22 Use of deprecated or discontinued features in modules Consider creating alerts for the following errors: @{error_ids} Consider getting rid of the following deprecated or discontinued features in job @{ObjectName}: @{Keyword} ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'Security', 'Deprecated', 'Agent', 'Jobs', 'LongRunningChecks', 'UpdateIssues'] 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. 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/ssms/agent/alerts https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object ['SysAlerts'] ['DeprecatedFeaturesJobs'] Server [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [5180, 8966] 22
107 105 AgentAlertsSeverity23 NUMANodeSingleCPU Warning definition Agent doesn't rise alerts for errors with severity 23 Single CPU assigned to NUMA node Consider creating alerts for the following errors: @{error_ids} Consider assigning additional CPUs to NUMA nodes that have only one assigned CPU ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'NUMA', 'CPU', 'Memory', 'Performance'] 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. 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/sql/ssms/agent/alerts https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) ['SysAlerts'] ['ServerInstanceConfiguration'] Server [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance [11.0,) [5572, 9100] 23
108 106 AgentAlertsSeverity24 NUMANodeNoCPU Warning definition Agent doesn't rise alerts for errors with severity 24 NUMA nodes without CPUs Consider creating alerts for the following errors: @{error_ids} Make sure that all NUMA nodes have assigned CPUs ['DefaultRuleset', 'Agent'] ['DefaultRuleset', 'NUMA', 'Performance', 'CPU', 'Memory'] 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. 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/sql/ssms/agent/alerts https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) ['SysAlerts'] ['AffinityNUMANodeNoAssignedCPUs'] Server [{'in': ['@severityN', '@severity']}, {'intersect': ['@error_ids', '@message_id']}] /^(Windows|Linux)$/ Windows OnPremises, ManagedInstance [11.0,) [823, 824, 832] 24
109 107 WeakPassword IndexKeyGuid Warning definition Weak password Guid in clustered index key column Make sure to set strong passwords on the following logins: @{PasswordData} Get rid of GUIDs in the following clustered indexes' keys: @{IndexName} ['DefaultRuleset', 'Security', 'WeakPassword'] ['DefaultRuleset', 'Indexes', 'Performance'] Some user logins have weak passwords. 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://docs.microsoft.com/sql/relational-databases/security/strong-passwords https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/ ['WeakPassword'] ['IndexesGuidKeyColumns'] Server Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|tempdb|model|msdb)$/
110 108 VLFCount IndexesLargeKeys Warning definition VLF count Indexes keys with more than 900 bytes Update transaction log settings to reduce the number of VLFs (current number is: @{RecoveryUnitId}) Get rid of keys larger than 900 bytes in index @{FullName} ['DefaultRuleset', 'Backup', 'Performance'] ['DefaultRuleset', 'Indexes', '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. 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. https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide http://msdn.microsoft.com/library/ms191241.aspx [{'id': 'VLF', 'transform': {'type': 'aggregate', 'map': {'RecoveryUnitId': {'type': 'count', 'distinct': False}}}}] ['IndexesDefinitions'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) [11.0,13.0) /^(master|model|msdb|tempdb)$/ 50 ['@RecoveryUnitId', '@threshold']
111 109 TF8015 IndexesLargeKeysNonClust Warning definition TF 8015 disables auto-detection and NUMA setup NonClustered indexes keys with more than 1700 bytes Disable trace flag 8015 for this SQL Server instance. This TF does not apply to this SQL Server version Get rid of keys larger than 1700 bytes in index @{FullName} ['DefaultRuleset', 'TraceFlag', 'CPU', 'NUMA'] ['DefaultRuleset', 'Indexes', 'Performance'] 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. 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://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044 http://msdn.microsoft.com/library/ms191241.aspx ['EnabledGlobalTraceFlags'] ['IndexesDefinitions'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,11.0.3349) [13.0,) /^(master|model|msdb|tempdb)$/ [8015, '@TraceFlag']
112 110 TF8032 IndexesLargeKeysClust Warning definition TF 8032 reverts the cache limit parameters to the SQL Server 2005 RTM Clustered indexes keys with more than 900 bytes The cache limit parameters reverted 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 Get rid of keys larger than 900 bytes in index @{FullName} ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Indexes', '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. 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 ['EnabledGlobalTraceFlags'] ['IndexesDefinitions'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,) [13.0,) /^(master|model|msdb|tempdb)$/ [8032, '@TraceFlag']
113 111 TF8744 DisabledIndexes Warning definition TF 8744 disables pre-fetching for the Nested Loop operator Disabled Indexes exist Disable trace flag 8744 for this SQL Server instance. This TF does not apply to this SQL Server version Remove or enable this disabled index: @{FullName} ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Indexes', '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. 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://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints ['EnabledGlobalTraceFlags'] ['IndexesDefinitions'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,12.0) [11.0,) /^(master|model|msdb|tempdb)$/ [8744, '@TraceFlag']
114 112 TF9347 IndexesFillFactor Warning definition TF 9347 disables batch mode for sort operator Index fill factor lower 80% Disable trace flag 9347 for this SQL Server instance. This TF does not apply to this SQL Server version Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Indexes', '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. 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 ['EnabledGlobalTraceFlags'] ['IndexesDefinitions'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,13.0) [11.0,) /^(master|model|msdb|tempdb)$/ [9347, '@TraceFlag']
115 113 TF9349 NonUniqueClusterIndex Warning definition TF 9349 disables batch mode for top N sort operator Non-unique clustered indexes Disable trace flag 9349 for this SQL Server instance. This TF does not apply to this SQL Server version Review this clustered index @{FullName} as it is non-unique ['DefaultRuleset', 'TraceFlag', 'Performance'] ['DefaultRuleset', 'Indexes', '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. 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://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described ['EnabledGlobalTraceFlags'] ['IndexesDefinitions'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,13.0) [11.0,) /^(master|model|msdb|tempdb)$/ [9349, '@TraceFlag']
116 114 TF9389 SuspectPages Warning definition TF 9389 enables dynamic memory grant for batch mode operators Suspect pages Disable trace flag 9389 for this SQL Server instance. The TF does not apply to this SQL Server version Run DBCC CHECKDB to verify affected database. Suspect pages were found: @{EventType} ['DefaultRuleset', 'TraceFlag', 'Performance', 'TempDB'] ['DefaultRuleSet', 'Pages', 'DataIntegrity'] 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. 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 ['EnabledGlobalTraceFlags'] ['SuspectPagesValidation'] Server Database Windows /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,13.0) [11.0,) [9389, '@TraceFlag']
117 115 TF9476 SparseFiles Warning definition TF 9476 causes SQL Server to generate a plan using the Simple Containment instead of the default Base Containment under New CE Sparse files Disable trace flag 9476 for this SQL Server instance. The TF does not apply to this SQL Server version Get rid of sparse files: @{SparseFiles} ['DefaultRuleset', 'TraceFlag', 'Performance', 'QueryOptimizer'] ['DefaultRuleSet', 'Snapshots', 'Backup', 'DataIntegrity'] 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. 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/, https://techcommunity.microsoft.com/t5/SQL-Server-Support/Did-your-backup-program-utility-leave-your-SQL-Server-running-in/ba-p/315840 ['EnabledGlobalTraceFlags'] ['SparseFilesValidation'] Server Database Windows /^(Windows|Linux)$/ OnPremises [11.0,13.0) [11.0,) [9476, '@TraceFlag']
118 116 TF9481 TableNoIndex Warning definition TF 9481 enables Legacy CE model, irrespective of the compatibility level of the database Tables without indexes Disable trace flag 9481 for this SQL Server instance. The TF does not apply to this SQL Server version Review table @{TableName} and create reasonable indexes ['DefaultRuleset', 'TraceFlag', 'QueryOptimizer', 'Performance'] ['DefaultRuleset', 'Indexes', '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. 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 ['EnabledGlobalTraceFlags'] ['TableIndexes'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,12.0) [11.0,) /^(master|tempdb|model|msdb)$/ [9481, '@TraceFlag']
119 117 TF10204 TableNoClusteredIndex Warning definition TF 10204 disables merge/recompress during columnstore index reorganization Tables without clustered indexes Disable trace flag 10204 for this SQL Server instance. The TF does not apply to this SQL Server version Review table @{TableName} and consider creating a clustered index ['DefaultRuleset', 'TraceFlag', 'Performance', 'ColumnStore'] ['DefaultRuleset', 'Indexes', 'Performance'] 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. 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/indexes/heaps-tables-without-clustered-indexes ['EnabledGlobalTraceFlags'] ['TableIndexes'] Server Database Windows /^(Windows|Linux)$/ OnPremises OnPremises, ManagedInstance [11.0,13.0) [11.0,) /^(master|tempdb|model|msdb)$/ [10204, '@TraceFlag']
120 118 SPNaming TablePSAlign Warning definition Stored Procedure Naming Table index not aligned with PS Rename the following stored procedures to get rid of the sp_ prefix: @{ObjectName} Consider recreating index @{IndexName} in table @{TableName} to have it aligned with your schema ['DefaultRuleset', 'Naming'] ['DefaultRuleset', 'Indexes', 'Performance'] 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. 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/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100) https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes ['BadNamingSP'] ['TableIndexesPartitioned'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|tempdb|model|msdb)$/ @ObjectName
121 119 ObjectNamingSpecialChar LoginNoPassword Warning definition Object Naming Logins with no passwords Rename the following objects to get rid of special characters: @{ObjectName} Make sure to set strong passwords on the following logins: @{PasswordData} ['DefaultRuleset', 'Naming'] ['DefaultRuleset', 'Security', 'WeakPassword'] 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. Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) https://docs.microsoft.com/sql/relational-databases/security/password-policy ['BadNamingSpecialChars'] ['NullPassword'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) @ObjectName
122 120 ColumnNamingSpecialChar LoginEqPassword Warning definition Column Naming Logins with passwords that are same as the login names Rename the following columns to get rid of special characters: @{ObjectName} Please review logins with password equals to login: @{PasswordData} ['DefaultRuleset', 'Naming'] ['DefaultRuleset', 'Security', 'WeakPassword'] 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. Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) https://docs.microsoft.com/sql/relational-databases/security/password-policy ['BadNamingSpecialCharsColumns'] ['NamePassword'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) @ObjectName
123 121 FnNaming SystemHealth Warning definition User Function Naming System Health important messages Rename the following functions to get rid of the fn_ prefix: @{ObjectName} Error @{Error_Number} has occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago ['DefaultRuleset', 'Naming'] ['DefaultRuleset', 'XEvent', 'SystemHealth', 'Performance'] 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. 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/create-function-transact-sql https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session ['BadNamingUserFunctions'] ['SystemHealth'] Database Server /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) @ObjectName
124 122 ObjectNamingResKeywords RarelyUsedIndex Warning definition Object names contain reserved keywords Rarely used index Rename the following objects to get rid of reserved keywords: @{ObjectName} Make sure you need index @{IndexName} as it's used too rarely ['DefaultRuleset', 'Naming'] ['DefaultRuleset', 'Indexes', 'Performance'] 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. 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/language-elements/reserved-keywords-transact-sql https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql ['BadNamingKeywords'] ['IndexesDefinitions'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|model|msdb|tempdb)$/ @ObjectName
125 123 DeprFeaturesInModules UnusedIndex Warning definition Use of deprecated or discontinued features in modules Unused index Consider getting rid of the following deprecated or discontinued features in @{ObjectName}: @{Keyword} Make sure you need index @{IndexName} as it's unused ['DefaultRuleset', 'Security', 'Deprecated', 'LongRunningChecks', 'UpdateIssues'] ['DefaultRuleset', 'Index', 'Performance'] 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. 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/relational-databases/performance-monitor/sql-server-deprecated-features-object https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql ['DeprecatedFeaturesSQLModules'] ['IndexesDefinitions'] Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,) /^(master|tempdb|model|msdb)$/ /^(master|model|msdb|tempdb)$/
126 124 DeprFeaturesInJobs SkewedCompatibilityLevel Warning definition Use of deprecated or discontinued features in modules Database with skewed compatibility level Consider getting rid of the following deprecated or discontinued features in job @{ObjectName}: @{Keyword} Update database compatibility level (current level: @{CompatibilityLevel}) ['DefaultRuleset', 'Security', 'Deprecated', 'Agent', 'Jobs', 'LongRunningChecks', 'UpdateIssues'] ['DefaultRuleset', 'CompatibilityLevel', 'Security', 'Performance', '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. Some databases may have a compatibility level lower than the allowed level by the Database Engine. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level ['DeprecatedFeaturesJobs'] ['CompatibilityLevel', 'SQLServerVersion'] Server Database /^(Windows|Linux)$/ OnPremises, ManagedInstance [11.0,)
127 125 definition @nodes_single_cpu
128 126 definition @NodeCnt
129 127 definition
130 128 definition ['@KeySize', 900]
131 129 definition [{'le': ['@KeySize', 1700]}, {'not': {'in': ['@Type', [2, 6]]}}]
132 130 definition [{'le': ['@KeySize', 900]}, {'not': {'in': ['@Type', [1, 5]]}}]
133 131 definition FALSE
134 132 definition [{'less': ['@FillFactor', 1]}, {'ge': ['@FillFactor', 80]}]
135 133 definition [{'gt': ['@Type', 1]}, {'@IsUnique': True}]
136 134 definition
137 135 definition
138 136 definition [{'gt': ['@IndexCount', 1]}, {'gt': ['@MaxIndexId', 0]}]
139 137 definition [{'le': ['@IndexCount', 1]}, {'gt': ['@MinIndexId', 0]}]
140 138 definition
141 139 definition
142 140 definition
143 141 definition
144 142 definition [{'@Hits': 0}, {'ge': ['@ReadsRatio', '@ReadsThreshold']}, {'@IsPrimaryKey': True}] 5
145 143 definition [{'and': [{'ne': ['@Type', 2]}, {'ne': ['@Type', 6]}]}, {'@IsPrimaryKey': True}, {'gt': ['@Hits', 0]}]
146 144 definition [{'div': ['@CompatibilityLevel', 10]}, '@ServerMajorVersion']
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194