Update the default rule set JSON and CSV files

Added new rules and probes
Updated some rules and probes
This commit is contained in:
Aleksei Guzev
2022-03-03 19:46:47 +03:00
parent 22d9695f82
commit 19aa827bd2
2 changed files with 2676 additions and 632 deletions
@@ -1,245 +1,295 @@
"id","itemType","enabled","level","displayName","message","tags","description","helpLink","target.type","target.platform","target.machineType","target.engineEdition","target.version","target.name","threshold","limit"
"AutoCreateStats","definition","TRUE","Medium","'Auto-Create Statistics' option should be on","Turn on 'Auto-Create Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoUpdateStats","definition","TRUE","Medium","Auto-Update Statistics should be on","Turn on 'Auto-Update Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"QueryStoreOn","definition","TRUE","Warning","Query Store should be active","Query Store operation mode should be 'Read Write' to keep performance analysis accurate","DefaultRuleset, Performance, QueryStore, Statistics","The Query Store feature provides you with insight on query plan choice and performance. It simplifies performance troubleshooting by helping you quickly find performance differences caused by query plan changes. Query Store automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows so you can see database usage patterns and understand when query plan changes happened on the server. While Query Store collects queries, execution plans and statistics, its size in the database grows until this limit is reached. When that happens, Query Store automatically changes the operation mode to read-only and stops collecting new data, which means that your performance analysis is no longer accurate.","https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master tempdb model",,
"TF174","definition","TRUE","Information","TF 174 increases plan cache bucket count","Enable trace flag 174 to increase plan cache bucket count","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 174 increases the SQL Server plan cache bucket count from 40,009 to 160,001 on 64-bit systems. When the SQL Server plan cache reaches its entry limit, plans that have low cost must be evicted in order to insert new plans. This can cause severe contention on the SOS_CACHESTORE spinlock and a high CPU usage occurs in SQL Server. On 64-bit systems, the number of buckets for the SQL Server plan cache is 40,009. Therefore, the maximum number of entries that can fit inside the SQL Server plan cache is 160,036. Enabling trace flag 174 on high performance systems increases the size of the cache and can avoid SOS_CACHESTORE spinlock contention.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0.3368,12.0) [12.0.2480,13.0) [13.0,)",,,
"TF634","definition","TRUE","Information","TF 634 disables background columnstore compression","Trace flag 634 disables background columnstore compression task. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Memory, Performance, ColumnStore","Trace Flag 634 disables the background columnstore compression task. SQL Server periodically runs the Tuple Mover background task that compresses columnstore index rowgroups with uncompressed data, one such rowgroup at a time. Columnstore compression improves query performance but also consumes system resources. You can control the timing of columnstore compression manually, by disabling the background compression task with trace flag 634, and then explicitly invoking ALTER INDEX...REORGANIZE or ALTER INDEX...REBUILD at the time of your choice.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF652","definition","TRUE","Information","TF 652 disables page pre-fetching scans","Trace flag 652 disables page pre-fetching scans. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory, Pages","Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching.","http://support.microsoft.com/kb/920093","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF661","definition","TRUE","Information","TF 661 disables background ghost cleanup task","Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly.","https://support.microsoft.com/help/920093","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF834","definition","TRUE","Information","TF 834 enables large-page allocations","Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads","DefaultRuleset, TraceFlag, Performance, Memory, ColumnStore","Trace Flag 834 causes the server to use large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Trace flag 834 is NOT recommended on SQL Server instances that use columnstore indexes.","https://support.microsoft.com/kb/3210239","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF845","definition","TRUE","Warning","TF 845 is not needed in SQL Server 2012 and higher","Disable trace flag 845 in SQL Server 2012 and higher versions","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF902","definition","TRUE","Medium","TF 902 Database Upgrade Bypass should be disabled","Disable trace flag 902 which bypasses database upgrade","DefaultRuleset, TraceFlag, UpdateIssues","Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance.","https://support.microsoft.com/help/2163980","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1117","definition","TRUE","Information","TF 1117 enables filegroup-level autogrow","Enable trace flag 1117 to enable filegroup auto-grow","DefaultRuleset, TraceFlag, DBFileConfiguration, Performance","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount.","https://support.microsoft.com/help/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1117","override","TRUE","Warning","TF 1117 has no effect in SQL Server 2016 and higher","Disable trace flag 1117 in SQL Server 2016 and higher versions","","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. Starting with SQL Server 2016, this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES options of ALTER DATABASE syntax.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",,,,,"[13.0,)",,,
"TF1118","definition","TRUE","Information","TF 1118 disables single page allocations","Enable trace flag 1118 to force page allocations on uniform extents","DefaultRuleset, TraceFlag, Memory, Performance, Pages","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations.","https://support.microsoft.com/help/328551","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1118","override","TRUE","Warning","TF 1118 has no effect in SQL Server 2016 and higher","Disable trace flag 1118 in SQL Server 2016 and higher versions","","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. Starting with SQL Server 2016, this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE syntax.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",,,,,"[13.0,)",,,
"TF1204","definition","TRUE","Information","TF 1204 returns deadlock information","Disable trace flag 1204 that returns deadlock information","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1204 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog.","https://support.microsoft.com/help/832524","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1211","definition","TRUE","Medium","TF 1211 lock escalation should be disabled","Disable trace flag 1211 to enable lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1222","definition","TRUE","Information","TF 1222 returns deadlock information","Disable trace flag 1222 that returns deadlock information","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1222 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog, in XML format that does not comply with any XSD schema.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1224","definition","TRUE","Medium","TF 1224 should be disabled","Disable trace flag 1224 to allow lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1229","definition","TRUE","Medium","TF 1229 lock partitioning should be enabled","Disable trace flag 1229 to enable lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance, CPU","Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF1236","definition","TRUE","Medium","TF 1236 database lock partitioning should be enabled","Enable trace Flag 1236 to enable database lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems.","https://support.microsoft.com/help/2926217","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AutoCreateStats","definition","TRUE","Medium","'Auto-Create Statistics' option should be on","Turn on 'Auto-Create Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"AutoUpdateStats","definition","TRUE","Medium","Auto-Update Statistics should be on","Turn on 'Auto-Update Statistics' option to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"QueryStoreOn","definition","TRUE","Low","Query Store should be active","Query Store operation mode should be 'Read Write' to keep performance analysis accurate","DefaultRuleset, Performance, QueryStore, Statistics","The Query Store feature provides you with insight on query plan choice and performance. It simplifies performance troubleshooting by helping you quickly find performance differences caused by query plan changes. Query Store automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows so you can see database usage patterns and understand when query plan changes happened on the server. While Query Store collects queries, execution plans and statistics, its size in the database grows until this limit is reached. When that happens, Query Store automatically changes the operation mode to read-only and stops collecting new data, which means that your performance analysis is no longer accurate.","https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store","Database","Windows Linux",,"SqlServer, ManagedInstance","[13.0,)","NOT: master tempdb model msdb",,
"TF174","definition","TRUE","Information","TF 174 increases plan cache bucket count","Enable trace flag 174 to increase plan cache bucket count","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 174 increases the SQL Server plan cache bucket count from 40,009 to 160,001 on 64-bit systems. When the SQL Server plan cache reaches its entry limit, plans that have low cost must be evicted in order to insert new plans. This can cause severe contention on the SOS_CACHESTORE spinlock and a high CPU usage occurs in SQL Server. On 64-bit systems, the number of buckets for the SQL Server plan cache is 40,009. Therefore, the maximum number of entries that can fit inside the SQL Server plan cache is 160,036. Enabling trace flag 174 on high performance systems increases the size of the cache and can avoid SOS_CACHESTORE spinlock contention.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0.3368,12.0) [12.0.2480,13.0) [13.0,)",,,
"TF634","definition","TRUE","Information","TF 634 disables background columnstore compression","Trace flag 634 disables background columnstore compression task. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Memory, Performance, ColumnStore","Trace Flag 634 disables the background columnstore compression task. SQL Server periodically runs the Tuple Mover background task that compresses columnstore index rowgroups with uncompressed data, one such rowgroup at a time. Columnstore compression improves query performance but also consumes system resources. You can control the timing of columnstore compression manually, by disabling the background compression task with trace flag 634, and then explicitly invoking ALTER INDEX...REORGANIZE or ALTER INDEX...REBUILD at the time of your choice.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF652","definition","TRUE","Information","TF 652 disables page pre-fetching scans","Trace flag 652 disables page pre-fetching scans. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory, Pages","Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching.","http://support.microsoft.com/kb/920093","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF661","definition","TRUE","Information","TF 661 disables background ghost cleanup task","Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly.","https://support.microsoft.com/help/920093","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF834","definition","TRUE","Information","TF 834 enables large-page allocations","Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads","DefaultRuleset, TraceFlag, Performance, Memory, ColumnStore","Trace Flag 834 causes the server to use large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Trace flag 834 is NOT recommended on SQL Server instances that use columnstore indexes.","https://support.microsoft.com/kb/3210239","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF845","definition","TRUE","Low","TF 845 is not needed in SQL Server 2012 and higher","Disable trace flag 845 in SQL Server 2012 and higher versions","DefaultRuleset, TraceFlag, Memory, Performance","Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF902","definition","TRUE","Medium","TF 902 Database Upgrade Bypass should be disabled","Disable trace flag 902 which bypasses database upgrade","DefaultRuleset, TraceFlag, UpdateIssues","Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance.","https://support.microsoft.com/help/2163980","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1117","definition","TRUE","Information","TF 1117 enables filegroup-level autogrow","Enable trace flag 1117 to enable filegroup auto-grow","DefaultRuleset, TraceFlag, DBFileConfiguration, Performance","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount.","https://support.microsoft.com/help/2154845","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1117","override","TRUE","Low","TF 1117 has no effect in SQL Server 2016 and higher","Disable trace flag 1117 in SQL Server 2016 and higher versions","","Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. Starting with SQL Server 2016, this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES options of ALTER DATABASE syntax.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",,,,,"[13.0,)",,,
"TF1118","definition","TRUE","Information","TF 1118 disables single page allocations","Enable trace flag 1118 to force page allocations on uniform extents","DefaultRuleset, TraceFlag, Memory, Performance, Pages","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations.","https://support.microsoft.com/help/328551","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1118","override","TRUE","Low","TF 1118 has no effect in SQL Server 2016 and higher","Disable trace flag 1118 in SQL Server 2016 and higher versions","","Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. Starting with SQL Server 2016, this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE syntax.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",,,,,"[13.0,)",,,
"TF1204","definition","TRUE","Information","TF 1204 returns deadlock information","Disable trace flag 1204 that returns deadlock information","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1204 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog.","https://support.microsoft.com/help/832524","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1211","definition","TRUE","Medium","TF 1211 lock escalation should be disabled","Disable trace flag 1211 to enable lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1222","definition","TRUE","Information","TF 1222 returns deadlock information","Disable trace flag 1222 that returns deadlock information","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1222 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog, in XML format that does not comply with any XSD schema.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1224","definition","TRUE","Medium","TF 1224 should be disabled","Disable trace flag 1224 to allow lock escalation","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1229","definition","TRUE","Medium","TF 1229 lock partitioning should be enabled","Disable trace flag 1229 to enable lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance, CPU","Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1236","definition","TRUE","Medium","TF 1236 database lock partitioning should be enabled","Enable trace Flag 1236 to enable database lock partitioning","DefaultRuleset, TraceFlag, Locks, Performance","Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems.","https://support.microsoft.com/help/2926217","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF1236","override","TRUE","Low","TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher","Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions","","Trace Flag 1236 enables database-level lock partitioning. Starting with SQL Server 2012 SP3 and SQL Server 2014 SP1, this behavior is controlled by the engine and trace flag 1236 has no effect.",,,,,,"[11.0.6020,12.0) [12.0.4100,)",,,
"TF1462","definition","TRUE","Medium","TF 1462 should be disabled to allow Log Stream Compression","Disable trace flag 1462 to allow log stream compression","DefaultRuleset, TraceFlag, Performance, AvailabilityGroups","Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth.","https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2312","definition","TRUE","Low","TF 2312 sets the default cardinality estimation model","Trace Flag 2312 does not apply to this SQL Server version. Check if you need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120).","https://support.microsoft.com/help/2801413","Server","Windows",,"OnPremises","[11.0,)",,,
"TF1462","definition","TRUE","Medium","TF 1462 should be disabled to allow Log Stream Compression","Disable trace flag 1462 to allow log stream compression","DefaultRuleset, TraceFlag, Performance, AvailabilityGroups","Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth.","https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF2312","definition","TRUE","Low","TF 2312 sets the default cardinality estimation model","Trace Flag 2312 does not apply to this SQL Server version. Check if you need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120).","https://support.microsoft.com/help/2801413","Server","Windows",,"SqlServer","[11.0,)",,,
"TF2312","override","False","Information",,"TF2312 sets the query optimizer cardinality estimation model to SQL Server 2014 or above versions, dependent of the compatibility level of the database","DefaultRuleset, TraceFlag, QueryOptimizer, Performance",,,,,,,"[12.0, )",,,
"TF2330","definition","TRUE","Low","TF 2330 disables recording of index usage stats","Check if you need to disable recording of index usage stats by setting non-default trace flag 2330","DefaultRuleset, TraceFlag, Performance, Indexes","Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005.","https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2340","definition","TRUE","Information","TF 2340 disables Batch Sorts for optimized nested loops joins","Trace Flag 2340 disables Batch Sorts for optimized nested loops joins","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2340 causes SQL Server not to use a sort operation (batch sort) for optimized nested loops joins when generating a plan. Verify need to set a non-default trace flag with the current system build and configuration.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2371","definition","TRUE","Information","TF 2371 enables a linear recompilation threshold for statistics","Enable trace Flag 2371 to allow linear recompilation threshold for statistics","DefaultRuleset, TraceFlag, Performance, Statistics","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#auto_update_statistics-option","Server","Windows",,"OnPremises","[11.0,)",,,
"TF2371","override","TRUE","Warning",,,"","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect.",,,,,,"[13.0,)",,,
"TF2389","definition","TRUE","Information","TF 2389 enables automatic statistics for ascending keys","Check if you need to set non-default trace flag 2389 with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance","Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"TF2390","definition","TRUE","Information","TF 2390 enables automatic statistics for Ascending or Unknown Keys","Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance, Indexes","Trace Flag 2390 enables automatically generated quick statistics for ascending or unknown keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"TF2528","definition","TRUE","Low","TF 2528 disables parallel operations for integrity checking","Trace Flag 2528 disables parallel operations for integrity checking, and can cause it to take longer to complete","DefaultRuleset, TraceFlag, DataIntegrity, DBCC","Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2549","definition","TRUE","Low","TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB","Do not use this trace flag unless you know that each file is based on a unique physical disk","DefaultRuleset, TraceFlag, DBCC","Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2562","definition","TRUE","Low","TF 2562 forces 'DBCC CHECKDB' command to execute in single batch","Disable trace flag 2562, which forces 'DBCC CHECKDB' command to execute in single batch","DefaultRuleset, TraceFlag, DBCC, TempDB","Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2566","definition","TRUE","Medium","TF 2566 disables default data purity check","Disable trace flag 2566 to turn on default data purity check","DefaultRuleset, TraceFlag, DBCC, DataIntegrity","Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default.","https://support.microsoft.com/help/945770","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3023","definition","TRUE","Information","TF 3023 enables Backup Checksum option by default","Disable trace flag 3023 to turn off 'CHECKSUM' option as default for 'BACKUP' command","DefaultRuleset, TraceFlag, Backup","Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option.","https://support.microsoft.com/help/2656988","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3042","definition","TRUE","Information","TF 3042 bypasses default backup compression pre-allocation algorithm","Disable trace flag 3042 as using this trace flag might cause a slight performance penalty","DefaultRuleset, TraceFlag, Backup","Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time.","https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF3226","definition","TRUE","Information","TF 3226 disables ErrorLog entries for successful backup operations","Disable trace flag 3226 to prevent SQL Server from recording ErrorLog entries for each successful backup operation","DefaultRuleset, TraceFlag, Backup","Trace Flag 3226 prevents SQL Server from recording an entry to the Errorlog on every successful backup operation. Backup operations are registered in the Errorlog by default. Frequent backup operations can contribute to massive Errorlog files that become unwieldy.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF2330","definition","TRUE","Low","TF 2330 disables recording of index usage stats","Check if you need to disable recording of index usage stats by setting non-default trace flag 2330","DefaultRuleset, TraceFlag, Performance, Indexes","Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005.","https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF2340","definition","TRUE","Information","TF 2340 disables Batch Sorts for optimized nested loops joins","Trace Flag 2340 disables Batch Sorts for optimized nested loops joins","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 2340 causes SQL Server not to use a sort operation (batch sort) for optimized nested loops joins when generating a plan. Verify need to set a non-default trace flag with the current system build and configuration.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF2371","definition","TRUE","Information","TF 2371 enables a linear recompilation threshold for statistics","Enable trace Flag 2371 to allow linear recompilation threshold for statistics","DefaultRuleset, TraceFlag, Performance, Statistics","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#auto_update_statistics-option","Server","Windows",,"SqlServer","[11.0,)",,,
"TF2371","override","TRUE","Low",,,"","Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect.",,,,,,"[13.0,)",,,
"TF2389","definition","TRUE","Information","TF 2389 enables automatic statistics for ascending keys","Check if you need to set non-default trace flag 2389 with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance","Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"TF2390","definition","TRUE","Information","TF 2390 enables automatic statistics for Ascending or Unknown Keys","Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Check if you need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Statistics, Performance, Indexes","Trace Flag 2390 enables automatically generated quick statistics for ascending or unknown keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2801413","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"TF2528","definition","TRUE","Low","TF 2528 disables parallel operations for integrity checking","Trace Flag 2528 disables parallel operations for integrity checking, and can cause it to take longer to complete","DefaultRuleset, TraceFlag, DataIntegrity, DBCC","Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF2549","definition","TRUE","Low","TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB","Do not use this trace flag unless you know that each file is based on a unique physical disk","DefaultRuleset, TraceFlag, DBCC","Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF2562","definition","TRUE","Low","TF 2562 forces 'DBCC CHECKDB' command to execute in single batch","Disable trace flag 2562, which forces 'DBCC CHECKDB' command to execute in single batch","DefaultRuleset, TraceFlag, DBCC, TempDB","Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase.","https://support.microsoft.com/help/2634571","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF2566","definition","TRUE","Medium","TF 2566 disables default data purity check","Disable trace flag 2566 to turn on default data purity check","DefaultRuleset, TraceFlag, DBCC, DataIntegrity","Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default.","https://support.microsoft.com/help/945770","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF3023","definition","TRUE","Information","TF 3023 enables Backup Checksum option by default","Disable trace flag 3023 to turn off 'CHECKSUM' option as default for 'BACKUP' command","DefaultRuleset, TraceFlag, Backup","Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option.","https://support.microsoft.com/help/2656988","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF3042","definition","TRUE","Information","TF 3042 bypasses default backup compression pre-allocation algorithm","Disable trace flag 3042 as using this trace flag might cause a slight performance penalty","DefaultRuleset, TraceFlag, Backup","Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time.","https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF3226","definition","TRUE","Information","TF 3226 disables ErrorLog entries for successful backup operations","Disable trace flag 3226 to prevent SQL Server from recording ErrorLog entries for each successful backup operation","DefaultRuleset, TraceFlag, Backup","Trace Flag 3226 prevents SQL Server from recording an entry to the Errorlog on every successful backup operation. Backup operations are registered in the Errorlog by default. Frequent backup operations can contribute to massive Errorlog files that become unwieldy.","https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF4136","override","TRUE","Information",,"Disable trace flag 4136 to prevent parameter sniffing. Verify need to set non-default trace flag with current system build and configuration","","Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.",,,,,,"[11.0.2316,)",,,
"TF4136","definition","TRUE","Medium","TF 4136 disables parameter sniffing","Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag","Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/980653","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4136","definition","TRUE","Medium","TF 4136 disables parameter sniffing","Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag","Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/980653","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF4137","override","TRUE","Information",,"Disable trace flag 4137 to instruct SQL Server to generate plan using partial correlation of filters. Verify need to set non-default trace flag with the current system build and configuration","","Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.",,,,,,"[11.0.2316,)",,,
"TF4137","definition","TRUE","Warning","TF 4137 causes plans to use partial correlation for filters","Trace flag 4137 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). However it does not apply to this SQL Server version. Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2658214","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4137","definition","TRUE","Low","TF 4137 causes plans to use partial correlation for filters","Trace flag 4137 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). However it does not apply to this SQL Server version. Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2658214","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF4138","override","TRUE","Information",,"Trace Flag 4138 enables plan that without row goal adjustments. Verify need to set a non-default trace flag with the current system build and configuration","","Trace Flag 4138 causes SQL Server to generate a plan that does not use row goal adjustments with queries that contain TOP, OPTION (FAST N), IN, or EXISTS keywords. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'DISABLE_OPTIMIZER_ROWGOAL' query hint. Verify need to set a Non-default trace flag with current system build and configuration.",,,,,,"[11.0.2325,)",,,
"TF4138","definition","TRUE","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","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4138","definition","TRUE","Low","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","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF4139","override","TRUE","Information",,"Trace Flag 4139 enables automatic statistics for any key ordering. Verify need to set a non-default trace flag with the current system build and configuration","","Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. This trace flag is recommended to be set in cases where queries access newly inserted key values that may change plan shape, but the new values are not yet updated in the statistics histogram for the affected columns. In this case, regardless of the leading statistics column status (ascending, descending, or stationary), the histogram used to estimate cardinality will be adjusted at query compile time. This trace flag does not apply to the cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Verify need to set a non-default trace flag with the current system build and configuration.",,,,,,"[11.0.3431,11.0.5058) [11.0.5532,)",,,
"TF4139","definition","TRUE","Warning","TF 4139 enables automatic statistics for any key ordering","Trace flag 4139 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Statistics","Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. However, this trace flag does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2952101","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF4199","definition","TRUE","Information","TF 4199 enables query optimizer fixes","Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer","Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs.","http://support.microsoft.com/help/974006","Server","Windows Linux",,"OnPremises","[11.0, 14.0)",,,
"TF6498","definition","TRUE","Low","TF 6498 enables additional concurrent large queries","Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory","Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.","https://support.microsoft.com/help/3024815","Server","Windows Linux",,"OnPremises","[12.0.5000,)",,,
"TF6532","definition","TRUE","Information","TF 6532 enables performance improvements for spatial data","Enable trace flag 6532 to enable performance improvements for spatial data","DefaultRuleset, TraceFlag, Performance","Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.","https://support.microsoft.com/help/3107399","Server","Windows Linux",,"OnPremises","[11.0.6020,11.0.6518)",,,
"TF6532.6533","override","TRUE","Warning",,"Disable trace flag 6532 in SQL Server 2016 and higher versions.","",,,,,,,"[13.0,)",,,
"TF6532.6533","definition","TRUE","Information","TF 6532 and 6533 improve spatial data performance","Enable trace flags 6532 and 6533 to improve spatial data performance","DefaultRuleset, TraceFlag, Performance","Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, types of queries, and objects.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0,)",,,
"TF4139","definition","TRUE","Low","TF 4139 enables automatic statistics for any key ordering","Trace flag 4139 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Statistics","Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. However, this trace flag does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration.","https://support.microsoft.com/help/2952101","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF4199","definition","TRUE","Information","TF 4199 enables query optimizer fixes","Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, QueryOptimizer","Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs.","http://support.microsoft.com/help/974006","Server","Windows Linux",,"SqlServer","[11.0, 14.0)",,,
"TF6498","definition","TRUE","Low","TF 6498 enables additional concurrent large queries","Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance, Memory","Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.","https://support.microsoft.com/help/3024815","Server","Windows Linux",,"SqlServer","[12.0.5000,)",,,
"TF6532","definition","TRUE","Information","TF 6532 enables performance improvements for spatial data","Enable trace flag 6532 to enable performance improvements for spatial data","DefaultRuleset, TraceFlag, Performance","Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.","https://support.microsoft.com/help/3107399","Server","Windows Linux",,"SqlServer","[11.0.6020,11.0.6518)",,,
"TF6532.6533","override","TRUE","Low",,"Disable trace flag 6532 in SQL Server 2016 and higher versions.","",,,,,,,"[13.0,)",,,
"TF6532.6533","definition","TRUE","Information","TF 6532 and 6533 improve spatial data performance","Enable trace flags 6532 and 6533 to improve spatial data performance","DefaultRuleset, TraceFlag, Performance","Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, types of queries, and objects.","https://support.microsoft.com/help/3107399","Server","Windows",,"SqlServer","[11.0,)",,,
"TF6534","override","TRUE","Information",,"Enable trace flag 6534 to enable performance improvement of query operations with spatial data types","","Trace Flag 6534 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.",,,,,,"[11.0.6020,12.0) [12.0.5000,13.0)",,,
"TF6534","definition","TRUE","Warning","TF 6534 enables performance improvements for spatial data","Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration.","https://support.microsoft.com/help/3107399","Server","Windows",,"OnPremises","[11.0,)",,,
"TF7412","definition","TRUE","Information","TF 7412 enables the lightweight profiling infrastructure","Enable trace flag 7412 to enable lightweight profiling infrastructure for live query performance troubleshooting","DefaultRuleset, TraceFlag, Performance","Trace Flag 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting. Consider enabling TF 7412 to have the ability to access runtime information on query execution plans for any session.","https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure","Server","Windows Linux",,"OnPremises","[13.0.4001,15.0)",,,
"TF9024","definition","TRUE","Low","TF 9024 converts global log pool memory object","Verify need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, Memory, CPU","TF9024 converts a global log pool memory object into NUMA node partitioned memory object.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"OnPremises",,,,
"TF6534","definition","TRUE","Low","TF 6534 enables performance improvements for spatial data","Verify need to set a non-default trace flag with the current system build and configuration","DefaultRuleset, TraceFlag, Performance","Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration.","https://support.microsoft.com/help/3107399","Server","Windows",,"SqlServer","[11.0,)",,,
"TF7412","definition","TRUE","Information","TF 7412 enables the lightweight profiling infrastructure","Enable trace flag 7412 to enable lightweight profiling infrastructure for live query performance troubleshooting","DefaultRuleset, TraceFlag, Performance","Trace Flag 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting. Consider enabling TF 7412 to have the ability to access runtime information on query execution plans for any session.","https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure","Server","Windows Linux",,"SqlServer","[13.0.4001,15.0)",,,
"TF9024","definition","TRUE","Low","TF 9024 converts global log pool memory object","Verify need to set non-default trace flag with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, Memory, CPU","TF9024 converts a global log pool memory object into NUMA node partitioned memory object.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"SqlServer",,,,
"TF9024","override","TRUE","Information",,"Enable trace flag 9024 to convert global log pool memory objects into NUMA node partitioned memory objects","",,,,,,,"[11.0.3349, 11.0.6020) [12.0, 12.0.4100)",,,
"TF9024","override","TRUE","Warning",,"TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above.","",,,,,,,"[11.0.6020, 12.0) [12.0.4100,)",,,
"TF8048","definition","TRUE","Low","TF 8048 converts NUMA partitioned memory objects into CPU partitioned","Verify need to set a Non-default TF 8048 with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, CPU, Memory","TF 8048 converts NUMA partitioned memory objects into CPU partitioned.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"OnPremises",,,,
"TF8048","override","TRUE","Warning",,"Disable trace flag 8048 in SQL Server 2014 SP2, SQL Server 2016 and above","",,,,,,,"[12.0.4100,)",,,
"TF9024","override","TRUE","Low",,"TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above.","",,,,,,,"[11.0.6020, 12.0) [12.0.4100,)",,,
"TF8048","definition","TRUE","Low","TF 8048 converts NUMA partitioned memory objects into CPU partitioned","Verify need to set a Non-default TF 8048 with current system build and configuration","DefaultRuleset, TraceFlag, Performance, NUMA, CPU, Memory","TF 8048 converts NUMA partitioned memory objects into CPU partitioned.","https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser","Server","Windows",,"SqlServer",,,,
"TF8048","override","TRUE","Low",,"Disable trace flag 8048 in SQL Server 2014 SP2, SQL Server 2016 and above","",,,,,,,"[12.0.4100,)",,,
"TF8048","override","TRUE","Information",,"Enable trace flag 8048 to convert NUMA partitioned memory objects into CPU partitioned","",,,,,,,"[11.0, 12.0.4100)",,,
"DeprecatedFeatures","definition","TRUE","Warning","Deprecated or discontinued features should not be used","Replace deprecated or discontinued feature @{DeprecatedFeature} with actual features for SQL Server version @{ProductVersion}","DefaultRuleset, Deprecated, Security, UpdateIssues, Performance","This check detects deprecated or discontinued features used on target SQL Server instances. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"SystemHealthSession","definition","TRUE","Medium","'system_health' XEvent session is not active","Start system health session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SPServerDiagnosticsSession","definition","TRUE","Low","'sp_server_diagnostics' xEvent session is not active","Start xEvent session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DefaultTrace","definition","TRUE","Low","Default trace was not found or is inactive","Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it","DefaultRuleset, Traces","Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"HintsStatistics","definition","TRUE","Information","Hints are used","Use <join_hint>, <query_hint> and <table_hint> in specific cases only since SQL Server Query Optimizer typically selects best execution plan for queries","DefaultRuleset, QueryOptimizer, Performance, Statistics","Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.","https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"HintsUsageInModules","definition","False","Information","Hints usage in modules","@{Hint} used in @{type_desc} @{Schema_Name}.@{Object_Name}","DefaultRuleset, QueryOptimizer, Performance, Statistics","Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.","https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"PlansUseRatio","definition","TRUE","Medium","Amount of single-use plans in cache is high","Enable 'Optimize for ad hoc workloads' option on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","The 'Optimize for ad hoc workloads' option helps relieve memory pressure by not allowing the plan cache to become filled with compiled plans that aren't reused.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.5",
"HypotheticalIndexes","definition","TRUE","Medium","Hypothetical indexes found","Drop hypothetical @{IndexName} index for @{Schema}.@{Object}","DefaultRuleset, Indexes, Performance","Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"HypotheticalStatistics","definition","TRUE","Medium","Hypothetical statistics found","Drop hypothetical @{StatName} statistics for @{Schema}.@{Object}","DefaultRuleset, Statistics","Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"LatestCU","definition","TRUE","Medium","SQL Server instance is not up to date","Update SQL Server and install Service Packs and Cumulative Updates as they are released. Current product version @{ProductVersion} is not up to date","DefaultRuleset, Security, UpdateIssues","On an installed instance of SQL Server, we recommend that you apply the latest security updates and critical updates including general distribution releases (GDRs), service packs (SPs), and cumulative updates (CUs).","https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LatestCU","override","TRUE","Warning","SQL Server instance is up to date","Product version @{ProductVersion} is the latest available","",,"https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an",,,,,"[11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.6300, 14.0) [14.0.3411, 15.0) [15.0.4178,)",,,
"FKNoIndexes","definition","TRUE","Medium","Foreign key constraints should have corresponding indexes","Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName}","DefaultRuleset, Performance, Indexes","Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful.","https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"MissedIndexes","definition","TRUE","Information","Potentially missing indexes","Create index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #}","DefaultRuleset, Performance, Indexes","Potentially missing indexes were found based on query history. It may be important to revise them.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"FullBackup","definition","TRUE","Medium","Full backup is missed or outdated","Create full backup. Last full backup is over @{threshold} days old","DefaultRuleset, Backup","Database doesn't have any full backup or the latest full backup is over 7 days old.","https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: model tempdb","7",
"OutdatedTranLogBackup","definition","TRUE","Medium","Transaction Log backup is missed or outdated","Create transaction log backup. Database recovery model: @{recovery_model_desc}","DefaultRuleset, Backup","Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H.","https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master model msdb tempdb",,
"DbDiffCollation","definition","TRUE","Medium","Database collation doesn't match master collation","Keep database collation the same as master or model collation","DefaultRuleset, DBConfiguration, Collation","We recommend that the collations of user-defined databases match the collation of master or model. Otherwise, collation conflicts can occur that might prevent code from executing. For example, when a stored procedure joins one table to a temporary table, SQL Server might end the batch and return a collation conflict error if the collations of the user-defined database and the model database are different. This occurs because temporary tables are created in tempdb, which bases its collation on that of model.","https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AutoClose","definition","TRUE","Medium","'AUTO_CLOSE' option should be OFF","Set 'AUTO_CLOSE' option to OFF","DefaultRuleset, Performance, DBConfiguration","When AUTO_CLOSE is set ON, this can cause performance degradation on frequently accessed databases because of the increased overhead of opening and closing the database after each connection. AUTO_CLOSE also flushes the procedure cache after each connection.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"AutoShrink","definition","TRUE","Medium","'AUTO_SHRINK' option should be OFF","Set 'AUTO_SHRINK' option to OFF","DefaultRuleset, DBConfiguration, Performance","Shrinking databases is the fastest way to achieve fragmentation. SQL Server goes to the last page in the database, moves it to the first free available space, and then repeats the process again. This shuffles the deck, putting your pages out of order.","https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"PageVerify","definition","TRUE","Medium","'PAGE_VERIFY' option should be 'CHECKSUM'","Set 'PAGE_VERIFY' option to 'CHECKSUM'","DefaultRuleset, DBConfiguration, DataIntegrity","When CHECKSUM is enabled for the PAGE_VERIFY database option, the SQL Server Database Engine calculates a checksum over the contents of the whole page, and stores the value in the page header when a page is written to disk. When the page is read from disk, the checksum is recomputed and compared to the checksum value that is stored in the page header. This helps provide a high level of data-file integrity.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"DbChaining","definition","TRUE","Medium","Cross-Database access should be disabled","Turn off 'DB_CHAINING' option","DefaultRuleset, DBConfiguration, Security","Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to the additional security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"AutoCreateStatsIncremental","definition","TRUE","Low","Incremental option of auto stats should be ON","Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options","DefaultRuleset, DBConfiguration, Statistics, Performance","Incremental statistics update at partition level is a feature introduced in SQL Server 2014. When the option INCREMENTAL is turn on at the database level, newly auto created column statistics will use incremental statistics on partitioned tables by default.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master msdb tempdb",,
"TrustWorthy","definition","TRUE","Low","'TRUSTWORTHY' should be OFF","Set 'TRUSTWORTHY' option to OFF","DefaultRuleset, DBConfiguration, Security","You can use the TRUSTWORTHY database setting to indicate whether the instance of Microsoft SQL Server trusts the database and the contents within the database. By default, this setting is set to OFF to mitigate certain threats that may be present when a database is attached to the server.","https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master msdb tempdb",,
"ParameterizationNotSimple","definition","TRUE","Low","'PARAMETERIZATION' should be 'SIMPLE'","Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries","DefaultRuleset, DBConfiguration, Performance, QueryOptimizer","When the PARAMETERIZATION database option is set to SIMPLE, the SQL Server query optimizer may choose to parameterize the queries. This means that any literal values that are contained in a query are substituted with parameters. This process is referred to as simple parameterization. When SIMPLE parameterization is in effect, you cannot control which queries are parameterized and which queries are not. However, you can specify that all queries in a database be parameterized by setting the PARAMETERIZATION database option to FORCED. Regardless of whether you have a Plan-Stability or not, SQL Server will always auto parameterize your SQL Statements, and reuse the cached execution plan over and over again. It doesn't matter how terrible the execution plan is. Therefore you have to know in exact detail the shape of your execution plans, and whether they can lead to some performance related problems.","https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"TempDBFilesNotSameSize","definition","TRUE","Medium","TempDB data files are not the same size","Make all TempDB data files the same size","DefaultRuleset, TempDB, Performance, DBFileConfiguration","We recommend that you create all TempDB data files at the same size.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesMultiple4","definition","TRUE","Low","Number of TempDB data files should be in multiples of 4","Make the number of data files be in multiples of 4. For example, 8, 12, 16, and so on, depending on your workloads. Currently you have @{physical_name} TempDB data files ","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFiles1PerCPU","definition","TRUE","Medium","Number of TempDB data files should depend on CPU count","1 data file per logical processor is required (processors count: @{online_logical_processors})","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesNotLess8","definition","TRUE","Medium","Number of TempDB data files should be at least 8","Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TempDBFilesAutoGrowth","definition","TRUE","Medium","TempDB data files have different auto-growth settings","Make auto-growth settings the same for each TempDB data file","DefaultRuleset, TempDB, Performance, DBFileConfiguration","TempDB data files should be of equal size within each filegroup, as SQL Server uses a proportional-fill algorithm that favors allocations in files with more free space.","https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"FilesAutogrowth","definition","TRUE","Medium","Database files auto-growth over 1GB","Set file growth to less than 1GB for files: @{FileName}","DefaultRuleset, Performance, DBFileConfiguration","A data or log file will be extended with auto-growth value to prevent the lack of free space in files. This process can perform significant impact on SQL Server performance if auto-growth value gets over 1 GB. By default, SQL Server will put zeros to a newly allocated space. And the more space it takes, the more time it takes to initialize it.","https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0.4001,)",,,
"DuplicateIndexes","definition","TRUE","Low","Duplicate indexes","Remove duplicate indexes in table @{Table}: @{ToDelete}","DefaultRuleset, Performance, Indexes","A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. ","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"RedundantIndexes","definition","TRUE","Low","Tables with redundant indexes","Remove redundant indexes in table @{Table}: @{Indexes}","DefaultRuleset, Performance, Indexes","There are tables with possibly redundant indexes according to the set of key and included columns. We recommended to revise all these objects as soon as possible.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UserObjectsInMaster","definition","TRUE","Warning","User objects in master database","Remove user objects from 'master' database: @{Object_Name}","DefaultRuleset, masterDB, Backup","We highly recommend you not create user objects in the master database. If it's unavoidable for some reason, make sure to back up the database more frequently.","https://docs.microsoft.com/sql/relational-databases/databases/master-database","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","master",,
"HighCPUUsage","definition","TRUE","Medium","High CPU usage on server","Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}%","DefaultRuleset, Performance, CPU","Keeping CPU usage rates within normal ranges is vital for servers hosting SQL Server instances. A continually high rate of CPU usage may indicate the need to upgrade the CPU or add multiple processors. Alternatively, a high CPU usage rate may indicate a poorly tuned or designed application. Optimizing the application can lower CPU utilization.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,"70",
"ReplErrors24H","definition","TRUE","Medium","Replication errors within last 24 hours","Review '@{publisher_db}' database replication errors for publications: @{publication}","DefaultRuleset, Replication","This check searches for errors in distribution database agent's history table for the last 24 hours.","https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity10","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 10","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity16","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 16","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity17","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 17","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity19","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 19","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity20","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 20","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity21","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 21","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity22","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 22","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity23","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 23","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity24","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 24","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"WeakPassword","definition","TRUE","Medium","SQL logins have weak passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Some SQL logins have weak passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities.","https://docs.microsoft.com/sql/relational-databases/security/strong-passwords","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"VLFCount","definition","TRUE","Medium","VLF count","Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId}","DefaultRuleset, Backup, Performance","The SQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. The Database Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. The Database Engine tries to maintain a small number of virtual files. The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. The size or number of virtual log files cannot be configured or set by administrators. If the log files grow to a large size in many small increments, they will have many virtual log files. This can slow down database startup and also log backup and restore operations. Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"50",
"TF8015","definition","TRUE","Medium","TF 8015 disables auto-detection and NUMA setup","Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, CPU, NUMA","SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups.","https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044","Server","Windows Linux",,"OnPremises","[11.0,11.0.3349)",,,
"TF8032","definition","TRUE","Medium","TF 8032 reverts cache limit parameters to SQL Server 2005 RTM","Disable trace flag 8032","DefaultRuleset, TraceFlag, Performance","Trace Flag 8032 reverts the cache limit parameters to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP.",,"Server","Windows Linux",,"OnPremises","[11.0,)",,,
"TF8744","definition","TRUE","Medium","TF 8744 disables pre-fetching for Nested Loop operator","Disable trace flag 8744","DefaultRuleset, TraceFlag, Performance","Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator.","https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa","Server","Windows Linux",,"OnPremises","[11.0,12.0)",,,
"TF9347","definition","TRUE","Medium","TF 9347 disables batch mode for sort operator","Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"TF9349","definition","TRUE","Medium","TF 9349 disables batch mode for top N sort operator","Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"TF9389","definition","TRUE","Medium","TF 9389 enables dynamic memory grant for batch mode operators","Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, TempDB","Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,13.0)",,,
"TF9476","definition","TRUE","Medium","TF 9476 causes SQL Server to generate plan using Simple Containment assumption","Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, QueryOptimizer","Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"TF9481","definition","TRUE","Medium","TF 9481 enables Legacy CE model","Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database.",,"Server","Windows Linux",,"OnPremises","[11.0,12.0)",,,
"TF10204","definition","TRUE","Medium","TF 10204 disables merge/recompress","Disable trace flag 10204. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, ColumnStore","Trace flag 10204 disables merge/recompress during columnstore index reorganization. In SQL Server 2016 (13.x), when a columnstore index is reorganized, there is new functionality to automatically merge any small compressed rowgroups into larger compressed rowgroups, as well as recompressing any rowgroups that have a large number of deleted rows.",,"Server","Windows Linux",,"OnPremises","[11.0,13.0)",,,
"SPNaming","definition","TRUE","Medium","Stored procedure naming","Rename the following stored procedures to eliminate 'sp_' prefix: @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the sp_ prefix designates system stored procedures. If you use that prefix for your stored procedures, the name of your procedure might conflict with the name of a system stored procedure that will be created in the future. If such a conflict occurs, your application might break if your application refers to the procedure without qualifying the reference by schema. In this situation, the name will bind to the system procedure instead of to your procedure.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ObjectNamingSpecialChar","definition","TRUE","Low","Special characters in object names","Rename the following objects to eliminate special characters: @{ObjectName}","DefaultRuleset, Naming","If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ColumnNamingSpecialChar","definition","TRUE","Low","Special characters in column names","Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{ObjectName}","DefaultRuleset, Naming","Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FnNaming","definition","TRUE","Medium","User function naming","Rename the following functions to eliminate 'fn_ prefix': @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the fn_ prefix designates system functions. If you use that prefix for your functions, the name of your function might conflict with the name of a system function that will be created in the future. If such a conflict occurs, your application might break if your application refers to the function without qualifying the reference by schema. In this situation, the name will bind to the system function instead of to your function.","https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"ObjectNamingResKeywords","definition","TRUE","Low","Object names contain reserved keywords","Rename the following objects to eliminate reserved keywords: @{ObjectName}","DefaultRuleset, Naming","Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers.","https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"DeprFeaturesInModules","definition","TRUE","Low","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"DeprFeaturesInModules","override","False","Warning",,,"",,,"Database","Windows Linux","AzureSQL",,"[11.0,)",,,
"DeprFeaturesInJobs","definition","TRUE","Low","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"DeprFeaturesInJobs","override","False","Warning",,,"",,,"Server","Windows Linux","AzureSQL","OnPremises, ManagedInstance","[11.0,)",,,
"NUMANodeSingleCPU","definition","TRUE","Medium","Single CPU assigned to NUMA node","Assign additional CPUs to NUMA nodes with only one CPU","DefaultRuleset, NUMA, CPU, Memory, Performance","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,,
"NUMANodeNoCPU","definition","TRUE","Medium","NUMA nodes without CPUs","Assign CPUs to each NUMA node","DefaultRuleset, NUMA, Performance, CPU, Memory","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"OnPremises, ManagedInstance","[11.0,)",,,
"IndexKeyGuid","definition","TRUE","Low","Guid in clustered index key column","Remove GUIDs in clustered indexes keys: @{IndexName}","DefaultRuleset, Indexes, Performance","A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects.","https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"IndexesLargeKeys","definition","TRUE","Low","Indexes keys with more than 900 bytes","Remove keys larger than 900 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,13.0)","NOT: master model msdb tempdb",,
"IndexesLargeKeysNonClust","definition","TRUE","Low","NonClustered indexes keys with more than 1700 bytes","Remove keys larger than 1700 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master model msdb tempdb",,
"IndexesLargeKeysClust","definition","TRUE","Low","Clustered indexes keys with more than 900 bytes","Remove keys larger than 900 bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[13.0,)","NOT: master model msdb tempdb",,
"DisabledIndexes","definition","TRUE","Medium","Disabled indexes exist","Remove or enable disabled index: @{FullName}","DefaultRuleset, Indexes, Performance","If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them.","https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"IndexesFillFactor","definition","TRUE","Low","Index fill factor is below 80%","Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent","DefaultRuleset, Indexes, Performance","The fill-factor option is provided for fine-tuning index data storage and performance. When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index.","https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"NonUniqueClusterIndex","definition","TRUE","Medium","Non-unique clustered indexes","Review non-unique @{FullName} clustered index","DefaultRuleset, Indexes, Performance","Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. Thats why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive.","https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"DeprecatedFeatures","definition","TRUE","Low","Deprecated or discontinued features should not be used","Use actual features for SQL Server version @{ProductVersion} instead of found deprecated features: @{DeprecatedFeature}","DefaultRuleset, Deprecated, Security, UpdateIssues, Performance","This check detects deprecated or discontinued features used on target SQL Server instances. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"SystemHealthSession","definition","TRUE","Medium","'system_health' XEvent session is not active","Start system health session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"SPServerDiagnosticsSession","definition","TRUE","Low","'sp_server_diagnostics' xEvent session is not active","Start xEvent session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer","DefaultRuleset, XEvent, SystemHealth","This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.","https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"DefaultTrace","definition","TRUE","Low","Default trace was not found or is inactive","Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it","DefaultRuleset, Traces","Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"HintsStatistics","definition","TRUE","Information","Hints are used","Use <join_hint>, <query_hint> and <table_hint> in specific cases only since SQL Server Query Optimizer typically selects best execution plan for queries","DefaultRuleset, QueryOptimizer, Performance, Statistics","Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.","https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"HintsUsageInModules","definition","False","Information","Hints usage in modules","@{Hint} used in @{type_desc} @{Schema_Name}.@{Object_Name}","DefaultRuleset, QueryOptimizer, Performance, Statistics","Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.","https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"PlansUseRatio","definition","TRUE","Medium","Amount of single-use plans in cache is high","Enable 'Optimize for ad hoc workloads' option on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","The 'Optimize for ad hoc workloads' option helps relieve memory pressure by not allowing the plan cache to become filled with compiled plans that aren't reused.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,"0.5",
"HypotheticalIndexes","definition","TRUE","Medium","Hypothetical indexes found","Drop hypothetical @{IndexName} index for @{Schema}.@{Object}","DefaultRuleset, Indexes, Performance","Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"HypotheticalStatistics","definition","TRUE","Medium","Hypothetical statistics found","Drop hypothetical @{StatName} statistics for @{Schema}.@{Object}","DefaultRuleset, Statistics","Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible.","https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"LatestCU","definition","TRUE","Medium","SQL Server version is not supported","Update SQL Server and install service packs and cumulative updates. Current product version @{ProductVersion} of SQL Server is out of support","DefaultRuleset, Security, UpdateIssues","The Microsoft Support Lifecycle (MSL) policy offers a minimum of 10 years of support (5 years Mainstream support and 5 years Extended support). It also provides support for 1 year after the new service pack was released, older service packs are unsupported.","https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"LatestCU","override","TRUE","Low","SQL Server instance is not up to date","Update SQL Server and install service packs and cumulative updates. Current product version @{ProductVersion} 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).",,,,,,"[11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.5026,)",,,
"LatestCU","override","TRUE","Low","SQL Server instance is up to date","Product version @{ProductVersion} is latest available","",,,,,,,"[11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.6300, 14.0) [14.0.3430, 15.0) [15.0.4198,)",,,
"FKNoIndexes","definition","TRUE","Medium","Foreign key constraints should have corresponding indexes","Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName}","DefaultRuleset, Performance, Indexes","Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful.","https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"MissedIndexes","definition","TRUE","Information","Potentially missing indexes","Create index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #}","DefaultRuleset, Performance, Indexes","Potentially missing indexes were found based on query history. It may be important to revise them.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"FullBackup","definition","TRUE","Medium","Full backup is missed or outdated","Create full backup. Last full backup is over @{threshold} days old","DefaultRuleset, Backup","Database doesn't have any full backup or the latest full backup is over 7 days old.","https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: model tempdb","7",
"OutdatedTranLogBackup","definition","TRUE","Medium","Transaction Log backup is missed or outdated","Create transaction log backup. Database recovery model: @{recovery_model_desc}","DefaultRuleset, Backup","Database does not have any transaction Log backup since the latest full or differential backup, or it's older than @{threshold}H.","https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: master model msdb tempdb","24",
"DbDiffCollation","definition","TRUE","Medium","Database collation doesn't match master collation","Keep database collation the same as master or model collation","DefaultRuleset, DBConfiguration, Collation","We recommend that the collations of user-defined databases match the collation of master or model. Otherwise, collation conflicts can occur that might prevent code from executing. For example, when a stored procedure joins one table to a temporary table, SQL Server might end the batch and return a collation conflict error if the collations of the user-defined database and the model database are different. This occurs because temporary tables are created in tempdb, which bases its collation on that of model.","https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AutoClose","definition","TRUE","Medium","'AUTO_CLOSE' option should be OFF","Set 'AUTO_CLOSE' option to OFF","DefaultRuleset, Performance, DBConfiguration","When AUTO_CLOSE is set ON, this can cause performance degradation on frequently accessed databases because of the increased overhead of opening and closing the database after each connection. AUTO_CLOSE also flushes the procedure cache after each connection.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: master msdb tempdb",,
"AutoShrink","definition","TRUE","Medium","'AUTO_SHRINK' option should be OFF","Set 'AUTO_SHRINK' option to OFF","DefaultRuleset, DBConfiguration, Performance","Shrinking databases is the fastest way to achieve fragmentation. SQL Server goes to the last page in the database, moves it to the first free available space, and then repeats the process again. This shuffles the deck, putting your pages out of order.","https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"PageVerify","definition","TRUE","Medium","'PAGE_VERIFY' option should be 'CHECKSUM'","Set 'PAGE_VERIFY' option to 'CHECKSUM'","DefaultRuleset, DBConfiguration, DataIntegrity","When CHECKSUM is enabled for the PAGE_VERIFY database option, the SQL Server Database Engine calculates a checksum over the contents of the whole page, and stores the value in the page header when a page is written to disk. When the page is read from disk, the checksum is recomputed and compared to the checksum value that is stored in the page header. This helps provide a high level of data-file integrity.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: master msdb tempdb",,
"DbChaining","definition","TRUE","Medium","Cross-Database access should be disabled","Turn off 'DB_CHAINING' option","DefaultRuleset, DBConfiguration, Security","Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to the additional security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"AutoCreateStatsIncremental","definition","TRUE","Low","Incremental option of auto stats should be ON","Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options","DefaultRuleset, DBConfiguration, Statistics, Performance","Incremental statistics update at partition level is a feature introduced in SQL Server 2014. When the option INCREMENTAL is turn on at the database level, newly auto created column statistics will use incremental statistics on partitioned tables by default.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics","Database","Windows Linux",,"SqlServer, ManagedInstance","[12.0,)","NOT: master msdb tempdb",,
"TrustWorthy","definition","TRUE","Low","'TRUSTWORTHY' should be OFF","Set 'TRUSTWORTHY' option to OFF","DefaultRuleset, DBConfiguration, Security","You can use the TRUSTWORTHY database setting to indicate whether the instance of Microsoft SQL Server trusts the database and the contents within the database. By default, this setting is set to OFF to mitigate certain threats that may be present when a database is attached to the server.","https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: master msdb tempdb",,
"ParameterizationNotSimple","definition","TRUE","Low","'PARAMETERIZATION' should be 'SIMPLE'","Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries","DefaultRuleset, DBConfiguration, Performance, QueryOptimizer","When the PARAMETERIZATION database option is set to SIMPLE, the SQL Server query optimizer may choose to parameterize the queries. This means that any literal values that are contained in a query are substituted with parameters. This process is referred to as simple parameterization. When SIMPLE parameterization is in effect, you cannot control which queries are parameterized and which queries are not. However, you can specify that all queries in a database be parameterized by setting the PARAMETERIZATION database option to FORCED. Regardless of whether you have a Plan-Stability or not, SQL Server will always auto parameterize your SQL Statements, and reuse the cached execution plan over and over again. It doesn't matter how terrible the execution plan is. Therefore you have to know in exact detail the shape of your execution plans, and whether they can lead to some performance related problems.","https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master msdb tempdb",,
"TempDBFilesNotSameSize","definition","TRUE","Medium","TempDB data files are not the same size","Make all TempDB data files the same size","DefaultRuleset, TempDB, Performance, DBFileConfiguration","We recommend that you create all TempDB data files at the same size.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TempDBFilesMultiple4","definition","TRUE","Low","Number of TempDB data files should be in multiples of 4","Make the number of data files be in multiples of 4. For example, 8, 12, 16, and so on, depending on your workloads. Currently you have @{physical_name} TempDB data files ","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TempDBFiles1PerCPU","definition","TRUE","Medium","Number of TempDB data files should depend on CPU count","1 data file per logical processor is required (processors count: @{online_logical_processors})","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TempDBFilesNotLess8","definition","TRUE","Medium","Number of TempDB data files should be at least 8","Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8","DefaultRuleset, TempDB, Performance, DBFileConfiguration","Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.","https://support.microsoft.com/kb/2154845","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TempDBFilesAutoGrowth","definition","TRUE","Medium","TempDB data files have different auto-growth settings","Make auto-growth settings the same for each TempDB data file","DefaultRuleset, TempDB, Performance, DBFileConfiguration","TempDB data files should be of equal size within each filegroup, as SQL Server uses a proportional-fill algorithm that favors allocations in files with more free space.","https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"FilesAutogrowth","definition","TRUE","Medium","Database files auto-growth over 1GB","Set file growth to less than 1GB for files: @{FileName}","DefaultRuleset, Performance, DBFileConfiguration","A data or log file will be extended with auto-growth value to prevent the lack of free space in files. This process can perform significant impact on SQL Server performance if auto-growth value gets over 1 GB. By default, SQL Server will put zeros to a newly allocated space. And the more space it takes, the more time it takes to initialize it.","https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server","Database","Windows Linux",,"SqlServer, ManagedInstance","[13.0.4001,)",,,
"DuplicateIndexes","definition","TRUE","Low","Duplicate indexes","Remove duplicate indexes in table @{Table}: @{ToDelete}","DefaultRuleset, Performance, Indexes","A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. ","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"RedundantIndexes","definition","TRUE","Low","Tables with redundant indexes","Remove redundant indexes in table @{Table}: @{Indexes}","DefaultRuleset, Performance, Indexes","There are tables with possibly redundant indexes according to the set of key and included columns. We recommended to revise all these objects as soon as possible.","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UserObjectsInMaster","definition","TRUE","Low","User objects in master database","Remove user objects from 'master' database: @{Object_Name}","DefaultRuleset, masterDB, Backup","We highly recommend you not create user objects in the master database. If it's unavoidable for some reason, make sure to back up the database more frequently.","https://docs.microsoft.com/sql/relational-databases/databases/master-database","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","master",,
"HighCPUUsage","definition","TRUE","Medium","High CPU usage on server","Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}%","DefaultRuleset, Performance, CPU","Keeping CPU usage rates within normal ranges is vital for servers hosting SQL Server instances. A continually high rate of CPU usage may indicate the need to upgrade the CPU or add multiple processors. Alternatively, a high CPU usage rate may indicate a poorly tuned or designed application. Optimizing the application can lower CPU utilization.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage","Server","Windows",,"SqlServer, ManagedInstance","[11.0,)",,"70",
"ReplErrors24H","definition","TRUE","Medium","Replication errors within last 24 hours","Review '@{publisher_db}' database replication errors for publications: @{publication}","DefaultRuleset, Replication","This check searches for errors in distribution database agent's history table for the last 24 hours.","https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity10","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 10","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity16","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 16","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity17","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 17","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity19","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 19","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity20","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 20","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity21","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 21","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity22","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 22","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity23","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 23","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AgentAlertsSeverity24","definition","TRUE","Low","Agent doesn't rise alerts for errors with severity 24","Create alerts for errors: @{error_ids}","DefaultRuleset, Agent","Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.","https://docs.microsoft.com/sql/ssms/agent/alerts","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"WeakPassword","definition","TRUE","Medium","SQL logins have weak passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Some SQL logins have weak passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities.","https://docs.microsoft.com/sql/relational-databases/security/strong-passwords","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"VLFCount","definition","TRUE","Medium","VLF count","Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId}","DefaultRuleset, Backup, Performance","The SQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. The Database Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. The Database Engine tries to maintain a small number of virtual files. The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. The size or number of virtual log files cannot be configured or set by administrators. If the log files grow to a large size in many small increments, they will have many virtual log files. This can slow down database startup and also log backup and restore operations. Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value.","https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,"50",
"TF8015","definition","TRUE","Medium","TF 8015 disables auto-detection and NUMA setup","Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, CPU, NUMA","SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups.","https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044","Server","Windows Linux",,"SqlServer","[11.0,11.0.3349)",,,
"TF8032","definition","TRUE","Medium","TF 8032 reverts cache limit parameters to SQL Server 2005 RTM","Disable trace flag 8032","DefaultRuleset, TraceFlag, Performance","Trace Flag 8032 reverts the cache limit parameters to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP.",,"Server","Windows Linux",,"SqlServer","[11.0,)",,,
"TF8744","definition","TRUE","Medium","TF 8744 disables pre-fetching for Nested Loop operator","Disable trace flag 8744","DefaultRuleset, TraceFlag, Performance","Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator.","https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa","Server","Windows Linux",,"SqlServer","[11.0,12.0)",,,
"TF9347","definition","TRUE","Medium","TF 9347 disables batch mode for sort operator","Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries.",,"Server","Windows Linux",,"SqlServer","[11.0,13.0)",,,
"TF9349","definition","TRUE","Medium","TF 9349 disables batch mode for top N sort operator","Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance","Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries.",,"Server","Windows Linux",,"SqlServer","[11.0,13.0)",,,
"TF9389","definition","TRUE","Medium","TF 9389 enables dynamic memory grant for batch mode operators","Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, TempDB","Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available.",,"Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,13.0)",,,
"TF9476","definition","TRUE","Medium","TF 9476 causes SQL Server to generate plan using Simple Containment assumption","Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, QueryOptimizer","Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions.",,"Server","Windows Linux",,"SqlServer","[11.0,13.0)",,,
"TF9481","definition","TRUE","Medium","TF 9481 enables Legacy CE model","Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, QueryOptimizer, Performance","Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database.",,"Server","Windows Linux",,"SqlServer","[11.0,12.0)",,,
"TF10204","definition","TRUE","Medium","TF 10204 disables merge/recompress","Disable trace flag 10204. The trace flag does not apply to this SQL Server version","DefaultRuleset, TraceFlag, Performance, ColumnStore","Trace flag 10204 disables merge/recompress during columnstore index reorganization. In SQL Server 2016 (13.x), when a columnstore index is reorganized, there is new functionality to automatically merge any small compressed rowgroups into larger compressed rowgroups, as well as recompressing any rowgroups that have a large number of deleted rows.",,"Server","Windows Linux",,"SqlServer","[11.0,13.0)",,,
"SPNaming","definition","TRUE","Medium","Stored procedure naming","Rename the following stored procedures to eliminate 'sp_' prefix: @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the sp_ prefix designates system stored procedures. If you use that prefix for your stored procedures, the name of your procedure might conflict with the name of a system stored procedure that will be created in the future. If such a conflict occurs, your application might break if your application refers to the procedure without qualifying the reference by schema. In this situation, the name will bind to the system procedure instead of to your procedure.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100)","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"ObjectNamingSpecialChar","definition","TRUE","Low","Special characters in object names","Rename the following objects to eliminate special characters: @{ObjectName}","DefaultRuleset, Naming","If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"ColumnNamingSpecialChar","definition","TRUE","Low","Special characters in column names","Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{ObjectName}","DefaultRuleset, Naming","Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object.","https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FnNaming","definition","TRUE","Medium","User function naming","Rename the following functions to eliminate 'fn_ prefix': @{ObjectName}","DefaultRuleset, Naming","In SQL Server, the fn_ prefix designates system functions. If you use that prefix for your functions, the name of your function might conflict with the name of a system function that will be created in the future. If such a conflict occurs, your application might break if your application refers to the function without qualifying the reference by schema. In this situation, the name will bind to the system function instead of to your function.","https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"ObjectNamingResKeywords","definition","TRUE","Low","Object names contain reserved keywords","Rename the following objects to eliminate reserved keywords: @{ObjectName}","DefaultRuleset, Naming","Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers.","https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"DeprFeaturesInModules","definition","TRUE","Low","Deprecated or discontinued features in modules","Do not use deprecated or discontinued feature '@{Feature}'. It probably is used in @{ObjectName}","DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"DeprFeaturesInJobs","definition","TRUE","Low","Deprecated or discontinued features in modules","Remove deprecated or discontinued features in @{ObjectName}: @{Keyword}","DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues","Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.","https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"DeprFeaturesInJobs","override","False","Low",,,"",,,"Server","Windows Linux","AzureVm","SqlServer, ManagedInstance","[11.0,)",,,
"NUMANodeSingleCPU","definition","TRUE","Medium","Single CPU assigned to NUMA node","Assign additional CPUs to NUMA nodes with only one CPU","DefaultRuleset, NUMA, CPU, Memory, Performance","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"SqlServer, ManagedInstance","[11.0,)",,,
"NUMANodeNoCPU","definition","TRUE","Medium","NUMA nodes without CPUs","Assign CPUs to each NUMA node","DefaultRuleset, NUMA, Performance, CPU, Memory","Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)","Server","Windows",,"SqlServer, ManagedInstance","[11.0,)",,,
"IndexKeyGuid","definition","TRUE","Low","Guid in clustered index key column","Remove GUIDs in clustered indexes keys: @{IndexName}","DefaultRuleset, Indexes, Performance","A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects.","https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"IndexesLargeKeys","definition","TRUE","Low","Indexes keys with more than @{threshold} bytes","Remove keys larger than @{threshold} bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the @{threshold}-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,13.0)","NOT: master model msdb tempdb","900",
"IndexesLargeKeysNonClust","definition","TRUE","Low","NonClustered indexes keys with more than @{threshold} bytes","Remove keys larger than @{threshold} bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the @{threshold}-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"SqlServer, ManagedInstance","[13.0,)","NOT: master model msdb tempdb","1700",
"IndexesLargeKeysClust","definition","TRUE","Low","Clustered indexes keys with more than @{threshold} bytes","Remove keys larger than @{threshold} bytes in @{FullName} index","DefaultRuleset, Indexes, Performance","When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the @{threshold}-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.","http://msdn.microsoft.com/library/ms191241.aspx","Database","Windows Linux",,"SqlServer, ManagedInstance","[13.0,)","NOT: master model msdb tempdb","900",
"DisabledIndexes","definition","TRUE","Medium","Disabled indexes exist","Remove or enable disabled index: @{FullName}","DefaultRuleset, Indexes, Performance","If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them.","https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"IndexesFillFactor","definition","TRUE","Low","Index fill factor is below @{threshold}%","Review index @{FullName} as its fill factor @{FillFactor} is lower than @{threshold} 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 @{threshold} means that @{leafPageEmptyPercent} percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index.","https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb","80",
"NonUniqueClusterIndex","definition","TRUE","Medium","Non-unique clustered indexes","Review non-unique @{FullName} clustered index","DefaultRuleset, Indexes, Performance","Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. Thats why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive.","https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"SuspectPages","definition","TRUE","High","Suspect pages found","Run 'DBCC CHECKDB' to verify affected database. Suspect pages were found: @{EventType}","DefaultRuleSet, Pages, DataIntegrity","The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary.","https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server","Database","Windows Linux",,,"[11.0,)",,,
"SparseFiles","definition","TRUE","Low","Sparse files","Remove sparse files: @{SparseFiles}","DefaultRuleSet, Snapshots, Backup, DataIntegrity","If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size.","https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/","Database","Windows Linux",,,"[11.0,)",,,
"TableNoIndex","definition","TRUE","Low","Tables without indexes","Review @{TableName} table and create reasonable indexes","DefaultRuleset, Indexes, Performance","Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TableNoClusteredIndex","definition","TRUE","Low","Tables without clustered indexes","Review @{TableName} table and create clustered index","DefaultRuleset, Indexes, Performance","Tables without clustered indexes are called heaps. Theyre scattered on disk anywhere that SQL Server can find a spot, and theyre not stored in any order whatsoever. This can make for really fast inserts SQL Server can just throw the data down but slow selects, updates, and deletes.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TablePSAlign","definition","TRUE","Low","Table index not aligned with PS","Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema","DefaultRuleset, Indexes, Performance","Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index.","https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"LoginNoPassword","definition","False","Warning","SQL logins have no passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"LoginEqPassword","definition","False","Warning","Passwords and SQL login names are the same","Review logins that have passwords equal to SQL login names: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use passwords that are different from your SQL login names.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"SystemHealth","definition","TRUE","High","System Health important messages","Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago","DefaultRuleset, XEvent, SystemHealth, Performance","The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"RarelyUsedIndex","definition","TRUE","Low","Rarely used index","Revise rarely used index @{IndexName}","DefaultRuleset, Indexes, Performance","Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UnusedIndex","definition","TRUE","Medium","Unused index","Revise unused @{IndexName} index on @{TableName} table","DefaultRuleset, Index, Performance","Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"TableNoIndex","definition","TRUE","Low","Tables without indexes","Review @{TableName} table and create reasonable indexes","DefaultRuleset, Indexes, Performance","Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TableNoClusteredIndex","definition","TRUE","Low","Tables without clustered indexes","Review @{TableName} table and create clustered index","DefaultRuleset, Indexes, Performance","Tables without clustered indexes are called heaps. Theyre scattered on disk anywhere that SQL Server can find a spot, and theyre not stored in any order whatsoever. This can make for really fast inserts SQL Server can just throw the data down but slow selects, updates, and deletes.","https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"TablePSAlign","definition","TRUE","Low","Table index not aligned with PS","Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema","DefaultRuleset, Indexes, Performance","Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index.","https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master tempdb model msdb",,
"LoginNoPassword","definition","False","Low","SQL logins have no passwords","Set strong passwords for logins: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"LoginEqPassword","definition","False","Low","Passwords and SQL login names are the same","Review logins that have passwords equal to SQL login names: @{PasswordData}","DefaultRuleset, Security, WeakPassword","Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use passwords that are different from your SQL login names.","https://docs.microsoft.com/sql/relational-databases/security/password-policy","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"SystemHealth","definition","TRUE","High","System Health important messages","Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago","DefaultRuleset, XEvent, SystemHealth, Performance","The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine","https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"RarelyUsedIndex","definition","TRUE","Low","Rarely used index","Revise rarely used index @{IndexName}","DefaultRuleset, Indexes, Performance","Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"UnusedIndex","definition","TRUE","Medium","Unused index","Revise unused @{IndexName} index on @{TableName} table","DefaultRuleset, Index, Performance","Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere.","https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"SkewedCompatibilityLevel","definition","TRUE","Low","Database with skewed compatibility level","Update database compatibility level. Current level is @{CompatibilityLevel}","DefaultRuleset, CompatibilityLevel, Security, Performance, UpdateIssues","Some databases may have a compatibility level lower than the allowed level by the Database Engine.","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level","Database","Windows Linux",,,"[11.0,)",,,
"PendingDiskIORequests","definition","TRUE","Medium","Pending disk I/O requests","Solve I/O related issues to get rid of pending requests","DefaultRuleset, IO, Performance","A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment.","https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations","Server","Windows Linux",,,"[11.0,)",,,
"MaxDOP","definition","TRUE","Medium","MaxDOP should be less or equal to number of CPUs","Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDOPFewNUMA","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0, 13.0)",,,
"DbIntegrity","definition","TRUE","Medium","Database Integrity Checks","Run 'DBCC CHECKDB' command checks","DefaultRuleset, DBCC, Performance, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation.","https://msdn.microsoft.com/library/ms176064.aspx","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: tempdb",,
"DirectCatalogUpdates","definition","TRUE","Low","Direct Catalog Updates","Avoid using direct catalog update feature","DefaultRuleset, DBCC, Deprecated","The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: tempdb",,
"DataPurityCheck","definition","TRUE","Low","Data Purity Check","Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command","DefaultRuleset, DBCC, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues.","http://support.microsoft.com/kb/923247","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"StatSamplingRate","definition","TRUE","Low","Statistics sampling rate","Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName}","DefaultRuleset, Performance, Statistics","For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results.","https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.25",
"IndexFragmentation","definition","TRUE","Medium","Index Fragmentation","Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}%","DefaultRuleset, Index, Performance","The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.","https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb","5",
"IndexFragmentation","override","TRUE","Warning",,,"",,,,,,,"[12.0,)",,,
"XTPHashAvgChainBuckets","definition","TRUE","Medium","High avg chain length and empty buckets","Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in key values","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooManyBuckets","definition","TRUE","Low","Too many buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which wastes memory and marginally slows down full table scans","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooFewBuckets","definition","TRUE","Medium","Too few buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which leads to chaining records","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPRangeIXHealth","definition","TRUE","Low","NonClustered index retry amount","Review @{IndexFullName} index as its retry count is over @{RetryCountPct}% of total, which indicates possible concurrency issues","DefaultRuleset, Index, Performance, XTP","When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"TF6533Misuse","definition","TRUE","Low","'STRelate' and 'STAsBinary' functions unexpected results due to TF 6533","Disable trace flag 6533 to avoid unexpected results of 'STRelate' and 'STAsBinary' functions","DefaultRuleset, TraceFlag, Performance, TF6533","The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions.","https://support.microsoft.com/help/3107399","Database","Windows Linux",,"OnPremises","[11.0.6020, 11.0.6518)","NOT: master model msdb tempdb",,
"UntrustedConstraints","definition","TRUE","Low","Untrusted constraints","Execute 'ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name>' statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity","DefaultRuleset, Performance, DataIntegrity","If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them.","https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"PercentAutogrows","definition","TRUE","Low","Database files have growth ratio in percentage","Do not use ""File Growth In Percent"" for Autogrowth setting. Affected files: @{fileName} have growth ratio set in percentage","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options","Database","Windows Linux",,"OnPremises","[11.0,)","NOT: master model msdb tempdb",,
"StatsUpdate","definition","TRUE","Warning","Statistics need to be updated","Update stats in @{TableName} table to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"500",
"AdHocQueriesOff","definition","TRUE","Low","Option 'ad hoc distributed queries' should be disabled","Disable 'ad hoc distributed queries' option","DefaultRuleset, Configuration, Security","Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login.","https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AffinityMasksOverlap","definition","TRUE","Low","Affinity Mask and Affinity I/O Mask overlapping","Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask}","DefaultRuleset, Configuration, Performance","Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotRecommended","definition","TRUE","Low","'SQL Server Agent' service uses non-recommended account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotRecommended","override","False","Warning",,,"",,,,,,"Express",,,,
"AgentSvcAccNotSupported","definition","TRUE","Low","'SQL Server Agent' service uses not supported account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccNotSupported","override","False","Warning",,,"",,,,,,"Express",,,,
"AgentSvcAccSame","definition","TRUE","Low","'SQL Server Agent' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Agent' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::SQLAgent.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcAccSame","override","False","Warning",,,"",,,,,,"Express",,,,
"AgentSvcStoped","definition","TRUE","Low","'SQL Server Agent' service is stopped","Run 'SQL Server Agent' service","DefaultRuleset, Configuration","The 'SQL Server Agent' service executes jobs, monitors SQL Servers, fires alerts and enables automation for some administrative tasks.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"AgentSvcStoped","override","False","Warning",,,"",,,,,,"Express",,,,
"AutoSoftNUMAOn","definition","TRUE","Low","Auto Soft NUMA should be enabled","Turn 'automatic soft-NUMA disabled' option on to avoid inefficient allocation of cores between NUMA nodes","DefaultRuleset, Configuration, NUMA","Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts.","https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"AzSqlVmSize","definition","TRUE","Information","VM size is not memory-optimized","Use memory optimized virtual machine sizes for the best performance of SQL Server workloads","DefaultRuleset, SqlOnVm, Azure, Performance","Memory optimized VM sizes offer a high memory-to-CPU ratio that is great for relational database servers. The DSv2 11-15, Edsv4 series, the M-, and the Mv2- series offer the optimal memory-to-vCore ratio required for OLTP workloads. Both M series VMs offer the highest memory-to-vCore ratio required for mission critical workloads and is also ideal for data warehouse workloads.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices","Server",,"AzureSQL",,,,,
"BlockingChains","definition","TRUE","Low","Blocking chains","Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''}","DefaultRuleset, Statistics","Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql","Database","Windows Linux",,"OnPremises","[11.0,)",,,
"BlockProcThreshNotRecommend","definition","TRUE","Low","Blocked process threshold is set to recommended value","Increase or disable blocked process threshold option. Current value is @{block_threshold}","DefaultRuleset, Configuration","This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold","Server","Windows Linux",,"OnPremises","[11.0,)",,"5",
"BrowserSvcAccSame","definition","TRUE","Low","'SQL Server Browser' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Browser' and 'SQL Server Database Engine'. Now both services use '@{attr::service::SQLBrowser.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Browser' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"BrowserSvcStoped","definition","TRUE","Low","'SQL Server Browser' service is stopped","Run 'SQL Server Browser' service","DefaultRuleset, Configuration","The 'SQL Server Browser' service is a name resolution service that provides SQL Server connection information to client computers.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"CrossDBOwnershipOff","definition","TRUE","Low","Option 'cross db ownership chaining' should be disabled","Disable 'cross db ownership chaining' option","DefaultRuleset, Configuration, Security","Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DefaultTraceOff","definition","TRUE","Low","Default trace is enabled","Enable 'default trace enabled' option to get troubleshooting assistance","DefaultRuleset, Configuration","Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. ","https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"DiskFragmentationAnalysis","definition","TRUE","Low","Disk fragmentation analysis","Defragment volume '@{Output.Name}' with physical fragmentation","DefaultRuleset, Configuration","If you do not defragment your hard disk, the operating system may have to go to several physical locations on the disk to retrieve the database file, making file access slower. To get information about the fragmentation level, this check requires the destination SQL Server to be running under the sysadmin account.","https://support.microsoft.com/help/3195161/defragmenting-sql-server-database-disk-drives","Server","Windows",,"OnPremises","[11.0,)",,,
"DiskPartitionAlignment","definition","TRUE","Low","Disk Partition alignment","Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset}","DefaultRuleset, Performance, Storage","Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100)","Server","Windows",,"OnPremises","[11.0,)",,"65536",
"DtsSvcAccSame","definition","TRUE","Low","'Integration Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Integration Services' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::MsDtsServer.account}' account","DefaultRuleset, Configuration","Running the 'Integration Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"DtsSvcStoped","definition","TRUE","Low","'Integration Services' service is stopped","Run 'Integration Services' service","DefaultRuleset, Configuration","The 'Integration Services' service provides management support for Integration Services package storage and execution.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"ErrorLogSize","definition","TRUE","Low","Error log file size is too big","Cycle error log files or revise error log settings. Current error log file size is more than @{threshold} MB.","DefaultRuleset, Configuration, Performance","Cycling error log files makes it easier to read the error log.","https://docs.microsoft.com/sql/tools/configuration-manager/viewing-the-sql-server-error-log","Server","Windows Linux",,"OnPremises","[11.0,)",,"50",
"FullTextServiceLoadOSResources","definition","TRUE","Low","Full-text search option 'load_os_resources' set to default","Set full-text search option 'load_os_resources' to @{defaultLoadOSResources}","DefaultRuleset, Configuration","The full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FullTextServiceVerifySignature","definition","TRUE","Low","Full-text search option 'verify_signature' set to default","Set full-text search option 'load_os_resources' to @{defaultVerifySignature}","DefaultRuleset, Configuration, Security","The full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded.",,"Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,
"FullTextSvcAccNotRecommended","definition","TRUE","Low","'Full-text search' service uses non-recommended account","Use another account to run 'Full-text search' service. Current account '@{attr::service::MSSQLFDLauncher.account}' is not recommended","DefaultRuleset, Configuration","Running the 'Full-text search' service under the 'NT AUTHORITY\SYSTEM' account is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"FullTextSvcAccSame","definition","TRUE","Low","'Full-text search' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Full-text search' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSSQLFDLauncher.account}' account","DefaultRuleset, Configuration","Running the 'Full-text search' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"FullTextSvcStoped","definition","TRUE","Low","'Full-text search' service is stopped","Run 'Full-text search' service","DefaultRuleset, Configuration","The 'Full-text search' service quickly creates full-text indexes on content and properties of structured and semistructured data to provide document filtering and word-breaking for SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"HPLogicalProcessor","definition","TRUE","Low","HP Logical Processor issue","Update server BIOS to the latest version. It may be affected by the HP Logical Processor issue ","DefaultRuleset, Performance","HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use.","https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594","Server","Windows",,"OnPremises","[11.0,)",,,
"IndexCreateMemory","definition","TRUE","Low","'index create memory' should be greater than 'min memory per query'","Set 'index create memory' to 0 or make it greater than 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB. Current 'min memory per query' is @{min_memory_per_query} KB","DefaultRuleset, Configuration, IndexCreateMemory","The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LightweightPoolingOn","definition","TRUE","Low","Lightweight pooling option disabled","Disable 'lightweight pooling' option as fiber mode scheduling can decrease performance","DefaultRuleset, Configuration, Performance","The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode.","https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"LocksOptionNotDefault","definition","TRUE","Low","Option 'locks' should be set to default","Set 'locks' option to @{recommended_max_lock_number}. Current value is @{locks}","DefaultRuleset, Configuration, Performance","The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDOP1NUMA","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors}","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"MaxDopFewNumaLess16","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"MaxDopFewNumaOver16","definition","TRUE","Low","MAXDOP set in accordance to CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be half the number of logical processors per NUMA node with maximum value of 16","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[13.0,)",,,
"MaxDopFewNumaOver8","definition","TRUE","Medium","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be equal to 8","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"OnPremises","[11.0, 13.0)",,,
"MaxMemory","definition","TRUE","Low","Max allowed memory ","Set 'max server memory' value to @{recommended:N0} MB or less to avoid detrimental memory pressure. Current 'max server memory' value is @{max_server_memory:N0}, which is greater than recommended","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value too high can cause a single instance of SQL Server to compete for memory with other SQL Server instances hosted on the same machine. However, setting this value too low could cause significant memory pressure and performance problems.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemory","override","TRUE","Warning",,,"",,,,,,"Express",,,,"1410"
"MaxMemory","override","TRUE","Warning",,,"",,,,,,"Standard",,,,"131072"
"MaxMemorySystem","definition","TRUE","Low","Max server memory exceeds system memory","Set 'max server memory' to @{recommended:N0} MB or less to avoid detrimental memory pressure. System memory of @{sysmem:N0} MB is not sufficient for current 'max server memory' setting of @{max_server_memory:N0} MB","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value higher than system memory can cause SQL Server to compete for memory with the operating system and processes running on the same machine.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemorySystem","override","TRUE","Warning",,,"",,,,,,"Express",,,,"1410"
"MaxMemorySystem","override","TRUE","Warning",,,"",,,,,,"Standard",,,,"131072"
"MinMemoryPerQuery","definition","TRUE","Low","Option 'min memory per query' set to default","Set 'min memory per query' option to @{recommended_min_memory_per_query} KB. Current value is '@{min_memory_per_query}'","DefaultRuleset, Configuration, Memory, Performance","The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"NetworkPacketSize","definition","TRUE","Low","Option 'network packet size' set to default","Set 'network packet size' option to @{recommended_network_packet_size} bytes. Current value is @{network_packet_size}","DefaultRuleset, Configuration, Network","The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"NtfsBlockSizeNotFormatted","definition","TRUE","Low","NTFS block size in volumes with database files <> 64KB","Set allocation unit size on volume '@{volume_mount_point}' to 64 KB. Current size is @{Output.BlockSize} bytes","DefaultRuleset, Performance, Configuration, NTFS","A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB.","https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server","Server","Windows",,"OnPremises","[11.0,)",,,
"NtfsBlockSizeNotFormatted","override","TRUE","Medium",,,"",,,,,"AzureSQL",,,,,
"OlapSvcAccSame","definition","TRUE","Low","'Analysis Services' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account","DefaultRuleset, Configuration","Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"OlapSvcStoped","definition","TRUE","Low","'Analysis Services' service is stopped","Run 'Analysis Services' service","DefaultRuleset, Configuration","The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"OleAutomationProceduresOn","definition","TRUE","Low","Option 'Ole Automation Procedures' set to default","Disable 'Ole Automation Procedures' option to avoid security risks","DefaultRuleset, Configuration, Security","Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value).","https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"PageFileAutoManaged","definition","TRUE","Low","Page file is not automatically managed","Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}'","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth.","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows","@{not=AzureSQL}","OnPremises","[11.0,)",,,
"PageFileAutoManagedAllDrives","definition","TRUE","Low","Page file is not automatically managed","Disable 'Automatically manage paging file size for all drives' option","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. ","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileLess10FreeSpace","definition","TRUE","Low","Insufficient page file free space","Revise page file settings. Less than 10% of page file is available","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows Linux",,"OnPremises","[11.0,)",,"0.1",
"PageFileNotConfigured","definition","TRUE","Low","Page file not configured","Create page file on server","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows",,"OnPremises","[11.0,)",,,
"PageFileOut","definition","TRUE","Low","Memory paged out","Revise LPIM settings. Part of SQL Server process memory has been paged out","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the ""Dynamic memory management"" topic and the ""Server memory options"" topic in SQL Server Books Online.","https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"PowerPlanSchemeNotRecommended","definition","TRUE","Medium","Power plan is High Performance","Switch server to High Performance power plan","DefaultRuleset, Configuration, Performance","In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution.","https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan","Server","Windows",,"OnPremises","[11.0,)",,,
"PriorityBoostOn","definition","TRUE","High","Option 'priority boost' set to default","Set 'priority boost' option to default value","DefaultRuleset, Configuration, Performance","The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"QueryWaitNotDefault","definition","TRUE","High","Option 'query wait' set to default","Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries","DefaultRuleset, Configuration","Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RecoveryIntervalOn","definition","TRUE","Low","Option 'recovery interval' set to default","Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval}","DefaultRuleset, Configuration, Performance","The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RemoteDacClusterOn","definition","TRUE","Low","Remote admin connections enabled on cluster (DAC)","Enable 'remote admin connections' option","DefaultRuleset, Configuration","SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.","https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RemoteQueryTimeout","definition","TRUE","Low","Option 'remote query timeout' set to default","Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout}","DefaultRuleset, Configuration","The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"RsSvcAccSame","definition","TRUE","Low","'Reporting Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account","DefaultRuleset, Configuration","Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"RsSvcStoped","definition","TRUE","Low","'Reporting Services' service is stopped","Run 'Reporting Services' service","DefaultRuleset, Configuration","'The Reporting Services' service manages, executes, creates, schedules and delivers reports.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"OnPremises","[11.0,)",,,
"ScanStartupProcs","definition","TRUE","Low","Option 'scan for startup procs' disabled on replication servers","Disable 'scan for startup procs' option for servers that participate in replication","DefaultRuleset, Configuration","Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"SqlSvcAccNotRecommended","definition","TRUE","Low","'SQL Server Database Engine' service uses non-recommended account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"SqlSvcAccNotSupported","definition","TRUE","Low","'SQL Server Database Engine' service uses not supported account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"OnPremises","[11.0,)",,,
"ThreadExhaustionCPUBound","definition","TRUE","Low","Worker thread exhaustion on CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}'","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"ThreadExhaustionNotCPUBound","definition","TRUE","Low","Possible worker thread exhaustion on non-CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}')","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"ThresholdForParallelism","definition","TRUE","Medium","Option 'cost threshold for parallelism' set to default","Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism}","DefaultRuleset, Configuration, Performance","The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"WorkerThreadsLargeX64","definition","TRUE","Low","Option 'max worker threads' set to recommended value on x64 system","Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"WorkerThreadsLargeX86","definition","TRUE","Low","Option 'max worker threads' set to recommended value on x86 system","Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"OnPremises","[11.0,)",,,
"XpCmdShellOn","definition","TRUE","Low","Option 'xp_cmdshell' is disabled","Disable 'xp_cmdshell' as it exposes to security risks","DefaultRuleset, Configuration","The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. ","https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option","Server","Windows Linux",,"OnPremises","[11.0,)",,,
"AzDataDiskCache","definition","TRUE","High","Azure disk caching for data files","Set caching to 'ReadOnly' for disk @{name} (@{volume_mount_point}) as it is used for storing data files. Current setting: '@{caching}'","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Uncached IOPS and throughput plus Cached IOPS and throughput will yield the total possible performance available from the virtual machine within the VMs limits.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempdb",,
"AzDataOnDataDisks","definition","TRUE","Medium","Data files on Azure data disks","Move data files from @{volume_mount_point} to Premium SSD data disk(s)","DefaultRuleset, DBFileConfiguration, DBConfiguration","Azure data disks can be configured for optimal data security and performance. ","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempdb",,
"MaxDOP","definition","TRUE","Medium","MaxDOP should be less or equal to number of CPUs","Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"MaxDOPFewNUMA","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"SqlServer","[11.0, 13.0)",,,
"DbIntegrity","definition","TRUE","Medium","Database Integrity Checks","Run 'DBCC CHECKDB' command checks","DefaultRuleset, DBCC, Performance, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation.","https://msdn.microsoft.com/library/ms176064.aspx","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: tempdb","7",
"DirectCatalogUpdates","definition","TRUE","Low","Direct Catalog Updates","Avoid using direct catalog update feature","DefaultRuleset, DBCC, Deprecated","The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: tempdb",,
"DataPurityCheck","definition","TRUE","Low","Data Purity Check","Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command","DefaultRuleset, DBCC, DataIntegrity","The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues.","http://support.microsoft.com/kb/923247","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"StatSamplingRate","definition","TRUE","Low","Statistics sampling rate","Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName}","DefaultRuleset, Performance, Statistics","For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results.","https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,"0.25",
"IndexFragmentation","definition","TRUE","Medium","Index Fragmentation","Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}%","DefaultRuleset, Index, Performance","The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.","https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb","5",
"IndexFragmentation","override","TRUE","Low",,,"",,,,,,,"[12.0,)",,,
"XTPHashAvgChainBuckets","definition","TRUE","Medium","High avg chain length and empty buckets","Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in key values","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"SqlServer, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooManyBuckets","definition","TRUE","Low","Too many buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which wastes memory and marginally slows down full table scans","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"SqlServer, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPTooFewBuckets","definition","TRUE","Medium","Too few buckets","Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which leads to chaining records","DefaultRuleset, Index, Performance, XTP","Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.","https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725","Database","Windows Linux",,"SqlServer, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"XTPRangeIXHealth","definition","TRUE","Low","NonClustered index retry amount","Review @{IndexFullName} index as its retry count is over @{RetryCountPct}% of total, which indicates possible concurrency issues","DefaultRuleset, Index, Performance, XTP","When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[12.0,)","NOT: master model msdb tempdb",,
"TF6533Misuse","definition","TRUE","Low","'STRelate' and 'STAsBinary' functions unexpected results due to TF 6533","Disable trace flag 6533 to avoid unexpected results of 'STRelate' and 'STAsBinary' functions","DefaultRuleset, TraceFlag, Performance, TF6533","The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions.","https://support.microsoft.com/help/3107399","Database","Windows Linux",,"SqlServer","[11.0.6020, 11.0.6518)","NOT: master model msdb tempdb",,
"UntrustedConstraints","definition","TRUE","Low","Untrusted constraints","Execute 'ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name>' statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity","DefaultRuleset, Performance, DataIntegrity","If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them.","https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb",,
"PercentAutogrows","definition","TRUE","Low","Database files have growth ratio in percentage","Do not use ""File Growth In Percent"" for Autogrowth setting. Affected files: @{fileName} have growth ratio set in percentage","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: master model msdb tempdb",,
"StatsUpdate","definition","TRUE","Low","Statistics need to be updated","Update stats in @{TableName} table to improve query performance","DefaultRuleset, Performance, Statistics, QueryOptimizer","The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.","https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,"500",
"AdHocQueriesOff","definition","TRUE","Low","Option 'ad hoc distributed queries' should be disabled","Disable 'ad hoc distributed queries' option","DefaultRuleset, Configuration, Security","Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login.","https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"AffinityMasksOverlap","definition","TRUE","Low","Affinity Mask and Affinity I/O Mask overlapping","Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask}","DefaultRuleset, Configuration, Performance","Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"AgentSvcAccNotRecommended","definition","TRUE","Low","'SQL Server Agent' service uses non-recommended account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"AgentSvcAccNotRecommended","override","False","Low",,,"",,,,,,"Express",,,,
"AgentSvcAccNotSupported","definition","TRUE","Low","'SQL Server Agent' service uses not supported account","Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"AgentSvcAccNotSupported","override","False","Low",,,"",,,,,,"Express",,,,
"AgentSvcAccSame","definition","TRUE","Low","'SQL Server Agent' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Agent' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::SQLAgent.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Agent' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"AgentSvcAccSame","override","False","Low",,,"",,,,,,"Express",,,,
"AgentSvcStoped","definition","TRUE","Low","'SQL Server Agent' service is stopped","Run 'SQL Server Agent' service","DefaultRuleset, Configuration","The 'SQL Server Agent' service executes jobs, monitors SQL Servers, fires alerts and enables automation for some administrative tasks.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"SqlServer","[11.0,)",,,
"AgentSvcStoped","override","False","Low",,,"",,,,,,"Express",,,,
"AutoSoftNUMAOn","definition","TRUE","Low","Auto Soft NUMA should be enabled","Turn 'automatic soft-NUMA disabled' option on to avoid inefficient allocation of cores between NUMA nodes","DefaultRuleset, Configuration, NUMA","Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts.","https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server","Server","Windows Linux",,"SqlServer","[13.0,)",,,
"AzSqlVmSize","definition","TRUE","Information","VM size is not memory-optimized","Use memory optimized virtual machine sizes for the best performance of SQL Server workloads","DefaultRuleset, SqlOnVm, Azure, Performance","Memory optimized VM sizes offer a high memory-to-CPU ratio that is great for relational database servers. The DSv2 11-15, Edsv4 series, the M-, and the Mv2- series offer the optimal memory-to-vCore ratio required for OLTP workloads. Both M series VMs offer the highest memory-to-vCore ratio required for mission critical workloads and is also ideal for data warehouse workloads.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices","Server","Windows","AzureVm","SqlServer","[11.0,)",,,
"BlockingChains","definition","TRUE","Low","Blocking chains","Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''}","DefaultRuleset, Statistics","Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource.","https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql","Database","Windows Linux",,"SqlServer","[11.0,)",,"5",
"BlockProcThreshNotRecommend","definition","TRUE","Low","Blocked process threshold is set to recommended value","Increase or disable blocked process threshold option. Current value is @{block_threshold}","DefaultRuleset, Configuration","This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support.","https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold","Server","Windows Linux",,"SqlServer","[11.0,)",,"5",
"BrowserSvcAccSame","definition","TRUE","Low","'SQL Server Browser' and 'SQL Server Database Engine' use same account","Use different accounts for 'SQL Server Browser' and 'SQL Server Database Engine'. Now both services use '@{attr::service::SQLBrowser.account}' account","DefaultRuleset, Configuration","Running the 'SQL Server Browser' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"BrowserSvcStoped","definition","TRUE","Low","'SQL Server Browser' service is stopped","Run 'SQL Server Browser' service","DefaultRuleset, Configuration","The 'SQL Server Browser' service is a name resolution service that provides SQL Server connection information to client computers.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"SqlServer","[11.0,)",,,
"CrossDBOwnershipOff","definition","TRUE","Low","Option 'cross db ownership chaining' should be disabled","Disable 'cross db ownership chaining' option","DefaultRuleset, Configuration, Security","Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks.","https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"DefaultTraceOff","definition","TRUE","Low","Default trace is enabled","Enable 'default trace enabled' option to get troubleshooting assistance","DefaultRuleset, Configuration","Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. ","https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"DiskFragmentationAnalysis","definition","TRUE","Low","Disk fragmentation analysis","Defragment volume '@{Output.Name}' with physical fragmentation","DefaultRuleset, Configuration","If you do not defragment your hard disk, the operating system may have to go to several physical locations on the disk to retrieve the database file, making file access slower. To get information about the fragmentation level, this check requires the destination SQL Server to be running under the sysadmin account.","https://support.microsoft.com/help/3195161/defragmenting-sql-server-database-disk-drives","Server","Windows",,"SqlServer","[11.0,)",,,
"DiskPartitionAlignment","definition","TRUE","Low","Disk Partition alignment","Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset}","DefaultRuleset, Performance, Storage","Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist.","https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100)","Server","Windows",,"SqlServer","[11.0,)",,"65536",
"DtsSvcAccSame","definition","TRUE","Low","'Integration Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Integration Services' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::MsDtsServer.account}' account","DefaultRuleset, Configuration","Running the 'Integration Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"DtsSvcStoped","definition","TRUE","Low","'Integration Services' service is stopped","Run 'Integration Services' service","DefaultRuleset, Configuration","The 'Integration Services' service provides management support for Integration Services package storage and execution.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"SqlServer","[11.0,)",,,
"ErrorLogSize","definition","TRUE","Low","Error log file size is too big","Cycle error log files or revise error log settings. Current error log file size is more than @{threshold} MB.","DefaultRuleset, Configuration, Performance","Cycling error log files makes it easier to read the error log.","https://docs.microsoft.com/sql/tools/configuration-manager/viewing-the-sql-server-error-log","Server","Windows Linux",,"SqlServer","[11.0,)",,"50",
"FullTextServiceLoadOSResources","definition","TRUE","Low","Full-text search option 'load_os_resources' set to default","Set full-text search option 'load_os_resources' to @{defaultLoadOSResources}","DefaultRuleset, Configuration","The full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1.",,"Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FullTextServiceVerifySignature","definition","TRUE","Low","Full-text search option 'verify_signature' set to default","Set full-text search option 'verify_signature' to @{defaultVerifySignature}","DefaultRuleset, Configuration, Security","The full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded.",,"Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FullTextSvcAccNotRecommended","definition","TRUE","Low","'Full-text search' service uses non-recommended account","Use another account to run 'Full-text search' service. Current account '@{attr::service::MSSQLFDLauncher.account}' is not recommended","DefaultRuleset, Configuration","Running the 'Full-text search' service under the 'NT AUTHORITY\SYSTEM' account is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"FullTextSvcAccSame","definition","TRUE","Low","'Full-text search' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Full-text search' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSSQLFDLauncher.account}' account","DefaultRuleset, Configuration","Running the 'Full-text search' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"FullTextSvcStoped","definition","TRUE","Low","'Full-text search' service is stopped","Run 'Full-text search' service","DefaultRuleset, Configuration","The 'Full-text search' service quickly creates full-text indexes on content and properties of structured and semistructured data to provide document filtering and word-breaking for SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"SqlServer","[11.0,)",,,
"HPLogicalProcessor","definition","TRUE","Low","HP Logical Processor issue","Update server BIOS to the latest version. It may be affected by the HP Logical Processor issue ","DefaultRuleset, Performance","HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use.","https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594","Server","Windows",,"SqlServer","[11.0,)",,,
"IndexCreateMemory","definition","TRUE","Low","'index create memory' should be greater than 'min memory per query'","Set 'index create memory' to 0 or make it greater than 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB. Current 'min memory per query' is @{min_memory_per_query} KB","DefaultRuleset, Configuration, IndexCreateMemory","The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"LightweightPoolingOn","definition","TRUE","Low","Lightweight pooling option disabled","Disable 'lightweight pooling' option as fiber mode scheduling can decrease performance","DefaultRuleset, Configuration, Performance","The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode.","https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"LocksOptionNotDefault","definition","TRUE","Low","Option 'locks' should be set to default","Set 'locks' option to @{recommended_max_lock_number}. Current value is @{locks}","DefaultRuleset, Configuration, Performance","The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"MaxDOP1NUMA","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors}","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"MaxDopFewNumaLess16","definition","TRUE","Low","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"SqlServer","[13.0,)",,,
"MaxDopFewNumaOver16","definition","TRUE","Low","MAXDOP set in accordance to CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be half the number of logical processors per NUMA node with maximum value of 16","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"SqlServer","[13.0,)",,,
"MaxDopFewNumaOver8","definition","TRUE","Medium","MAXDOP set in accordance with CPU count","Update MAXDOP configuration option value: @{max_dop}. It should be equal to 8","DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU","The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.","https://support.microsoft.com/kb/2806535","Server","Windows Linux",,"SqlServer","[11.0, 13.0)",,,
"MaxMemory","definition","TRUE","Low","Max allowed memory ","Set 'max server memory' value to @{recommended:N0} MB or less to avoid detrimental memory pressure. Current 'max server memory' value is @{max_server_memory:N0}, which is greater than recommended","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value too high can cause a single instance of SQL Server to compete for memory with other SQL Server instances hosted on the same machine. However, setting this value too low could cause significant memory pressure and performance problems.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemory","override","TRUE","Low",,,"",,,,,,"Express",,,,"1410"
"MaxMemory","override","TRUE","Low",,,"",,,,,,"Standard",,,,"131072"
"MaxMemorySystem","definition","TRUE","Low","Max server memory exceeds system memory","Set 'max server memory' to @{recommended:N0} MB or less to avoid detrimental memory pressure. System memory of @{sysmem:N0} MB is not sufficient for current 'max server memory' setting of @{max_server_memory:N0} MB","DefaultRuleset, Memory, Performance, MaxMemory","Setting the 'max server memory' value higher than system memory can cause SQL Server to compete for memory with the operating system and processes running on the same machine.","https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,"2147483647"
"MaxMemorySystem","override","TRUE","Low",,,"",,,,,,"Express",,,,"1410"
"MaxMemorySystem","override","TRUE","Low",,,"",,,,,,"Standard",,,,"131072"
"MinMemoryPerQuery","definition","TRUE","Low","Option 'min memory per query' set to default","Set 'min memory per query' option to @{recommended_min_memory_per_query} KB. Current value is '@{min_memory_per_query}'","DefaultRuleset, Configuration, Memory, Performance","The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"NetworkPacketSize","definition","TRUE","Low","Option 'network packet size' set to default","Set 'network packet size' option to @{recommended_network_packet_size} bytes. Current value is @{network_packet_size}","DefaultRuleset, Configuration, Network","The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"NtfsBlockSizeNotFormatted","definition","TRUE","Low","NTFS block size in volumes with database files <> 64KB","Set allocation unit size on volume '@{volume_mount_point}' to 64 KB. Current size is @{Output.BlockSize} bytes","DefaultRuleset, Performance, Configuration, NTFS","A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB.","https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server","Server","Windows",,"SqlServer","[11.0,)",,,
"NtfsBlockSizeNotFormatted","override","TRUE","Medium",,,"",,,,,"AzureVm",,,,,
"OlapSvcAccSame","definition","TRUE","Low","'Analysis Services' and 'SQL Server Database Engine' use same account","Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account","DefaultRuleset, Configuration","Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"OlapSvcStoped","definition","TRUE","Low","'Analysis Services' service is stopped","Run 'Analysis Services' service","DefaultRuleset, Configuration","The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"SqlServer","[11.0,)",,,
"OleAutomationProceduresOn","definition","TRUE","Low","Option 'Ole Automation Procedures' set to default","Disable 'Ole Automation Procedures' option to avoid security risks","DefaultRuleset, Configuration, Security","Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value).","https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"PageFileAutoManaged","definition","TRUE","Low","Page file is not automatically managed","Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}'","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth.","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows","@{not=AzureVm}","SqlServer","[11.0,)",,,
"PageFileAutoManagedAllDrives","definition","TRUE","Low","Page file is not automatically managed","Disable 'Automatically manage paging file size for all drives' option","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. ","https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth","Server","Windows",,"SqlServer","[11.0,)",,,
"PageFileLess10FreeSpace","definition","TRUE","Low","Insufficient page file free space","Revise page file settings. Less than 10% of page file is available","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows Linux",,"SqlServer","[11.0,)",,"0.1",
"PageFileNotConfigured","definition","TRUE","Low","Page file not configured","Create page file on server","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.","https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size","Server","Windows",,"SqlServer","[11.0,)",,,
"PageFileOut","definition","TRUE","Low","Memory paged out","Revise LPIM settings. Part of SQL Server process memory has been paged out","DefaultRuleset, Performance, Memory, PageFile, SysAdminReq","Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the ""Dynamic memory management"" topic and the ""Server memory options"" topic in SQL Server Books Online.","https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"PowerPlanSchemeNotRecommended","definition","TRUE","Medium","Power plan is High Performance","Switch server to High Performance power plan","DefaultRuleset, Configuration, Performance","In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution.","https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan","Server","Windows",,"SqlServer","[11.0,)",,,
"PriorityBoostOn","definition","TRUE","High","Option 'priority boost' set to default","Set 'priority boost' option to default value","DefaultRuleset, Configuration, Performance","The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option","Server","Windows",,"SqlServer","[11.0,)",,,
"QueryWaitNotDefault","definition","TRUE","High","Option 'query wait' set to default","Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries","DefaultRuleset, Configuration","Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"RecoveryIntervalOn","definition","TRUE","Low","Option 'recovery interval' set to default","Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval}","DefaultRuleset, Configuration, Performance","The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"RemoteDacClusterOn","definition","TRUE","Low","Remote admin connections enabled on cluster (DAC)","Enable 'remote admin connections' option","DefaultRuleset, Configuration","SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.","https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"RemoteQueryTimeout","definition","TRUE","Low","Option 'remote query timeout' set to default","Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout}","DefaultRuleset, Configuration","The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"RsSvcAccSame","definition","TRUE","Low","'Reporting Services' and 'SQL Server Database Engine' use same account","Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account","DefaultRuleset, Configuration","Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"RsSvcStoped","definition","TRUE","Low","'Reporting Services' service is stopped","Run 'Reporting Services' service","DefaultRuleset, Configuration","'The Reporting Services' service manages, executes, creates, schedules and delivers reports.","https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services","Server","Windows",,"SqlServer","[11.0,)",,,
"ScanStartupProcs","definition","TRUE","Low","Option 'scan for startup procs' disabled on replication servers","Disable 'scan for startup procs' option for servers that participate in replication","DefaultRuleset, Configuration","Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option","Server","Windows",,"SqlServer","[11.0,)",,,
"SqlSvcAccNotRecommended","definition","TRUE","Low","'SQL Server Database Engine' service uses non-recommended account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"SqlSvcAccNotSupported","definition","TRUE","Low","'SQL Server Database Engine' service uses not supported account","Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported","DefaultRuleset, Configuration","Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions","Server","Windows",,"SqlServer","[11.0,)",,,
"ThreadExhaustionCPUBound","definition","TRUE","Low","Worker thread exhaustion on CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}'","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"ThreadExhaustionNotCPUBound","definition","TRUE","Low","Possible worker thread exhaustion on non-CPU-bound system","Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}')","DefaultRuleset, Performance","Consider overall runnable tasks count and schedulers work queue count.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"ThresholdForParallelism","definition","TRUE","Medium","Option 'cost threshold for parallelism' set to default","Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism}","DefaultRuleset, Configuration, Performance","The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"WorkerThreadsLargeX64","definition","TRUE","Low","Option 'max worker threads' set to recommended value on x64 system","Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"SqlServer","[11.0,)",,,
"WorkerThreadsLargeX86","definition","TRUE","Low","Option 'max worker threads' set to recommended value on x86 system","Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads})","DefaultRuleset, Configuration, Performance, CPU","The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option","Server","Windows",,"SqlServer","[11.0,)",,,
"XpCmdShellOn","definition","TRUE","Low","Option 'xp_cmdshell' is disabled","Disable 'xp_cmdshell' as it exposes to security risks","DefaultRuleset, Configuration","The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. ","https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"Affinity64IOMask","definition","TRUE","Information","Non-default value for 'affinity64 I/O mask' option","Review non-default value @{affinity64_io_mask} for the 'affinity64 I/O mask' option","DefaultRuleset, Performance, Configuration","The 'affinity64 I/O mask' binds SQL Server disk I/O to a specified subset of CPUs, similar to the 'affinity I/O mask' option. Use 'affinity I/O mask' to bind the first 32 processors, and use 'affinity64 I/O mask' to bind the remaining processors.","https://docs.microsoft.com/sql/database-engine/configure-windows/affinity64-input-output-mask-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"Affinity64Mask","definition","TRUE","Low","Non-default value for 'affinity64 mask' option","Review non-default value @{affinity64_mask} for the 'affinity64 mask' option as it will be removed in a future version","DefaultRuleset, Performance, Configuration","The 'affinity64 mask' binds processors to specific threads, similar to the 'affinity mask' option. Use 'affinity mask' to bind the first 32 processors, and use 'affinity64 mask' to bind the remaining processors.","https://docs.microsoft.com/sql/database-engine/configure-windows/affinity64-mask-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"AffinityIOMask","definition","TRUE","Information","Non-default value for 'affinity I/O mask' option","Review non-default value @{affinity_io_mask} for the 'affinity I/O mask' option","DefaultRuleset, Performance, Configuration","In a multi-processor system, the 'affinity I/O mask' option binds SQL Server disk I/O to a specified subset of CPUs.","https://docs.microsoft.com/sql/database-engine/configure-windows/affinity-input-output-mask-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"AffinityMask","definition","TRUE","Low","Non-default value for 'affinity mask' option","Review non-default value @{affinity_mask} for the 'affinity64 mask' option as it will be removed in a future version","DefaultRuleset, Performance, Configuration","In a multi-processor system, the 'affinity mask' option is used to assign certain CPUs to an instance of SQL Server. When the 'affinity mask' is at its default value of 0, the instance of SQL Server can use all processors in the system for its threads. Setting the 'affinity mask' to a non-default value, restricts SQL Server to using only the assigned CPUs.","https://docs.microsoft.com/sql/database-engine/configure-windows/affinity-mask-server-configuration-option","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"AgentXPs","definition","TRUE","Information","Option 'Agent XPs' is disabled","Enable 'Agent XPs' option","DefaultRuleset, Configuration","The 'Agent XPs' option enables the SQL Server Agent extended stored procedures. When this option is disabled, the SQL Server Agent node is not available in SQL Server Management Studio Object Explorer.","https://docs.microsoft.com/sql/database-engine/configure-windows/agent-xps-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AllowUpdates","definition","TRUE","Low","Non-default value for 'allow updates' option","Review non-default value @{allow_updates} for the 'allow updates' option as it has no effect and will be removed in a future version","DefaultRuleset, Performance, Configuration","The 'allow updates' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.","https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AutoStartProcs","definition","TRUE","Low","Automated execution of stored procedures is enabled","Disable automated execution of stored procedures: @{sp_name}","DefaultRuleset, Configuration, Security, Performance","Automated execution of stored procedures during the SQL Server startup may delay the availability of the SQL Server instance during the startup procedure. It also introduces the risk of execution of unauthorized code.","https://docs.microsoft.com/sql/relational-databases/stored-procedures/execute-a-stored-procedure#execute-stored-procedures-automatically","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AutoUpdateStatsAsync","definition","TRUE","Information","Option 'AUTO_UPDATE_STATISTICS_ASYNC' is enabled","Disable 'AUTO_UPDATE_STATISTICS_ASYNC' option","DefaultRuleset, Configuration","The Query Optimizer could choose a suboptimal query plan if statistics are out-of-date when the query compiles. User database has AUTO_UPDATE_STATISTICS_ASYNC enabled on one or more user databases. ","https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-set-options#auto_update_statistics_async","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"AzDataDiskCache","definition","TRUE","High","Azure disk caching for data files","Set caching to 'ReadOnly' for disk @{name} (@{volume_mount_point}) as it is used for storing data files. Current setting: '@{caching}'","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Uncached IOPS and throughput plus Cached IOPS and throughput will yield the total possible performance available from the virtual machine within the VMs limits.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies","Database","Windows","AzureVm","SqlServer","[11.0,)","NOT: tempdb",,
"AzDataOnDataDisks","definition","TRUE","Medium","Data files on Azure data disks","Move data files from @{volume_mount_point} to Premium SSD data disk(s)","DefaultRuleset, DBFileConfiguration, DBConfiguration","Azure data disks can be configured for optimal data security and performance. ","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Database","Windows","AzureVm","SqlServer","[11.0,)","NOT: tempdb",,
"AzDataOnDataDisks","override","TRUE","Low",,,"",,,,,,,,"master model msdb",,
"AzDbDefaultLocation","definition","TRUE","Medium","Database default locations","Configure default @{setting_name} file location","DefaultRuleset, Configuration, Performance","Default database file location setting makes new data and transaction log files placed on drives configured for this specific workload.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureSQL","OnPremises","[11.0,)",,,
"AzDiskColumnCount","definition","TRUE","Medium","Storage spaces disk column count","Use all @{poolDiskCount} physical disks of storage pool for virtual disk (@{volume_mount_point}). @{columnCount} physical disk(s) are used now.","DefaultRuleset, DBFileConfiguration, DBConfiguration, Performance","Increasing virtual disk column count improves the disk's performance. The number of disks in the pool is the maximum available number of columns.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows",,"OnPremises","[11.0,)",,,
"AzErrorLogLocation","definition","TRUE","Medium","Error log and default trace files on Azure data disk","Move error log and default trace files to data disk","DefaultRuleset, Configuration, Performance","Storing error log and default trace files on data disk improves performance.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureSQL","OnPremises","[11.0,)",,,
"AzPremSsdDataFiles","definition","TRUE","High","Use premium SSDs for SQL Server data files","Move data files from @{volume_mount_point} to Premium SSD disk","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Standard HDDs and SSDs have varying latencies and bandwidth and are only recommended for dev/test workloads. Production workloads should use premium SSDs.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempDb",,
"AzDbDefaultLocation","definition","TRUE","Medium","Database default locations","Configure default @{setting_name} file location","DefaultRuleset, Configuration, Performance","Default database file location setting makes new data and transaction log files placed on drives configured for this specific workload.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureVm","SqlServer","[11.0,)",,,
"AzDiskColumnCount","definition","TRUE","Medium","Storage spaces disk column count","Use all @{poolDiskCount} physical disks available in your storage pool for virtual disk (@{volume_mount_point}), currently used: @{columnCount} physical disk(s)","DefaultRuleset, DBFileConfiguration, DBConfiguration, Performance","Increasing virtual disk column count improves the disk's performance. The number of disks in the pool is the maximum available number of columns.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureVm","SqlServer","[11.0,)",,,
"AzErrorLogLocation","definition","TRUE","Medium","Error log and default trace files on Azure data disk","Move error log and default trace files to data disk","DefaultRuleset, Configuration, Performance","Storing error log and default trace files on data disk improves performance.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureVm","SqlServer","[11.0,)",,,
"AzPremSsdDataFiles","definition","TRUE","High","Use premium SSDs for SQL Server data files","Move data files from @{volume_mount_point} to Premium SSD disk","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Standard HDDs and SSDs have varying latencies and bandwidth and are only recommended for dev/test workloads. Production workloads should use premium SSDs.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage","Database","Windows","AzureVm","SqlServer","[11.0,)","NOT: tempDb",,
"AzPremSsdDataFiles","override","TRUE","Low",,,"",,,,,,,,"master model msdb",,
"AzTempDbFileLocation","definition","TRUE","High","Tempdb files on Azure temp drive","Move tempdb files from @{volume_mount_point} to the local ephemeral SSD (temp disk)","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Storing tempdb files on a local ephemeral SSD improves the performance of workloads that use temporary objects heavily (e.g. queries handling large recordsets, index rebuilds, row versioning isolation levels, temp tables, and triggers).","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Database","Windows","AzureSQL","OnPremises","[11.0,)","tempdb",,
"AzTranLogDiskCache","definition","TRUE","High","Azure disk caching for transaction logs","Set caching to 'None' for disk @{name} (@{volume_mount_point}) as it is used for storing transaction log files. Current setting: '@{caching}'","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","There is no performance benefit to enabling caching for the Transaction log disk, and in fact having either Read-only or Read/Write caching enabled on the log drive can decrease the amount of cache available for reads on the data drive","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies","Database","Windows","AzureSQL","OnPremises","[11.0,)","NOT: tempdb",,
"InstantFileInitialization","definition","TRUE","High","Instant file initialization (IFI) is disabled","Enable instant file initialization","DefaultRuleset, DBConfiguration, Performance","Instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files.","https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization","Server","Windows",,"OnPremises","[11.0.7001,12.0) [12.0.5000, )",,,
"LockedPagesInMemory","definition","TRUE","High","Lock pages in memory","Enable the 'Lock pages in memory' option","DefaultRuleset, Performance, Memory","This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureSQL","OnPremises","[11.0,)",,,
"LockedPagesInMemory","override","TRUE","Warning",,,"",,,,,,,"[11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.4001,)",,,
"PlansUseRatioNotOptimal","definition","TRUE","Information","Cache needs to be cleared of single-use plans","Check if the plan cache needs to be cleared. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","Setting the 'Optimize for ad hoc workloads' option to 1 affects only new plans; plans that are already in the plan cache are unaffected. Make sure to check whether you need to clear the cache from the old single-use plans that may continue to remain.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"OnPremises, ManagedInstance","[11.0,)",,"0.5",
"AzTempDbFileLocation","definition","TRUE","High","Tempdb files on Azure temp drive","Move tempdb files from @{volume_mount_point} to the local ephemeral SSD (temp disk)","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","Storing tempdb files on a local ephemeral SSD improves the performance of workloads that use temporary objects heavily (e.g. queries handling large recordsets, index rebuilds, row versioning isolation levels, temp tables, and triggers).","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Database","Windows","AzureVm","SqlServer","[11.0,)","tempdb",,
"AzTranLogDiskCache","definition","TRUE","High","Azure disk caching for transaction logs","Set caching to 'None' for disk @{name} (@{volume_mount_point}) as it is used for storing transaction log files. Current setting: '@{caching}'","DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration","There is no performance benefit to enabling caching for the Transaction log disk, and in fact having either Read-only or Read/Write caching enabled on the log drive can decrease the amount of cache available for reads on the data drive","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies","Database","Windows","AzureVm","SqlServer","[11.0,)","NOT: tempdb",,
"BackupTables","definition","TRUE","Information","Too many rows in backup or restore history tables","Reduce number of rows in table '@{table_name}' to less than @{threshold}","DefaultRuleset, Configuration","The upgrade process of a SQL Server instance may appear to hang if the number of rows in the following backup and restore system tables is very high: 'backupfile', 'backupmediafamily', 'backupmediaset', 'backupset', 'restorefile', 'restorefilegroup', 'restorehistory'. This is due to the fact that it would take longer to modify the backup and restore system tables in MSDB database.","https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-delete-backuphistory-transact-sql","Server","Windows Linux",,"SqlServer","[11.0,)",,"10000",
"C2AuditMode","definition","TRUE","Information","Non-default value for 'c2 audit mode' option","Review non-default value @{c2_audit_mode} for the 'c2 audit mode' option as it will be removed in a future version","DefaultRuleset, Configuration","When enabled, the 'c2 audit mode' option collects all attempts to access statements and objects. Enabling this option triggers a significant amount of data collection over a short period of time for even moderately active Microsoft SQL Server instances.","https://docs.microsoft.com/sql/database-engine/configure-windows/c2-audit-mode-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"CCCompliance","definition","TRUE","Information","Non-default value for 'common criteria compliance enabled' option","Review non-default value @{common_criteria_compliance_enabled} for the 'common criteria compliance enabled' option","DefaultRuleset, Performance, Configuration","SQL Server is being developed to achieve not only the best performance results but also to be the most secure database system ever released. Microsoft has the commitment to be compliant with the most important standards. The most recent SQL Server Editions are getting these recognitions, including the Common Criteria certification. Part of that commitment is the independent third-party evaluation of our products and in using the Common Criteria (CC, ISO15408) as a proven and accepted process to ensure compliance with Common Evaluation Methodologies.","https://docs.microsoft.com/sql/database-engine/configure-windows/common-criteria-compliance-enabled-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"ClrEnabled","definition","TRUE","Information","Non-default value for 'clr enabled' option","Review non-default value @{clr_enabled} for the 'clr enabled' option","DefaultRuleset, Configuration","This option determines whether user assemblies and CLR functionality or objects can be used on a Microsoft SQL Server instance. Disable this option if you do not plan to use CLR database objects on the SQL Server instance.","https://docs.microsoft.com/sql/relational-databases/clr-integration/clr-integration-enabling","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"CompareRunConfigured","definition","TRUE","Information","Run and config values are different","Use 'RECONFIGURE' after 'sp_configure' to update run value. Config value is different from run value in: @{unsaved_option}","DefaultRuleset, Performance, Configuration","SQL Server instance configuration settings have two values: a run value which is the currently active value and a config value which is the value that was last configured. Generally, these two values are the same, but if a setting has been changed but the change is not yet applied, confusion can arise for administrators and, in extreme cases, the system can become unstable.","https://docs.microsoft.com/sql/relational-databases/system-catalog-views/sys-configurations-transact-sql","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"ContainedDbAuthentication","definition","TRUE","Information","Non-default value for 'contained database authentication' option","Review non-default value @{contained_database_authentication} for the 'contained database authentication' option","DefaultRuleset, Configuration, Security","When contained databases are enabled, database users other than members of the 'sysadmin' and 'securityadmin' fixed server roles can grant access to the instance of SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/contained-database-authentication-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"CursorThreshold","definition","TRUE","Information","Non-default value for 'cursor threshold' option","Review non-default value @{cursor_threshold} for the 'cursor threshold' option","DefaultRuleset, Performance, Configuration","When cursors generate keysets for a result set, the query optimizer estimates how many rows the keyset will contain. If the number is larger than this threshold, the keyset is generated asynchronously. The default value of -1 results in SQL Server generating all keysets asynchronously. If you set the value too low, overall performance may be impacted because small results sets are better built synchronously.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cursor-threshold-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"DatabaseMailXPs","definition","TRUE","Information","Non-default value for 'Database Mail XPs' option","Review non-default value @{Database_Mail_XPs} for the 'Database Mail XPs' option","DefaultRuleset, Configuration, Security","Configuring the 'Database Mail XPs' option to 1 enables Database Mail on the instance of SQL Server. This configuration is off by default to reduce the attack surface area of SQL Server. Do not enable this functionality unless you intend to use Database Mail.","https://docs.microsoft.com/sql/database-engine/configure-windows/database-mail-xps-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"DbCompression","definition","TRUE","Information","Uncompressed database tables and indexes","Compress index: @{IndexName}, total space: @{TotalSpaceMB:N2} MB","DefaultRuleset, Configuration, Performance","The compression capability at either the row or page level provides an opportunity to save disk space and improve performance, with the tradeoff of requiring a bit more CPU to compress and decompress the data, but requiring less memory and disk access improving performance in many workloads. The data pages are kept compressed when they are uploaded to memory. This check fires if a relatively large amount of space is on indexes without compression (for example, more than 10GB).","https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)","NOT: master model msdb tempdb","1280000",
"DbRecoveryModel","definition","TRUE","Medium","Databases with 'SIMPLE' recovery model","Change recovery model to 'FULL' or 'BULK_LOGGED'","DefaultRuleset, Configuration","A database with the 'SIMPLE' recovery model does not support log backups. As a result, when you need to restore such a database, all the transactions since the last database backup or differential backup will be lost. Review databases that have the 'SIMPLE' recovery model. If the maximum amount of data loss involved is not acceptable, change the recovery model to 'FULL' or 'BULK_LOGGED' and schedule frequent log backups.","https://docs.microsoft.com/sql/relational-databases/backup-restore/recovery-models-sql-server","Database","Windows Linux",,"SqlServer","[11.0,)","NOT: model tempdb msdb master",,
"DbSpaceAvailable","definition","TRUE","Medium","Low free space in data files","Increase space for data files. Currently @{spaceAvailableRel:P0} is available. Threshold is set to @{threshold:P0}. Total size of data files: @{totalMB:N2} MB. Free space: @{freeMB:N2} MB","DefaultRuleset, Configuration, DBFileConfiguration","Average available space in data files is less than the threshold.","https://docs.microsoft.com/sql/relational-databases/databases/database-states","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,"0.25",
"DbStandby","definition","TRUE","Information","STANDBY mode is enabled","Disable STANDBY mode for database","DefaultRuleset, Configuration","A Database in STANDBY mode will be online as READ ONLY, WITH RESTORE LOG allowed. If recovery is not complete, then the availability of the database might be affected. Usually log shipped secondary databases are configured to be in STANDBY mode.","https://docs.microsoft.com/sql/t-sql/statements/restore-statements-arguments-transact-sql#with-options","Database","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"EKMProvider","definition","TRUE","Information","Non-default value for 'EKM provider enabled' option","Review non-default value @{EKM_provider_enabled} for the 'EKM provider enabled' option","DefaultRuleset, Configuration","The 'EKM provider enabled' option controls Extensible Key Management device support in SQL Server. SQL Server provides data encryption capabilities together with Extensible Key Management (EKM), using the Microsoft Cryptographic API (MSCAPI) provider for encryption and key generation. Encryption keys for data and key encryption are created in transient key containers, and they must be exported from a provider before they are stored in the database. This approach enables key management that includes an encryption key hierarchy and key backup, to be handled by SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/ekm-provider-enabled-server-configuration-option","Server","Windows Linux",,"Enterprise, ManagedInstance","[11.0,)",,,
"FilestreamAccessLevel","definition","TRUE","Information","Non-default value for 'filestream access level' option","Review non-default value @{filestream_access_level} for the 'filestream access level' option","DefaultRuleset, Configuration","The 'filestream access level' option controls the FILESTREAM access level for the instance of SQL Server. By default, this option is disabled, but should be enabled to allow FileStream access or to take advantage of the 'FileTable' feature.","https://docs.microsoft.com/sql/database-engine/configure-windows/filestream-access-level-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FillFactor","definition","TRUE","Information","Non-default value for 'fill factor' option","Review non-default value @{fill_factor} for the 'fill factor' option","DefaultRuleset, Performance, Configuration","The 'fill factor' option controls the default fill factor that is used when a new index is created or rebuilt. The default value is 0, which means that the leaf level of the index will be filled with the highest possible number of rows. This option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server professional.","https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-fill-factor-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FtCrawlBandwidthMax","definition","TRUE","Low","Non-default value for 'ft crawl bandwidth (max)' option","Review non-default value @{ft_crawl_bandwidth_max} for the 'ft crawl bandwidth (max)' option as it will be removed in a future version","DefaultRuleset, Configuration","The 'ft crawl bandwidth (max)' option determines the maximum number of buffers that will be maintained by the full-text memory manager in a small buffer pool. A high value will allocate more memory to the indexing process, therefore reducing the available memory for other SQL Server processes.","https://docs.microsoft.com/sql/database-engine/configure-windows/ft-crawl-bandwidth-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FtCrawlBandwidthMin","definition","TRUE","Low","Non-default value for 'ft crawl bandwidth (min)' option","Review non-default value @{ft_crawl_bandwidth_min} for the 'ft crawl bandwidth (min)' option as it will be removed in a future version","DefaultRuleset, Configuration","The 'ft crawl bandwidth (min)' option determines the minimum number of buffers that must be maintained by the full-text memory manager in a small buffer pool. If the SQL Server memory manager requests memory, this minimum number of buffers will generally be maintained.","https://docs.microsoft.com/sql/database-engine/configure-windows/ft-crawl-bandwidth-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FtNotifyBandwidthMax","definition","TRUE","Low","Non-default value for 'ft notify bandwidth (max)' option","Review non-default value @{ft_notify_bandwidth_max} for the 'ft notify bandwidth (max)' option as it will be removed in a future version","DefaultRuleset, Configuration","The 'ft notify bandwidth (max)' option determines the maximum number of buffers that will be maintained by the full-text memory manager in a large buffer pool. A high value will allocate more memory to the indexing process, therefore reducing the available memory for other SQL Server processes.","https://docs.microsoft.com/sql/database-engine/configure-windows/ft-notify-bandwidth-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FtNotifyBandwidthMin","definition","TRUE","Low","Non-default value for 'ft notify bandwidth (min)' option","Review non-default value @{ft_notify_bandwidth_min} for the 'ft notify bandwidth (min)' option as it will be removed in a future version","DefaultRuleset, Configuration","The 'ft notify bandwidth (min)' option determines the minimum number of buffers that must be maintained by the full-text memory manager in a large buffer pool. If the SQL Server memory manager requests memory, this minimum number of buffers will generally be maintained.","https://docs.microsoft.com/sql/database-engine/configure-windows/ft-notify-bandwidth-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FullTextNoiseWords","definition","TRUE","Information","Non-default value for 'transform noise words' option","Review non-default value @{transform_noise_words} for the 'transform noise words' option","DefaultRuleset, Configuration","If a query using a full-text search predicate contains a noise word (for example, is, the, and) and this configuration setting has been disabled, a warning will be issued and no rows from the query will be returned. The default setting for this option is 0, which indicates that it is off. Enabling this configuration by changing the default to 1 will force noise words to be replaced with an asterisk (*) in the query instead.","https://docs.microsoft.com/sql/database-engine/configure-windows/transform-noise-words-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"FullTextPHTimeout","definition","TRUE","Information","Non-default value for 'PH timeout' option","Set 'PH timeout' option to default","DefaultRuleset, Configuration","The 'PH timeout' option controls the number of seconds that the full-text protocol handler will wait to connect to a database before reaching the timeout threshold. You can increase the 'PH timeout' value when connection attempts are timing out due to temporary network issues.","https://docs.microsoft.com/sql/database-engine/configure-windows/ph-timeout-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"InDoubtXactResolution","definition","TRUE","Information","Non-default value for 'in-doubt xact resolution' option","Review non-default value @{in_doubt_xact_resolution} for the 'in-doubt xact resolution' option","DefaultRuleset, Configuration","The 'in-doubt xact resolution' option controls the default outcome of unresolved Microsoft Distributed Transaction Coordinator (MS DTC) transactions. The default value of 0 means that recovery will fail if MS DTC cannot resolve the in-doubt transactions. Before changing this default, you should consider the effect of your application distributed transactions and make sure that no data integrity issues will occur based on partially committed or aborted activity.","https://docs.microsoft.com/sql/database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"InstantFileInitialization","definition","TRUE","High","Instant file initialization (IFI) is disabled","Enable instant file initialization","DefaultRuleset, DBConfiguration, Performance","Instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files.","https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization","Server","Windows",,"SqlServer","[11.0.7001,12.0) [12.0.5000, )",,,
"JdbcModuleVersion","definition","TRUE","Medium","JDBC Driver for SQL Server version is not supported","Update JDBC Driver for SQL Server. Current product version @{file_version} of JDBC Driver for SQL Server is out of support","DefaultRuleset, Performance, Security","The JDBC Driver for SQL Server is a Type 4 Java Database Connectivity (JDBC) 4.2 compliant driver that provides robust data access to SQL Server, Azure SQL Database, and Azure SQL Managed Instance. Java connectivity support is continually improving. It is highly recommend to use the latest version of JDBC driver for SQL Server.","https://docs.microsoft.com/sql/connect/jdbc/understanding-xa-transactions","Server","Windows Linux",,"SqlServer","[11.0,)",,,
"LockedPagesInMemory","definition","TRUE","High","Lock pages in memory","Enable the 'Lock pages in memory' option","DefaultRuleset, Performance, Memory","This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk.","https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist","Server","Windows","AzureVm","SqlServer","[11.0,)",,,
"LockedPagesInMemory","override","TRUE","Low",,,"",,,,,,,"[11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.4001,)",,,
"MaxFTCrawlRange","definition","TRUE","Information","Non-default value for 'max full-text crawl range' option","Review non-default value @{max_full_text_crawl_range} for the 'max full-text crawl range' option","DefaultRuleset, Configuration","The 'max full-text crawl range' option sets the number of partitions that SQL Server will use during a full-text index crawl. The default option is 4. However, you can increase this value if you want to optimize the crawl performance and you have sufficient CPU capacity.","https://docs.microsoft.com/sql/database-engine/configure-windows/max-full-text-crawl-range-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"MaxTextReplSize","definition","TRUE","Information","Non-default value for 'max text repl size' option","Review non-default value @{max_text_repl_size} for the 'max text repl size' option","DefaultRuleset, Configuration","The 'max text repl size' option sets the maximum bytes of varchar(max), nvarchar(max), varbinary(max), xml, image, text, and ntext data that can be replicated in a single INSERT, UPDATE, WRITETEXT, or UPDATETEXT operation. If your data modifications exceed this value on replicated columns, you must increase it.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-text-repl-size-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"MediaRetention","definition","TRUE","Information","Non-default value for 'media retention' option","Review non-default value @{media_retention} for the 'media retention' option","DefaultRuleset, Configuration, Backup","The 'media retention' option sets the default length of time to retain a backup set for the Microsoft SQL Server instance. This default length of time protects the set from being overwritten until the specified number of days has elapsed. The default for this configuration is 0 days. However, you can modify it, based on your own corporate policies.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-media-retention-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"MemOptDBResPool","definition","TRUE","Low","In-Memory OLTP database without separate resource pool","Bind In-Memory OLTP database to separate resource pool","Memory, Performance, DefaultRuleset","A databases with memory-optimized tables should be bound to a separate resource pool.","https://docs.microsoft.com/sql/relational-databases/in-memory-oltp/bind-a-database-with-memory-optimized-tables-to-a-resource-pool#bkmk_DefineBinding","Database",,,"SqlServer","[12.0,)",,,
"OneDbPerPool","definition","TRUE","Low","One database per resource pool","Check whether only one database is bound to resource pool @{pool_name}","Memory, Performance, DefaultRuleset","Only one database should be bound to a resource pool.","https://docs.microsoft.com/sql/relational-databases/resource-governor/resource-governor-resource-pool","Database",,,"SqlServer","[12.0,)",,,
"OpenObjects","definition","TRUE","Low","Non-default value for 'open objects' option","Review non-default value @{open_objects} for the 'open objects' option as it has no effect and will be removed in a future version","DefaultRuleset, Performance, Configuration","The 'open objects' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.","https://docs.microsoft.com/sql/database-engine/configure-windows/open-objects-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"OsLoadedModules","definition","TRUE","Low","Third-party modules are loaded into SQL Server process address space","Evaluate impact of loading '@{module}' module into SQL Server process address space","DefaultRuleset, Performance, Security","Certain modules and filter drivers can be loaded into a system that is running SQL Server. In this case, you may experience performance degradation and consistency issues of SQL Server Database Engine.","https://docs.microsoft.com/troubleshoot/sql/performance/performance-consistency-issues-filter-drivers-modules","Server","Windows",,"SqlServer","[11.0,)",,,
"PlansUseRatioNotOptimal","definition","TRUE","Information","Cache needs to be cleared of single-use plans","Check if the plan cache needs to be cleared. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0})","DefaultRuleset, Performance, QueryOptimizer","Setting the 'Optimize for ad hoc workloads' option to 1 affects only new plans; plans that are already in the plan cache are unaffected. Make sure to check whether you need to clear the cache from the old single-use plans that may continue to remain.","https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,"0.5",
"PoolMemParamSet","definition","TRUE","Low","Set 'min_memory_percent' or 'max_memory_percent' parameters","Set 'min_memory_percent' or 'max_memory_percent' for resource pool @{pool_name}","Memory, Performance, DefaultRuleset","A dedicated resource pool should have either 'min_memory_percent' parameter or 'max_memory_percent' parameter set explicitly. You should not let both parameters have default values at the same time.","https://docs.microsoft.com/sql/relational-databases/in-memory-oltp/bind-a-database-with-memory-optimized-tables-to-a-resource-pool","Database",,,"SqlServer","[12.0,)",,,
"PrecomputeRank","definition","TRUE","Low","Non-default value for 'precompute rank' option","Review non-default value @{precompute_rank} for the 'precompute rank' option as it has no effect and will be removed in a future version","DefaultRuleset, Configuration","The 'precompute rank' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.","https://docs.microsoft.com/sql/database-engine/discontinued-database-engine-functionality-in-sql-server","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"QueryGovernorCostLimit","definition","TRUE","Information","Non-default value for 'query governor cost limit' option","Review non-default value @{query_governor_cost_limit} for the 'query governor cost limit' option","DefaultRuleset, Performance, Configuration","The 'query governor cost limit' option indicates the longest time period in seconds that a query can run. Queries with estimated run times longer than this will not run and will return an error. This can result in critical queries not running on your server.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-governor-cost-limit-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"RemoteDAC","definition","TRUE","Low","Non-default value for 'remote admin connections' option","Review non-default value @{remote_admin_connections} for the 'remote admin connections' option","DefaultRuleset, Security, Configuration","The 'remote admin connections' option enables remote connections to the dedicated administrator connection (DAC) on a Microsoft SQL Server instance. By default, this option is disabled and allows only a local client connection to the DAC. Leave this option disabled if you want to restrict DAC access to only the local client on the stand-alone server. If your SQL Server instance is on a cluster or if you want to use the DAC connection remotely and for some troubleshooting scenarios, you should enable this option.","https://docs.microsoft.com/sql/database-engine/configure-windows/remote-admin-connections-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"RemoteProcTrans","definition","TRUE","Low","Non-default value for 'remote proc trans' option","Review non-default value @{remote_proc_trans} for the 'remote proc trans' option as it will be removed in a future version","DefaultRuleset, Configuration","The 'remote proc trans' option is used to protect the actions of a server-to-server procedure through a Microsoft Distributed Transaction Coordinator (MS DTC) transaction.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-proc-trans-server-configuration-option","Server","Windows",,"SqlServer, ManagedInstance","[11.0,)",,,
"ReplicationXPs","definition","TRUE","Low","Non-default value for 'Replication XPs' option","Set 'Replication XPs' option to default. This option is for internal use only.","DefaultRuleset, Configuration, Security","The 'Replication XPs' option opens a significant attack surface area that can be used by an attacker to gather information about the system and potentially abuse the privileges of SQL Server.","https://docs.microsoft.com/sql/database-engine/configure-windows/replication-xps-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"SMOAndDMOXPs","definition","TRUE","Information","Option 'SMO and DMO XPs' is disabled","Enable 'SMO and DMO XPs' option","DefaultRuleset, Configuration","The 'SMO and DMO XPs' option determines whether SQL Server Management Objects (SMO) and SQL Server Distributed Management Objects (SQL-DMO) XPs are available. The default for this option is enabled to allow various tools and install packages, including SQL Server hotfixes, to work correctly.","https://docs.microsoft.com/sql/database-engine/configure-windows/smo-and-dmo-xps-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"SysAdminDefaultDatabase","definition","TRUE","Low","Sysadmin logins use non-master default database","Set sysadmin logins to use 'master' as default database","DefaultRuleset, Configuration","This check verifies whether your SQL Sever logins are members of the 'System Administrators' role that use a non-master default database. Sysadmin logins that use a non-master default database impose administrative risks in cases when user databases are dropped.",,"Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"TwoDigitYearCutoff","definition","TRUE","Information","Non-default value for 'two digit year cutoff' option","Set 'two digit year cutoff' option to default","DefaultRuleset, Configuration","The 'two digit year cutoff' option is used to define the two digit year cutoff value when specifying two-digit years in place of four-digit years. Changing this to a non-default value could have unexpected results if the non-default value is inconsistent with other Microsoft SQL Server instances in your environment. This option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server professional.","https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-two-digit-year-cutoff-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"UserConnections","definition","TRUE","Information","Non-default value for 'user connections' option","Review non-default value @{user_connections} for the 'user connections' option","DefaultRuleset, Performance, Configuration","The 'user connections' option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server professional. Using the 'user connections' option helps avoid overloading the server with too many concurrent connections. You can estimate the number of connections based on system and user requirements.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-user-connections-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"UserOptions","definition","TRUE","Information","Non-default value for 'user options' option","Review non-default value @{user_options} for the 'user options' option","DefaultRuleset, Configuration","The 'user options' option defines the user option defaults, such as ARITHABORT, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL. The bit positions in user options are identical to those in @@OPTIONS. Each connection has its own @@OPTIONS function, which represents the configuration environment. When logging in to Microsoft SQL Server, a user receives a default environment that assigns the current user options value to @@OPTIONS. Executing SET statements for user options affects the corresponding value in the session's @@OPTIONS function. All connections created after this setting is changed, receive the new value.","https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-user-options-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
"WorkingSetSize","definition","TRUE","Low","Non-default value for 'set working set size' option","Review non-default value @{set_working_set_size} for the 'set working set size' option as it has no effect and will be removed in a future version","DefaultRuleset, Configuration","The 'set working set size' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.","https://docs.microsoft.com/sql/database-engine/configure-windows/set-working-set-size-server-configuration-option","Server","Windows Linux",,"SqlServer, ManagedInstance","[11.0,)",,,
1 id itemType enabled level displayName message tags description helpLink target.type target.platform target.machineType target.engineEdition target.version target.name threshold limit
2 AutoCreateStats definition TRUE Medium 'Auto-Create Statistics' option should be on Turn on 'Auto-Create Statistics' option to improve query performance DefaultRuleset, Performance, Statistics, QueryOptimizer The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master msdb tempdb
3 AutoUpdateStats definition TRUE Medium Auto-Update Statistics should be on Turn on 'Auto-Update Statistics' option to improve query performance DefaultRuleset, Performance, Statistics, QueryOptimizer The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master msdb tempdb
4 QueryStoreOn definition TRUE Warning Low Query Store should be active Query Store operation mode should be 'Read Write' to keep performance analysis accurate DefaultRuleset, Performance, QueryStore, Statistics The Query Store feature provides you with insight on query plan choice and performance. It simplifies performance troubleshooting by helping you quickly find performance differences caused by query plan changes. Query Store automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows so you can see database usage patterns and understand when query plan changes happened on the server. While Query Store collects queries, execution plans and statistics, its size in the database grows until this limit is reached. When that happens, Query Store automatically changes the operation mode to read-only and stops collecting new data, which means that your performance analysis is no longer accurate. https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [13.0,) NOT: master tempdb model NOT: master tempdb model msdb
5 TF174 definition TRUE Information TF 174 increases plan cache bucket count Enable trace flag 174 to increase plan cache bucket count DefaultRuleset, TraceFlag, Memory, Performance Trace Flag 174 increases the SQL Server plan cache bucket count from 40,009 to 160,001 on 64-bit systems. When the SQL Server plan cache reaches its entry limit, plans that have low cost must be evicted in order to insert new plans. This can cause severe contention on the SOS_CACHESTORE spinlock and a high CPU usage occurs in SQL Server. On 64-bit systems, the number of buckets for the SQL Server plan cache is 40,009. Therefore, the maximum number of entries that can fit inside the SQL Server plan cache is 160,036. Enabling trace flag 174 on high performance systems increases the size of the cache and can avoid SOS_CACHESTORE spinlock contention. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0.3368,12.0) [12.0.2480,13.0) [13.0,)
6 TF634 definition TRUE Information TF 634 disables background columnstore compression Trace flag 634 disables background columnstore compression task. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Memory, Performance, ColumnStore Trace Flag 634 disables the background columnstore compression task. SQL Server periodically runs the Tuple Mover background task that compresses columnstore index rowgroups with uncompressed data, one such rowgroup at a time. Columnstore compression improves query performance but also consumes system resources. You can control the timing of columnstore compression manually, by disabling the background compression task with trace flag 634, and then explicitly invoking ALTER INDEX...REORGANIZE or ALTER INDEX...REBUILD at the time of your choice. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
7 TF652 definition TRUE Information TF 652 disables page pre-fetching scans Trace flag 652 disables page pre-fetching scans. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance, Memory, Pages Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching. http://support.microsoft.com/kb/920093 Server Windows Linux OnPremises SqlServer [11.0,)
8 TF661 definition TRUE Information TF 661 disables background ghost cleanup task Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly. https://support.microsoft.com/help/920093 Server Windows Linux OnPremises SqlServer [11.0,)
9 TF834 definition TRUE Information TF 834 enables large-page allocations Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads DefaultRuleset, TraceFlag, Performance, Memory, ColumnStore Trace Flag 834 causes the server to use large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Trace flag 834 is NOT recommended on SQL Server instances that use columnstore indexes. https://support.microsoft.com/kb/3210239 Server Windows Linux OnPremises SqlServer [11.0,)
10 TF845 definition TRUE Warning Low TF 845 is not needed in SQL Server 2012 and higher Disable trace flag 845 in SQL Server 2012 and higher versions DefaultRuleset, TraceFlag, Memory, Performance Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
11 TF902 definition TRUE Medium TF 902 Database Upgrade Bypass should be disabled Disable trace flag 902 which bypasses database upgrade DefaultRuleset, TraceFlag, UpdateIssues Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance. https://support.microsoft.com/help/2163980 Server Windows Linux OnPremises SqlServer [11.0,)
12 TF1117 definition TRUE Information TF 1117 enables filegroup-level autogrow Enable trace flag 1117 to enable filegroup auto-grow DefaultRuleset, TraceFlag, DBFileConfiguration, Performance Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount. https://support.microsoft.com/help/2154845 Server Windows Linux OnPremises SqlServer [11.0,)
13 TF1117 override TRUE Warning Low TF 1117 has no effect in SQL Server 2016 and higher Disable trace flag 1117 in SQL Server 2016 and higher versions Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. Starting with SQL Server 2016, this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES options of ALTER DATABASE syntax. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options [13.0,)
14 TF1118 definition TRUE Information TF 1118 disables single page allocations Enable trace flag 1118 to force page allocations on uniform extents DefaultRuleset, TraceFlag, Memory, Performance, Pages Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. https://support.microsoft.com/help/328551 Server Windows Linux OnPremises SqlServer [11.0,)
15 TF1118 override TRUE Warning Low TF 1118 has no effect in SQL Server 2016 and higher Disable trace flag 1118 in SQL Server 2016 and higher versions Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. Starting with SQL Server 2016, this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE syntax. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options [13.0,)
16 TF1204 definition TRUE Information TF 1204 returns deadlock information Disable trace flag 1204 that returns deadlock information DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1204 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog. https://support.microsoft.com/help/832524 Server Windows Linux OnPremises SqlServer [11.0,)
17 TF1211 definition TRUE Medium TF 1211 lock escalation should be disabled Disable trace flag 1211 to enable lock escalation DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
18 TF1222 definition TRUE Information TF 1222 returns deadlock information Disable trace flag 1222 that returns deadlock information DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1222 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog, in XML format that does not comply with any XSD schema. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
19 TF1224 definition TRUE Medium TF 1224 should be disabled Disable trace flag 1224 to allow lock escalation DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
20 TF1229 definition TRUE Medium TF 1229 lock partitioning should be enabled Disable trace flag 1229 to enable lock partitioning DefaultRuleset, TraceFlag, Locks, Performance, CPU Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions. https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide Server Windows Linux OnPremises SqlServer [11.0,)
21 TF1236 definition TRUE Medium TF 1236 database lock partitioning should be enabled Enable trace Flag 1236 to enable database lock partitioning DefaultRuleset, TraceFlag, Locks, Performance Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems. https://support.microsoft.com/help/2926217 Server Windows Linux OnPremises SqlServer [11.0,)
22 TF1236 override TRUE Low TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions Trace Flag 1236 enables database-level lock partitioning. Starting with SQL Server 2012 SP3 and SQL Server 2014 SP1, this behavior is controlled by the engine and trace flag 1236 has no effect. [11.0.6020,12.0) [12.0.4100,)
23 TF1462 definition TRUE Medium TF 1462 should be disabled to allow Log Stream Compression Disable trace flag 1462 to allow log stream compression DefaultRuleset, TraceFlag, Performance, AvailabilityGroups Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth. https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group Server Windows Linux OnPremises SqlServer [11.0,)
24 TF2312 definition TRUE Low TF 2312 sets the default cardinality estimation model Trace Flag 2312 does not apply to this SQL Server version. Check if you need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120). https://support.microsoft.com/help/2801413 Server Windows OnPremises SqlServer [11.0,)
25 TF2312 override False Information TF2312 sets the query optimizer cardinality estimation model to SQL Server 2014 or above versions, dependent of the compatibility level of the database DefaultRuleset, TraceFlag, QueryOptimizer, Performance [12.0, )
26 TF2330 definition TRUE Low TF 2330 disables recording of index usage stats Check if you need to disable recording of index usage stats by setting non-default trace flag 2330 DefaultRuleset, TraceFlag, Performance, Indexes Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005. https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats Server Windows Linux OnPremises SqlServer [11.0,)
27 TF2340 definition TRUE Information TF 2340 disables Batch Sorts for optimized nested loops joins Trace Flag 2340 disables Batch Sorts for optimized nested loops joins DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace Flag 2340 causes SQL Server not to use a sort operation (batch sort) for optimized nested loops joins when generating a plan. Verify need to set a non-default trace flag with the current system build and configuration. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
28 TF2371 definition TRUE Information TF 2371 enables a linear recompilation threshold for statistics Enable trace Flag 2371 to allow linear recompilation threshold for statistics DefaultRuleset, TraceFlag, Performance, Statistics Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#auto_update_statistics-option Server Windows OnPremises SqlServer [11.0,)
29 TF2371 override TRUE Warning Low Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect. [13.0,)
30 TF2389 definition TRUE Information TF 2389 enables automatic statistics for ascending keys Check if you need to set non-default trace flag 2389 with current system build and configuration DefaultRuleset, TraceFlag, Statistics, Performance Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2801413 Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
31 TF2390 definition TRUE Information TF 2390 enables automatic statistics for Ascending or Unknown Keys Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Check if you need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Statistics, Performance, Indexes Trace Flag 2390 enables automatically generated quick statistics for ascending or unknown keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2801413 Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
32 TF2528 definition TRUE Low TF 2528 disables parallel operations for integrity checking Trace Flag 2528 disables parallel operations for integrity checking, and can cause it to take longer to complete DefaultRuleset, TraceFlag, DataIntegrity, DBCC Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
33 TF2549 definition TRUE Low TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB Do not use this trace flag unless you know that each file is based on a unique physical disk DefaultRuleset, TraceFlag, DBCC Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk. https://support.microsoft.com/help/2634571 Server Windows Linux OnPremises SqlServer [11.0,)
34 TF2562 definition TRUE Low TF 2562 forces 'DBCC CHECKDB' command to execute in single batch Disable trace flag 2562, which forces 'DBCC CHECKDB' command to execute in single batch DefaultRuleset, TraceFlag, DBCC, TempDB Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase. https://support.microsoft.com/help/2634571 Server Windows Linux OnPremises SqlServer [11.0,)
35 TF2566 definition TRUE Medium TF 2566 disables default data purity check Disable trace flag 2566 to turn on default data purity check DefaultRuleset, TraceFlag, DBCC, DataIntegrity Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default. https://support.microsoft.com/help/945770 Server Windows Linux OnPremises SqlServer [11.0,)
36 TF3023 definition TRUE Information TF 3023 enables Backup Checksum option by default Disable trace flag 3023 to turn off 'CHECKSUM' option as default for 'BACKUP' command DefaultRuleset, TraceFlag, Backup Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option. https://support.microsoft.com/help/2656988 Server Windows Linux OnPremises SqlServer [11.0,)
37 TF3042 definition TRUE Information TF 3042 bypasses default backup compression pre-allocation algorithm Disable trace flag 3042 as using this trace flag might cause a slight performance penalty DefaultRuleset, TraceFlag, Backup Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time. https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server Server Windows Linux OnPremises SqlServer [11.0,)
38 TF3226 definition TRUE Information TF 3226 disables ErrorLog entries for successful backup operations Disable trace flag 3226 to prevent SQL Server from recording ErrorLog entries for each successful backup operation DefaultRuleset, TraceFlag, Backup Trace Flag 3226 prevents SQL Server from recording an entry to the Errorlog on every successful backup operation. Backup operations are registered in the Errorlog by default. Frequent backup operations can contribute to massive Errorlog files that become unwieldy. https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
39 TF4136 override TRUE Information Disable trace flag 4136 to prevent parameter sniffing. Verify need to set non-default trace flag with current system build and configuration Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration. [11.0.2316,)
40 TF4136 definition TRUE Medium TF 4136 disables parameter sniffing Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/980653 Server Windows Linux OnPremises SqlServer [11.0,)
41 TF4137 override TRUE Information Disable trace flag 4137 to instruct SQL Server to generate plan using partial correlation of filters. Verify need to set non-default trace flag with the current system build and configuration Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration. [11.0.2316,)
42 TF4137 definition TRUE Warning Low TF 4137 causes plans to use partial correlation for filters Trace flag 4137 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, QueryOptimizer, Performance Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). However it does not apply to this SQL Server version. Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2658214 Server Windows Linux OnPremises SqlServer [11.0,)
43 TF4138 override TRUE Information Trace Flag 4138 enables plan that without row goal adjustments. Verify need to set a non-default trace flag with the current system build and configuration Trace Flag 4138 causes SQL Server to generate a plan that does not use row goal adjustments with queries that contain TOP, OPTION (FAST N), IN, or EXISTS keywords. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'DISABLE_OPTIMIZER_ROWGOAL' query hint. Verify need to set a Non-default trace flag with current system build and configuration. [11.0.2325,)
44 TF4138 definition TRUE Warning Low 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 Server Windows Linux OnPremises SqlServer [11.0,)
45 TF4139 override TRUE Information Trace Flag 4139 enables automatic statistics for any key ordering. Verify need to set a non-default trace flag with the current system build and configuration Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. This trace flag is recommended to be set in cases where queries access newly inserted key values that may change plan shape, but the new values are not yet updated in the statistics histogram for the affected columns. In this case, regardless of the leading statistics column status (ascending, descending, or stationary), the histogram used to estimate cardinality will be adjusted at query compile time. This trace flag does not apply to the cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Verify need to set a non-default trace flag with the current system build and configuration. [11.0.3431,11.0.5058) [11.0.5532,)
46 TF4139 definition TRUE Warning Low TF 4139 enables automatic statistics for any key ordering Trace flag 4139 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Statistics Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. However, this trace flag does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration. https://support.microsoft.com/help/2952101 Server Windows Linux OnPremises SqlServer [11.0,)
47 TF4199 definition TRUE Information TF 4199 enables query optimizer fixes Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, QueryOptimizer Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs. http://support.microsoft.com/help/974006 Server Windows Linux OnPremises SqlServer [11.0, 14.0)
48 TF6498 definition TRUE Low TF 6498 enables additional concurrent large queries Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Performance, Memory Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect. https://support.microsoft.com/help/3024815 Server Windows Linux OnPremises SqlServer [12.0.5000,)
49 TF6532 definition TRUE Information TF 6532 enables performance improvements for spatial data Enable trace flag 6532 to enable performance improvements for spatial data DefaultRuleset, TraceFlag, Performance Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects. https://support.microsoft.com/help/3107399 Server Windows Linux OnPremises SqlServer [11.0.6020,11.0.6518)
50 TF6532.6533 override TRUE Warning Low Disable trace flag 6532 in SQL Server 2016 and higher versions. [13.0,)
51 TF6532.6533 definition TRUE Information TF 6532 and 6533 improve spatial data performance Enable trace flags 6532 and 6533 to improve spatial data performance DefaultRuleset, TraceFlag, Performance Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, types of queries, and objects. https://support.microsoft.com/help/3107399 Server Windows OnPremises SqlServer [11.0,)
52 TF6534 override TRUE Information Enable trace flag 6534 to enable performance improvement of query operations with spatial data types Trace Flag 6534 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects. [11.0.6020,12.0) [12.0.5000,13.0)
53 TF6534 definition TRUE Warning Low TF 6534 enables performance improvements for spatial data Verify need to set a non-default trace flag with the current system build and configuration DefaultRuleset, TraceFlag, Performance Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration. https://support.microsoft.com/help/3107399 Server Windows OnPremises SqlServer [11.0,)
54 TF7412 definition TRUE Information TF 7412 enables the lightweight profiling infrastructure Enable trace flag 7412 to enable lightweight profiling infrastructure for live query performance troubleshooting DefaultRuleset, TraceFlag, Performance Trace Flag 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting. Consider enabling TF 7412 to have the ability to access runtime information on query execution plans for any session. https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure Server Windows Linux OnPremises SqlServer [13.0.4001,15.0)
55 TF9024 definition TRUE Low TF 9024 converts global log pool memory object Verify need to set non-default trace flag with current system build and configuration DefaultRuleset, TraceFlag, Performance, NUMA, Memory, CPU TF9024 converts a global log pool memory object into NUMA node partitioned memory object. https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser Server Windows OnPremises SqlServer
56 TF9024 override TRUE Information Enable trace flag 9024 to convert global log pool memory objects into NUMA node partitioned memory objects [11.0.3349, 11.0.6020) [12.0, 12.0.4100)
57 TF9024 override TRUE Warning Low TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above. [11.0.6020, 12.0) [12.0.4100,)
58 TF8048 definition TRUE Low TF 8048 converts NUMA partitioned memory objects into CPU partitioned Verify need to set a Non-default TF 8048 with current system build and configuration DefaultRuleset, TraceFlag, Performance, NUMA, CPU, Memory TF 8048 converts NUMA partitioned memory objects into CPU partitioned. https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser Server Windows OnPremises SqlServer
59 TF8048 override TRUE Warning Low Disable trace flag 8048 in SQL Server 2014 SP2, SQL Server 2016 and above [12.0.4100,)
60 TF8048 override TRUE Information Enable trace flag 8048 to convert NUMA partitioned memory objects into CPU partitioned [11.0, 12.0.4100)
61 DeprecatedFeatures definition TRUE Warning Low Deprecated or discontinued features should not be used Replace deprecated or discontinued feature @{DeprecatedFeature} with actual features for SQL Server version @{ProductVersion} Use actual features for SQL Server version @{ProductVersion} instead of found deprecated features: @{DeprecatedFeature} DefaultRuleset, Deprecated, Security, UpdateIssues, Performance This check detects deprecated or discontinued features used on target SQL Server instances. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
62 SystemHealthSession definition TRUE Medium 'system_health' XEvent session is not active Start system health session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer DefaultRuleset, XEvent, SystemHealth This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session. https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
63 SPServerDiagnosticsSession definition TRUE Low 'sp_server_diagnostics' xEvent session is not active Start xEvent session by using 'ALTER EVENT SESSION' statement or Extended Events node in Object Explorer DefaultRuleset, XEvent, SystemHealth This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session. https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql Server Windows Linux OnPremises SqlServer [11.0,)
64 DefaultTrace definition TRUE Low Default trace was not found or is inactive Check if there is enough space on SQL Server to write default trace file, then run default trace by disabling and reenabling it DefaultRuleset, Traces Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur. https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
65 HintsStatistics definition TRUE Information Hints are used Use <join_hint>, <query_hint> and <table_hint> in specific cases only since SQL Server Query Optimizer typically selects best execution plan for queries DefaultRuleset, QueryOptimizer, Performance, Statistics Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators. https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
66 HintsUsageInModules definition False Information Hints usage in modules @{Hint} used in @{type_desc} @{Schema_Name}.@{Object_Name} DefaultRuleset, QueryOptimizer, Performance, Statistics Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators. https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
67 PlansUseRatio definition TRUE Medium Amount of single-use plans in cache is high Enable 'Optimize for ad hoc workloads' option on heavy OLTP ad-hoc workloads to conserve resources. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0}) DefaultRuleset, Performance, QueryOptimizer The 'Optimize for ad hoc workloads' option helps relieve memory pressure by not allowing the plan cache to become filled with compiled plans that aren't reused. https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 0.5
68 HypotheticalIndexes definition TRUE Medium Hypothetical indexes found Drop hypothetical @{IndexName} index for @{Schema}.@{Object} DefaultRuleset, Indexes, Performance Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible. https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
69 HypotheticalStatistics definition TRUE Medium Hypothetical statistics found Drop hypothetical @{StatName} statistics for @{Schema}.@{Object} DefaultRuleset, Statistics Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible. https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
70 LatestCU definition TRUE Medium SQL Server instance is not up to date SQL Server version is not supported Update SQL Server and install Service Packs and Cumulative Updates as they are released. Current product version @{ProductVersion} is not up to date Update SQL Server and install service packs and cumulative updates. Current product version @{ProductVersion} of SQL Server is out of support 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). The Microsoft Support Lifecycle (MSL) policy offers a minimum of 10 years of support (5 years Mainstream support and 5 years Extended support). It also provides support for 1 year after the new service pack was released, older service packs are unsupported. https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an Server Windows Linux OnPremises SqlServer [11.0,)
71 LatestCU override TRUE Warning Low SQL Server instance is up to date SQL Server instance is not up to date Product version @{ProductVersion} is the latest available Update SQL Server and install service packs and cumulative updates. Current product version @{ProductVersion} 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). https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an [11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.6300, 14.0) [14.0.3411, 15.0) [15.0.4178,) [11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.5026,)
72 FKNoIndexes LatestCU definition override TRUE Medium Low Foreign key constraints should have corresponding indexes SQL Server instance is up to date Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName} Product version @{ProductVersion} is latest available DefaultRuleset, Performance, Indexes Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful. https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints Database Windows Linux OnPremises, ManagedInstance [11.0,) [11.0.7507, 12.0) [12.0.6433, 13.0) [13.0.6300, 14.0) [14.0.3430, 15.0) [15.0.4198,) NOT: master model msdb tempdb
73 MissedIndexes FKNoIndexes definition TRUE Information Medium Potentially missing indexes Foreign key constraints should have corresponding indexes Create index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #} Create a corresponding index for each foreign key. There is no index on foreign keys: @{ConstraintName} DefaultRuleset, Performance, Indexes Potentially missing indexes were found based on query history. It may be important to revise them. 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/sql-server-index-design-guide https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
74 FullBackup MissedIndexes definition TRUE Medium Information Full backup is missed or outdated Potentially missing indexes Create full backup. Last full backup is over @{threshold} days old Create index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #} DefaultRuleset, Backup DefaultRuleset, Performance, Indexes Database doesn't have any full backup or the latest full backup is over 7 days old. Potentially missing indexes were found based on query history. It may be important to revise them. https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux OnPremises SqlServer, ManagedInstance [11.0,) NOT: model tempdb NOT: master model msdb tempdb 7
75 OutdatedTranLogBackup FullBackup definition TRUE Medium Transaction Log backup is missed or outdated Full backup is missed or outdated Create transaction log backup. Database recovery model: @{recovery_model_desc} Create full backup. Last full backup is over @{threshold} days old DefaultRuleset, Backup Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H. Database doesn't have any full backup or the latest full backup is over 7 days old. https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server Database Windows Linux OnPremises SqlServer [11.0,) NOT: master model msdb tempdb NOT: model tempdb 7
76 DbDiffCollation OutdatedTranLogBackup definition TRUE Medium Database collation doesn't match master collation Transaction Log backup is missed or outdated Keep database collation the same as master or model collation Create transaction log backup. Database recovery model: @{recovery_model_desc} DefaultRuleset, DBConfiguration, Collation DefaultRuleset, Backup 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. Database does not have any transaction Log backup since the latest full or differential backup, or it's older than @{threshold}H. https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server Database Windows Linux OnPremises, ManagedInstance SqlServer [11.0,) NOT: master model msdb tempdb 24
77 AutoClose DbDiffCollation definition TRUE Medium 'AUTO_CLOSE' option should be OFF Database collation doesn't match master collation Set 'AUTO_CLOSE' option to OFF Keep database collation the same as master or model collation DefaultRuleset, Performance, DBConfiguration DefaultRuleset, DBConfiguration, Collation 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. 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/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases Database Windows Linux OnPremises SqlServer, ManagedInstance [11.0,) NOT: master msdb tempdb
78 AutoShrink AutoClose definition TRUE Medium 'AUTO_SHRINK' option should be OFF 'AUTO_CLOSE' option should be OFF Set 'AUTO_SHRINK' option to OFF Set 'AUTO_CLOSE' option to OFF DefaultRuleset, DBConfiguration, Performance DefaultRuleset, Performance, DBConfiguration 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. 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://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off Database Windows Linux OnPremises, ManagedInstance SqlServer [11.0,) NOT: master msdb tempdb
79 PageVerify AutoShrink definition TRUE Medium 'PAGE_VERIFY' option should be 'CHECKSUM' 'AUTO_SHRINK' option should be OFF Set 'PAGE_VERIFY' option to 'CHECKSUM' Set 'AUTO_SHRINK' option to OFF DefaultRuleset, DBConfiguration, DataIntegrity DefaultRuleset, DBConfiguration, Performance 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. 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://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off Database Windows Linux OnPremises SqlServer, ManagedInstance [11.0,) NOT: master msdb tempdb
80 DbChaining PageVerify definition TRUE Medium Cross-Database access should be disabled 'PAGE_VERIFY' option should be 'CHECKSUM' Turn off 'DB_CHAINING' option Set 'PAGE_VERIFY' option to 'CHECKSUM' DefaultRuleset, DBConfiguration, Security DefaultRuleset, DBConfiguration, DataIntegrity 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. 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/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum Database Windows Linux OnPremises, ManagedInstance SqlServer [11.0,) NOT: master msdb tempdb
81 AutoCreateStatsIncremental DbChaining definition TRUE Low Medium Incremental option of auto stats should be ON Cross-Database access should be disabled Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options Turn off 'DB_CHAINING' option DefaultRuleset, DBConfiguration, Statistics, Performance DefaultRuleset, DBConfiguration, Security 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. 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/statistics/statistics https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [12.0,) [11.0,) NOT: master msdb tempdb
82 TrustWorthy AutoCreateStatsIncremental definition TRUE Low 'TRUSTWORTHY' should be OFF Incremental option of auto stats should be ON Set 'TRUSTWORTHY' option to OFF Turn on 'AUTO_CREATE_STATISTICS' and 'INCREMENTAL' options DefaultRuleset, DBConfiguration, Security DefaultRuleset, DBConfiguration, Statistics, Performance 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. 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://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server https://docs.microsoft.com/sql/relational-databases/statistics/statistics Database Windows Linux OnPremises SqlServer, ManagedInstance [11.0,) [12.0,) NOT: master msdb tempdb
83 ParameterizationNotSimple TrustWorthy definition TRUE Low 'PARAMETERIZATION' should be 'SIMPLE' 'TRUSTWORTHY' should be OFF Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries Set 'TRUSTWORTHY' option to OFF DefaultRuleset, DBConfiguration, Performance, QueryOptimizer DefaultRuleset, DBConfiguration, Security 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. 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/performance/specify-query-parameterization-behavior-by-using-plan-guides https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server Database Windows Linux OnPremises, ManagedInstance SqlServer [11.0,) NOT: master msdb tempdb
84 TempDBFilesNotSameSize ParameterizationNotSimple definition TRUE Medium Low TempDB data files are not the same size 'PARAMETERIZATION' should be 'SIMPLE' Make all TempDB data files the same size Set 'PARAMETERIZATION' to 'SIMPLE' and use forced parameterization only on certain classes of queries instead of all queries DefaultRuleset, TempDB, Performance, DBFileConfiguration DefaultRuleset, DBConfiguration, Performance, QueryOptimizer We recommend that you create all TempDB data files at the same size. 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://support.microsoft.com/kb/2154845 https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides Server Database Windows Linux OnPremises SqlServer, ManagedInstance [11.0,) NOT: master msdb tempdb
85 TempDBFilesMultiple4 TempDBFilesNotSameSize definition TRUE Low Medium Number of TempDB data files should be in multiples of 4 TempDB data files are not the same size Make the number of data files be in multiples of 4. For example, 8, 12, 16, and so on, depending on your workloads. Currently you have @{physical_name} TempDB data files Make all TempDB data files the same size 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. We recommend that you create all TempDB data files at the same size. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises SqlServer [11.0,)
86 TempDBFiles1PerCPU TempDBFilesMultiple4 definition TRUE Medium Low Number of TempDB data files should depend on CPU count Number of TempDB data files should be in multiples of 4 1 data file per logical processor is required (processors count: @{online_logical_processors}) Make the number of data files be in multiples of 4. For example, 8, 12, 16, and so on, depending on your workloads. Currently you have @{physical_name} TempDB data files DefaultRuleset, TempDB, Performance, DBFileConfiguration Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises SqlServer [11.0,)
87 TempDBFilesNotLess8 TempDBFiles1PerCPU definition TRUE Medium Number of TempDB data files should be at least 8 Number of TempDB data files should depend on CPU count Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8 1 data file per logical processor is required (processors count: @{online_logical_processors}) DefaultRuleset, TempDB, Performance, DBFileConfiguration Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code. https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises SqlServer [11.0,)
88 TempDBFilesAutoGrowth TempDBFilesNotLess8 definition TRUE Medium TempDB data files have different auto-growth settings Number of TempDB data files should be at least 8 Make auto-growth settings the same for each TempDB data file Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8 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. 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/relational-databases/databases/tempdb-database https://support.microsoft.com/kb/2154845 Server Windows Linux OnPremises SqlServer [11.0,)
89 FilesAutogrowth TempDBFilesAutoGrowth definition TRUE Medium Database files auto-growth over 1GB TempDB data files have different auto-growth settings Set file growth to less than 1GB for files: @{FileName} Make auto-growth settings the same for each TempDB data file DefaultRuleset, Performance, DBFileConfiguration DefaultRuleset, TempDB, 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. 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://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database Database Server Windows Linux OnPremises, ManagedInstance SqlServer [13.0.4001,) [11.0,)
90 DuplicateIndexes FilesAutogrowth definition TRUE Low Medium Duplicate indexes Database files auto-growth over 1GB Remove duplicate indexes in table @{Table}: @{ToDelete} Set file growth to less than 1GB for files: @{FileName} DefaultRuleset, Performance, Indexes DefaultRuleset, Performance, DBFileConfiguration A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. 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://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) [13.0.4001,) NOT: master model msdb tempdb
91 RedundantIndexes DuplicateIndexes definition TRUE Low Tables with redundant indexes Duplicate indexes Remove redundant indexes in table @{Table}: @{Indexes} Remove duplicate indexes in table @{Table}: @{ToDelete} 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. A SQL Server index is an on-disk or in-memory structure associated with a table or view that speeds retrieval of rows from the table or view. An index contains keys built from one or more columns in the table or view. https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
92 UserObjectsInMaster RedundantIndexes definition TRUE Warning Low User objects in master database Tables with redundant indexes Remove user objects from 'master' database: @{Object_Name} Remove redundant indexes in table @{Table}: @{Indexes} DefaultRuleset, masterDB, Backup DefaultRuleset, Performance, Indexes 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. 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/databases/master-database https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) master NOT: master model msdb tempdb
93 HighCPUUsage UserObjectsInMaster definition TRUE Medium Low High CPU usage on server User objects in master database Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}% Remove user objects from 'master' database: @{Object_Name} DefaultRuleset, Performance, CPU DefaultRuleset, masterDB, Backup 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. 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/performance-monitor/monitor-cpu-usage https://docs.microsoft.com/sql/relational-databases/databases/master-database Server Database Windows Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) master 70
94 ReplErrors24H HighCPUUsage definition TRUE Medium Replication errors within last 24 hours High CPU usage on server Review '@{publisher_db}' database replication errors for publications: @{publication} Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}% DefaultRuleset, Replication DefaultRuleset, Performance, CPU This check searches for errors in distribution database agent's history table for the last 24 hours. 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/replication/sql-server-replication https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage Server Windows Linux Windows OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 70
95 AgentAlertsSeverity10 ReplErrors24H definition TRUE Low Medium Agent doesn't rise alerts for errors with severity 10 Replication errors within last 24 hours Create alerts for errors: @{error_ids} Review '@{publisher_db}' database replication errors for publications: @{publication} DefaultRuleset, Agent DefaultRuleset, Replication 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. This check searches for errors in distribution database agent's history table for the last 24 hours. https://docs.microsoft.com/sql/ssms/agent/alerts https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
96 AgentAlertsSeverity16 AgentAlertsSeverity10 definition TRUE Low Agent doesn't rise alerts for errors with severity 16 Agent doesn't rise alerts for errors with severity 10 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
97 AgentAlertsSeverity17 AgentAlertsSeverity16 definition TRUE Low Agent doesn't rise alerts for errors with severity 17 Agent doesn't rise alerts for errors with severity 16 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
98 AgentAlertsSeverity19 AgentAlertsSeverity17 definition TRUE Low Agent doesn't rise alerts for errors with severity 19 Agent doesn't rise alerts for errors with severity 17 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
99 AgentAlertsSeverity20 AgentAlertsSeverity19 definition TRUE Low Agent doesn't rise alerts for errors with severity 20 Agent doesn't rise alerts for errors with severity 19 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
100 AgentAlertsSeverity21 AgentAlertsSeverity20 definition TRUE Low Agent doesn't rise alerts for errors with severity 21 Agent doesn't rise alerts for errors with severity 20 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
101 AgentAlertsSeverity22 AgentAlertsSeverity21 definition TRUE Low Agent doesn't rise alerts for errors with severity 22 Agent doesn't rise alerts for errors with severity 21 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
102 AgentAlertsSeverity23 AgentAlertsSeverity22 definition TRUE Low Agent doesn't rise alerts for errors with severity 23 Agent doesn't rise alerts for errors with severity 22 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
103 AgentAlertsSeverity24 AgentAlertsSeverity23 definition TRUE Low Agent doesn't rise alerts for errors with severity 24 Agent doesn't rise alerts for errors with severity 23 Create alerts for errors: @{error_ids} DefaultRuleset, Agent Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events. https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
104 WeakPassword AgentAlertsSeverity24 definition TRUE Medium Low SQL logins have weak passwords Agent doesn't rise alerts for errors with severity 24 Set strong passwords for logins: @{PasswordData} Create alerts for errors: @{error_ids} DefaultRuleset, Security, WeakPassword DefaultRuleset, Agent Some SQL logins have weak passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities. 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/security/strong-passwords https://docs.microsoft.com/sql/ssms/agent/alerts Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
105 VLFCount WeakPassword definition TRUE Medium VLF count SQL logins have weak passwords Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId} Set strong passwords for logins: @{PasswordData} DefaultRuleset, Backup, Performance DefaultRuleset, Security, WeakPassword 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. Some SQL logins have weak passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities. https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide https://docs.microsoft.com/sql/relational-databases/security/strong-passwords Database Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 50
106 TF8015 VLFCount definition TRUE Medium TF 8015 disables auto-detection and NUMA setup VLF count Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version Update transaction log settings to reduce number of VLFs. Current number is: @{RecoveryUnitId} DefaultRuleset, TraceFlag, CPU, NUMA DefaultRuleset, Backup, 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. 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://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044 https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide Server Database Windows Linux OnPremises SqlServer, ManagedInstance [11.0,11.0.3349) [11.0,) 50
107 TF8032 TF8015 definition TRUE Medium TF 8032 reverts cache limit parameters to SQL Server 2005 RTM TF 8015 disables auto-detection and NUMA setup Disable trace flag 8032 Disable trace flag 8015 for this SQL Server instance. This trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance DefaultRuleset, TraceFlag, CPU, NUMA 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. SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups. https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044 Server Windows Linux OnPremises SqlServer [11.0,) [11.0,11.0.3349)
108 TF8744 TF8032 definition TRUE Medium TF 8744 disables pre-fetching for Nested Loop operator TF 8032 reverts cache limit parameters to SQL Server 2005 RTM Disable trace flag 8744 Disable trace flag 8032 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. 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/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa Server Windows Linux OnPremises SqlServer [11.0,12.0) [11.0,)
109 TF9347 TF8744 definition TRUE Medium TF 9347 disables batch mode for sort operator TF 8744 disables pre-fetching for Nested Loop operator Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version Disable trace flag 8744 DefaultRuleset, TraceFlag, Performance Trace flag 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. Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator. https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa Server Windows Linux OnPremises SqlServer [11.0,13.0) [11.0,12.0)
110 TF9349 TF9347 definition TRUE Medium TF 9349 disables batch mode for top N sort operator TF 9347 disables batch mode for sort operator Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version Disable trace flag 9347 for this SQL Server instance. This trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance Trace flag 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. Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries. Server Windows Linux OnPremises SqlServer [11.0,13.0)
111 TF9389 TF9349 definition TRUE Medium TF 9389 enables dynamic memory grant for batch mode operators TF 9349 disables batch mode for top N sort operator Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version Disable trace flag 9349 for this SQL Server instance. This trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance, TempDB DefaultRuleset, TraceFlag, Performance 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. Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries. Server Windows Linux OnPremises, ManagedInstance SqlServer [11.0,13.0)
112 TF9476 TF9389 definition TRUE Medium TF 9476 causes SQL Server to generate plan using Simple Containment assumption TF 9389 enables dynamic memory grant for batch mode operators Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version Disable trace flag 9389 for this SQL Server instance. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance, QueryOptimizer DefaultRuleset, TraceFlag, Performance, TempDB 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. Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available. Server Windows Linux OnPremises SqlServer, ManagedInstance [11.0,13.0)
113 TF9481 TF9476 definition TRUE Medium TF 9481 enables Legacy CE model TF 9476 causes SQL Server to generate plan using Simple Containment assumption Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version Disable trace flag 9476 for this SQL Server instance. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, QueryOptimizer, Performance DefaultRuleset, TraceFlag, Performance, QueryOptimizer 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. Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions. Server Windows Linux OnPremises SqlServer [11.0,12.0) [11.0,13.0)
114 TF10204 TF9481 definition TRUE Medium TF 10204 disables merge/recompress TF 9481 enables Legacy CE model Disable trace flag 10204. The trace flag does not apply to this SQL Server version Disable trace flag 9481 for this SQL Server instance. The trace flag does not apply to this SQL Server version DefaultRuleset, TraceFlag, Performance, ColumnStore DefaultRuleset, TraceFlag, QueryOptimizer, 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. Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database. Server Windows Linux OnPremises SqlServer [11.0,13.0) [11.0,12.0)
115 SPNaming TF10204 definition TRUE Medium Stored procedure naming TF 10204 disables merge/recompress Rename the following stored procedures to eliminate 'sp_' prefix: @{ObjectName} Disable trace flag 10204. The trace flag does not apply to this SQL Server version DefaultRuleset, Naming DefaultRuleset, TraceFlag, Performance, ColumnStore 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. 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/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100) Database Server Windows Linux OnPremises, ManagedInstance SqlServer [11.0,) [11.0,13.0)
116 ObjectNamingSpecialChar SPNaming definition TRUE Low Medium Special characters in object names Stored procedure naming Rename the following objects to eliminate special characters: @{ObjectName} Rename the following stored procedures to eliminate 'sp_' prefix: @{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. 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/dd172134(v=vs.100) https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100) Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
117 ColumnNamingSpecialChar ObjectNamingSpecialChar definition TRUE Low Special characters in column names Special characters in object names Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{ObjectName} Rename the following objects to eliminate special characters: @{ObjectName} DefaultRuleset, Naming Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object. If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object. https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
118 FnNaming ColumnNamingSpecialChar definition TRUE Medium Low User function naming Special characters in column names Rename the following functions to eliminate 'fn_ prefix': @{ObjectName} Remove whitespaces, left and right square brackets, single and double quotation marks from column names: @{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. Using whitespaces, left and right square brackets, single and double quotation marks in database object names makes it more difficult not only to reference that object, but also to read code that contains the name of that object. https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100) Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
119 ObjectNamingResKeywords FnNaming definition TRUE Low Medium Object names contain reserved keywords User function naming Rename the following objects to eliminate reserved keywords: @{ObjectName} Rename the following functions to eliminate 'fn_ prefix': @{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. 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/language-elements/reserved-keywords-transact-sql https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
120 DeprFeaturesInModules ObjectNamingResKeywords definition TRUE Low Deprecated or discontinued features in modules Object names contain reserved keywords Remove deprecated or discontinued features in @{ObjectName}: @{Keyword} Rename the following objects to eliminate reserved keywords: @{ObjectName} DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues DefaultRuleset, Naming 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. 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/relational-databases/performance-monitor/sql-server-deprecated-features-object https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
121 DeprFeaturesInModules override definition False TRUE Warning Low Deprecated or discontinued features in modules Do not use deprecated or discontinued feature '@{Feature}'. It probably is used in @{ObjectName} DefaultRuleset, Security, Deprecated, LongRunningChecks, UpdateIssues Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Database Windows Linux AzureSQL SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
122 DeprFeaturesInJobs definition TRUE Low Deprecated or discontinued features in modules Remove deprecated or discontinued features in @{ObjectName}: @{Keyword} DefaultRuleset, Security, Deprecated, Agent, Jobs, LongRunningChecks, UpdateIssues Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server. https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
123 DeprFeaturesInJobs override False Warning Low Server Windows Linux AzureSQL AzureVm OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
124 NUMANodeSingleCPU definition TRUE Medium Single CPU assigned to NUMA node Assign additional CPUs to NUMA nodes with only one CPU DefaultRuleset, NUMA, CPU, Memory, Performance Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA. https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) Server Windows OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
125 NUMANodeNoCPU definition TRUE Medium NUMA nodes without CPUs Assign CPUs to each NUMA node DefaultRuleset, NUMA, Performance, CPU, Memory Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA. https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105) Server Windows OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
126 IndexKeyGuid definition TRUE Low Guid in clustered index key column Remove GUIDs in clustered indexes keys: @{IndexName} DefaultRuleset, Indexes, Performance A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects. https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/ Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
127 IndexesLargeKeys definition TRUE Low Indexes keys with more than 900 bytes Indexes keys with more than @{threshold} bytes Remove keys larger than 900 bytes in @{FullName} index Remove keys larger than @{threshold} bytes in @{FullName} index DefaultRuleset, Indexes, Performance When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. 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 @{threshold}-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. http://msdn.microsoft.com/library/ms191241.aspx Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,13.0) NOT: master model msdb tempdb 900
128 IndexesLargeKeysNonClust definition TRUE Low NonClustered indexes keys with more than 1700 bytes NonClustered indexes keys with more than @{threshold} bytes Remove keys larger than 1700 bytes in @{FullName} index Remove keys larger than @{threshold} bytes in @{FullName} index DefaultRuleset, Indexes, Performance When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. 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 @{threshold}-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. http://msdn.microsoft.com/library/ms191241.aspx Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [13.0,) NOT: master model msdb tempdb 1700
129 IndexesLargeKeysClust definition TRUE Low Clustered indexes keys with more than 900 bytes Clustered indexes keys with more than @{threshold} bytes Remove keys larger than 900 bytes in @{FullName} index Remove keys larger than @{threshold} bytes in @{FullName} index DefaultRuleset, Indexes, Performance When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the @{threshold}-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes. http://msdn.microsoft.com/library/ms191241.aspx Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [13.0,) NOT: master model msdb tempdb 900
130 DisabledIndexes definition TRUE Medium Disabled indexes exist Remove or enable disabled index: @{FullName} DefaultRuleset, Indexes, Performance If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them. https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
131 IndexesFillFactor definition TRUE Low Index fill factor is below 80% Index fill factor is below @{threshold}% Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent Review index @{FullName} as its fill factor @{FillFactor} is lower than @{threshold} 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. 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 @{threshold} means that @{leafPageEmptyPercent} percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index. https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb 80
132 NonUniqueClusterIndex definition TRUE Medium Non-unique clustered indexes Review non-unique @{FullName} clustered index DefaultRuleset, Indexes, Performance Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. 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 Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
133 SuspectPages definition TRUE High Suspect pages found Run 'DBCC CHECKDB' to verify affected database. Suspect pages were found: @{EventType} DefaultRuleSet, Pages, DataIntegrity The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary. https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server Database Windows Linux [11.0,)
134 SparseFiles definition TRUE Low Sparse files Remove sparse files: @{SparseFiles} DefaultRuleSet, Snapshots, Backup, DataIntegrity If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size. https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/ Database Windows Linux [11.0,)
135 TableNoIndex definition TRUE Low Tables without indexes Review @{TableName} table and create reasonable indexes DefaultRuleset, Indexes, Performance Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient. https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
136 TableNoClusteredIndex definition TRUE Low Tables without clustered indexes Review @{TableName} table and create clustered index DefaultRuleset, Indexes, Performance Tables without clustered indexes are called heaps. 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 Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
137 TablePSAlign definition TRUE Low Table index not aligned with PS Re-create @{IndexName} index in @{TableName} table to have it aligned with current schema DefaultRuleset, Indexes, Performance Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index. https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master tempdb model msdb
138 LoginNoPassword definition False Warning Low SQL logins have no passwords Set strong passwords for logins: @{PasswordData} DefaultRuleset, Security, WeakPassword Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use a strong password for each of your SQL logins to decrease vulnerabilities. https://docs.microsoft.com/sql/relational-databases/security/password-policy Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
139 LoginEqPassword definition False Warning Low Passwords and SQL login names are the same Review logins that have passwords equal to SQL login names: @{PasswordData} DefaultRuleset, Security, WeakPassword Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords. Make sure that you use passwords that are different from your SQL login names. https://docs.microsoft.com/sql/relational-databases/security/password-policy Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
140 SystemHealth definition TRUE High System Health important messages Error @{Error_Number} occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago DefaultRuleset, XEvent, SystemHealth, Performance The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
141 RarelyUsedIndex definition TRUE Low Rarely used index Revise rarely used index @{IndexName} DefaultRuleset, Indexes, Performance Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup. https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
142 UnusedIndex definition TRUE Medium Unused index Revise unused @{IndexName} index on @{TableName} table DefaultRuleset, Index, Performance Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere. https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
143 SkewedCompatibilityLevel definition TRUE Low Database with skewed compatibility level Update database compatibility level. Current level is @{CompatibilityLevel} DefaultRuleset, CompatibilityLevel, Security, Performance, UpdateIssues Some databases may have a compatibility level lower than the allowed level by the Database Engine. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level Database Windows Linux [11.0,)
144 PendingDiskIORequests definition TRUE Medium Pending disk I/O requests Solve I/O related issues to get rid of pending requests DefaultRuleset, IO, Performance A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment. https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations Server Windows Linux [11.0,)
145 MaxDOP definition TRUE Medium MaxDOP should be less or equal to number of CPUs Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - number of processors used by SQL Server DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises SqlServer [11.0,)
146 MaxDOPFewNUMA definition TRUE Low MAXDOP set in accordance with CPU count Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises SqlServer [11.0, 13.0)
147 DbIntegrity definition TRUE Medium Database Integrity Checks Run 'DBCC CHECKDB' command checks DefaultRuleset, DBCC, Performance, DataIntegrity The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation. https://msdn.microsoft.com/library/ms176064.aspx Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: tempdb 7
148 DirectCatalogUpdates definition TRUE Low Direct Catalog Updates Avoid using direct catalog update feature DefaultRuleset, DBCC, Deprecated The 'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported. https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: tempdb
149 DataPurityCheck definition TRUE Low Data Purity Check Enable data purity validation with 'DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY' command DefaultRuleset, DBCC, DataIntegrity The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues. http://support.microsoft.com/kb/923247 Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
150 StatSamplingRate definition TRUE Low Statistics sampling rate Some statistics have sampling rates less than @{threshold:P}. Update with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName} DefaultRuleset, Performance, Statistics For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results. https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 0.25
151 IndexFragmentation definition TRUE Medium Index Fragmentation Remove fragmentation of @{IndexFullName} index. Current fragmentation level is @{fragmentation:#0.##}% DefaultRuleset, Index, Performance The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations. https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb 5
152 IndexFragmentation override TRUE Warning Low [12.0,)
153 XTPHashAvgChainBuckets definition TRUE Medium High avg chain length and empty buckets Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in key values DefaultRuleset, Index, Performance, XTP Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table. https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725 Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [12.0,) NOT: master model msdb tempdb
154 XTPTooManyBuckets definition TRUE Low Too many buckets Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which wastes memory and marginally slows down full table scans DefaultRuleset, Index, Performance, XTP Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table. https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725 Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [12.0,) NOT: master model msdb tempdb
155 XTPTooFewBuckets definition TRUE Medium Too few buckets Make number of buckets of @{IndexFullName} index equal to distinct rows. It has @{total_bucket_count} buckets and there are @{DistinctCnt} in table, which leads to chaining records DefaultRuleset, Index, Performance, XTP Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table. https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725 Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [12.0,) NOT: master model msdb tempdb
156 XTPRangeIXHealth definition TRUE Low NonClustered index retry amount Review @{IndexFullName} index as its retry count is over @{RetryCountPct}% of total, which indicates possible concurrency issues DefaultRuleset, Index, Performance, XTP When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues. https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [12.0,) NOT: master model msdb tempdb
157 TF6533Misuse definition TRUE Low 'STRelate' and 'STAsBinary' functions unexpected results due to TF 6533 Disable trace flag 6533 to avoid unexpected results of 'STRelate' and 'STAsBinary' functions DefaultRuleset, TraceFlag, Performance, TF6533 The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions. https://support.microsoft.com/help/3107399 Database Windows Linux OnPremises SqlServer [11.0.6020, 11.0.6518) NOT: master model msdb tempdb
158 UntrustedConstraints definition TRUE Low Untrusted constraints Execute 'ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name>' statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity DefaultRuleset, Performance, DataIntegrity If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them. https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb
159 PercentAutogrows definition TRUE Low Database files have growth ratio in percentage Do not use "File Growth In Percent" for Autogrowth setting. Affected files: @{fileName} have growth ratio set in percentage DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options Database Windows Linux OnPremises SqlServer [11.0,) NOT: master model msdb tempdb
160 StatsUpdate definition TRUE Warning Low Statistics need to be updated Update stats in @{TableName} table to improve query performance DefaultRuleset, Performance, Statistics, QueryOptimizer The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics. https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics Database Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 500
161 AdHocQueriesOff definition TRUE Low Option 'ad hoc distributed queries' should be disabled Disable 'ad hoc distributed queries' option DefaultRuleset, Configuration, Security Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login. https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
162 AffinityMasksOverlap definition TRUE Low Affinity Mask and Affinity I/O Mask overlapping Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask} DefaultRuleset, Configuration, Performance Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states. https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap Server Windows Linux OnPremises SqlServer [11.0,)
163 AgentSvcAccNotRecommended definition TRUE Low 'SQL Server Agent' service uses non-recommended account Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not recommended DefaultRuleset, Configuration Running the 'SQL Server Agent' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
164 AgentSvcAccNotRecommended override False Warning Low Express
165 AgentSvcAccNotSupported definition TRUE Low 'SQL Server Agent' service uses not supported account Use another account to run 'SQL Server Agent' service. Current account '@{attr::service::SQLAgent.account}' is not supported DefaultRuleset, Configuration Running the 'SQL Server Agent' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
166 AgentSvcAccNotSupported override False Warning Low Express
167 AgentSvcAccSame definition TRUE Low 'SQL Server Agent' and 'SQL Server Database Engine' use same account Use different accounts for 'SQL Server Agent' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::SQLAgent.account}' account DefaultRuleset, Configuration Running the 'SQL Server Agent' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
168 AgentSvcAccSame override False Warning Low Express
169 AgentSvcStoped definition TRUE Low 'SQL Server Agent' service is stopped Run 'SQL Server Agent' service DefaultRuleset, Configuration The 'SQL Server Agent' service executes jobs, monitors SQL Servers, fires alerts and enables automation for some administrative tasks. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises SqlServer [11.0,)
170 AgentSvcStoped override False Warning Low Express
171 AutoSoftNUMAOn definition TRUE Low Auto Soft NUMA should be enabled Turn 'automatic soft-NUMA disabled' option on to avoid inefficient allocation of cores between NUMA nodes DefaultRuleset, Configuration, NUMA Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts. https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server Server Windows Linux OnPremises SqlServer [13.0,)
172 AzSqlVmSize definition TRUE Information VM size is not memory-optimized Use memory optimized virtual machine sizes for the best performance of SQL Server workloads DefaultRuleset, SqlOnVm, Azure, Performance Memory optimized VM sizes offer a high memory-to-CPU ratio that is great for relational database servers. The DSv2 11-15, Edsv4 series, the M-, and the Mv2- series offer the optimal memory-to-vCore ratio required for OLTP workloads. Both M series VMs offer the highest memory-to-vCore ratio required for mission critical workloads and is also ideal for data warehouse workloads. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices Server Windows AzureSQL AzureVm SqlServer [11.0,)
173 BlockingChains definition TRUE Low Blocking chains Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''} DefaultRuleset, Statistics Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource. https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql Database Windows Linux OnPremises SqlServer [11.0,) 5
174 BlockProcThreshNotRecommend definition TRUE Low Blocked process threshold is set to recommended value Increase or disable blocked process threshold option. Current value is @{block_threshold} DefaultRuleset, Configuration This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support. https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold Server Windows Linux OnPremises SqlServer [11.0,) 5
175 BrowserSvcAccSame definition TRUE Low 'SQL Server Browser' and 'SQL Server Database Engine' use same account Use different accounts for 'SQL Server Browser' and 'SQL Server Database Engine'. Now both services use '@{attr::service::SQLBrowser.account}' account DefaultRuleset, Configuration Running the 'SQL Server Browser' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
176 BrowserSvcStoped definition TRUE Low 'SQL Server Browser' service is stopped Run 'SQL Server Browser' service DefaultRuleset, Configuration The 'SQL Server Browser' service is a name resolution service that provides SQL Server connection information to client computers. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises SqlServer [11.0,)
177 CrossDBOwnershipOff definition TRUE Low Option 'cross db ownership chaining' should be disabled Disable 'cross db ownership chaining' option DefaultRuleset, Configuration, Security Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks. https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server Server Windows Linux OnPremises SqlServer [11.0,)
178 DefaultTraceOff definition TRUE Low Default trace is enabled Enable 'default trace enabled' option to get troubleshooting assistance DefaultRuleset, Configuration Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
179 DiskFragmentationAnalysis definition TRUE Low Disk fragmentation analysis Defragment volume '@{Output.Name}' with physical fragmentation DefaultRuleset, Configuration If you do not defragment your hard disk, the operating system may have to go to several physical locations on the disk to retrieve the database file, making file access slower. To get information about the fragmentation level, this check requires the destination SQL Server to be running under the sysadmin account. https://support.microsoft.com/help/3195161/defragmenting-sql-server-database-disk-drives Server Windows OnPremises SqlServer [11.0,)
180 DiskPartitionAlignment definition TRUE Low Disk Partition alignment Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset} DefaultRuleset, Performance, Storage Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist. https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100) Server Windows OnPremises SqlServer [11.0,) 65536
181 DtsSvcAccSame definition TRUE Low 'Integration Services' and 'SQL Server Database Engine' use same account Use different accounts for 'Integration Services' service and 'SQL Server Database Engine' service. Now both services use '@{attr::service::MsDtsServer.account}' account DefaultRuleset, Configuration Running the 'Integration Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
182 DtsSvcStoped definition TRUE Low 'Integration Services' service is stopped Run 'Integration Services' service DefaultRuleset, Configuration The 'Integration Services' service provides management support for Integration Services package storage and execution. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises SqlServer [11.0,)
183 ErrorLogSize definition TRUE Low Error log file size is too big Cycle error log files or revise error log settings. Current error log file size is more than @{threshold} MB. DefaultRuleset, Configuration, Performance Cycling error log files makes it easier to read the error log. https://docs.microsoft.com/sql/tools/configuration-manager/viewing-the-sql-server-error-log Server Windows Linux OnPremises SqlServer [11.0,) 50
184 FullTextServiceLoadOSResources definition TRUE Low Full-text search option 'load_os_resources' set to default Set full-text search option 'load_os_resources' to @{defaultLoadOSResources} DefaultRuleset, Configuration The full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1. Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
185 FullTextServiceVerifySignature definition TRUE Low Full-text search option 'verify_signature' set to default Set full-text search option 'load_os_resources' to @{defaultVerifySignature} Set full-text search option 'verify_signature' to @{defaultVerifySignature} DefaultRuleset, Configuration, Security The full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded. Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,)
186 FullTextSvcAccNotRecommended definition TRUE Low 'Full-text search' service uses non-recommended account Use another account to run 'Full-text search' service. Current account '@{attr::service::MSSQLFDLauncher.account}' is not recommended DefaultRuleset, Configuration Running the 'Full-text search' service under the 'NT AUTHORITY\SYSTEM' account is not recommended for security reasons. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
187 FullTextSvcAccSame definition TRUE Low 'Full-text search' and 'SQL Server Database Engine' use same account Use different accounts for the 'Full-text search' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSSQLFDLauncher.account}' account DefaultRuleset, Configuration Running the 'Full-text search' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
188 FullTextSvcStoped definition TRUE Low 'Full-text search' service is stopped Run 'Full-text search' service DefaultRuleset, Configuration The 'Full-text search' service quickly creates full-text indexes on content and properties of structured and semistructured data to provide document filtering and word-breaking for SQL Server. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises SqlServer [11.0,)
189 HPLogicalProcessor definition TRUE Low HP Logical Processor issue Update server BIOS to the latest version. It may be affected by the HP Logical Processor issue DefaultRuleset, Performance HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use. https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594 Server Windows OnPremises SqlServer [11.0,)
190 IndexCreateMemory definition TRUE Low 'index create memory' should be greater than 'min memory per query' Set 'index create memory' to 0 or make it greater than 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB. Current 'min memory per query' is @{min_memory_per_query} KB DefaultRuleset, Configuration, IndexCreateMemory The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
191 LightweightPoolingOn definition TRUE Low Lightweight pooling option disabled Disable 'lightweight pooling' option as fiber mode scheduling can decrease performance DefaultRuleset, Configuration, Performance The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode. https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
192 LocksOptionNotDefault definition TRUE Low Option 'locks' should be set to default Set 'locks' option to @{recommended_max_lock_number}. Current value is @{locks} DefaultRuleset, Configuration, Performance The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
193 MaxDOP1NUMA definition TRUE Low MAXDOP set in accordance with CPU count Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors} DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises SqlServer [11.0,)
194 MaxDopFewNumaLess16 definition TRUE Low MAXDOP set in accordance with CPU count Update MAXDOP configuration option value: @{max_dop}. It should not exceed the number of logical processors per NUMA node DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises SqlServer [13.0,)
195 MaxDopFewNumaOver16 definition TRUE Low MAXDOP set in accordance to CPU count Update MAXDOP configuration option value: @{max_dop}. It should be half the number of logical processors per NUMA node with maximum value of 16 DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises SqlServer [13.0,)
196 MaxDopFewNumaOver8 definition TRUE Medium MAXDOP set in accordance with CPU count Update MAXDOP configuration option value: @{max_dop}. It should be equal to 8 DefaultRuleset, MaxDOP, Performance, Configuration, NUMA, CPU The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately. https://support.microsoft.com/kb/2806535 Server Windows Linux OnPremises SqlServer [11.0, 13.0)
197 MaxMemory definition TRUE Low Max allowed memory Set 'max server memory' value to @{recommended:N0} MB or less to avoid detrimental memory pressure. Current 'max server memory' value is @{max_server_memory:N0}, which is greater than recommended DefaultRuleset, Memory, Performance, MaxMemory Setting the 'max server memory' value too high can cause a single instance of SQL Server to compete for memory with other SQL Server instances hosted on the same machine. However, setting this value too low could cause significant memory pressure and performance problems. https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 2147483647
198 MaxMemory override TRUE Warning Low Express 1410
199 MaxMemory override TRUE Warning Low Standard 131072
200 MaxMemorySystem definition TRUE Low Max server memory exceeds system memory Set 'max server memory' to @{recommended:N0} MB or less to avoid detrimental memory pressure. System memory of @{sysmem:N0} MB is not sufficient for current 'max server memory' setting of @{max_server_memory:N0} MB DefaultRuleset, Memory, Performance, MaxMemory Setting the 'max server memory' value higher than system memory can cause SQL Server to compete for memory with the operating system and processes running on the same machine. https://docs.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 2147483647
201 MaxMemorySystem override TRUE Warning Low Express 1410
202 MaxMemorySystem override TRUE Warning Low Standard 131072
203 MinMemoryPerQuery definition TRUE Low Option 'min memory per query' set to default Set 'min memory per query' option to @{recommended_min_memory_per_query} KB. Current value is '@{min_memory_per_query}' DefaultRuleset, Configuration, Memory, Performance The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
204 NetworkPacketSize definition TRUE Low Option 'network packet size' set to default Set 'network packet size' option to @{recommended_network_packet_size} bytes. Current value is @{network_packet_size} DefaultRuleset, Configuration, Network The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
205 NtfsBlockSizeNotFormatted definition TRUE Low NTFS block size in volumes with database files <> 64KB Set allocation unit size on volume '@{volume_mount_point}' to 64 KB. Current size is @{Output.BlockSize} bytes DefaultRuleset, Performance, Configuration, NTFS A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB. https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server Server Windows OnPremises SqlServer [11.0,)
206 NtfsBlockSizeNotFormatted override TRUE Medium AzureSQL AzureVm
207 OlapSvcAccSame definition TRUE Low 'Analysis Services' and 'SQL Server Database Engine' use same account Use different accounts for the 'Analysis Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::MSOLAP.account}' account DefaultRuleset, Configuration Running the 'Analysis Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
208 OlapSvcStoped definition TRUE Low 'Analysis Services' service is stopped Run 'Analysis Services' service DefaultRuleset, Configuration The 'Analysis Services' service provides online analytical processing (OLAP) and data mining functionality for business intelligence applications. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises SqlServer [11.0,)
209 OleAutomationProceduresOn definition TRUE Low Option 'Ole Automation Procedures' set to default Disable 'Ole Automation Procedures' option to avoid security risks DefaultRuleset, Configuration, Security Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value). https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
210 PageFileAutoManaged definition TRUE Low Page file is not automatically managed Avoid automatic management of page files. Set custom size for page file on drives: '@{PagingFiles.Drive}' DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth Server Windows @{not=AzureSQL} @{not=AzureVm} OnPremises SqlServer [11.0,)
211 PageFileAutoManagedAllDrives definition TRUE Low Page file is not automatically managed Disable 'Automatically manage paging file size for all drives' option DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth Server Windows OnPremises SqlServer [11.0,)
212 PageFileLess10FreeSpace definition TRUE Low Insufficient page file free space Revise page file settings. Less than 10% of page file is available DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized. https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size Server Windows Linux OnPremises SqlServer [11.0,) 0.1
213 PageFileNotConfigured definition TRUE Low Page file not configured Create page file on server DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized. https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size Server Windows OnPremises SqlServer [11.0,)
214 PageFileOut definition TRUE Low Memory paged out Revise LPIM settings. Part of SQL Server process memory has been paged out DefaultRuleset, Performance, Memory, PageFile, SysAdminReq Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the "Dynamic memory management" topic and the "Server memory options" topic in SQL Server Books Online. https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows Server Windows Linux OnPremises SqlServer [11.0,)
215 PowerPlanSchemeNotRecommended definition TRUE Medium Power plan is High Performance Switch server to High Performance power plan DefaultRuleset, Configuration, Performance In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan. However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution. https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan Server Windows OnPremises SqlServer [11.0,)
216 PriorityBoostOn definition TRUE High Option 'priority boost' set to default Set 'priority boost' option to default value DefaultRuleset, Configuration, Performance The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option Server Windows OnPremises SqlServer [11.0,)
217 QueryWaitNotDefault definition TRUE High Option 'query wait' set to default Set 'query wait' option to @{default_query_wait}. Current value is @{query_wait}. Increasing maximum wait time may increase amount of time to terminate queries DefaultRuleset, Configuration Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
218 RecoveryIntervalOn definition TRUE Low Option 'recovery interval' set to default Set 'recovery interval' option to @{default_recovery_interval}. Current value is @{recovery_interval} DefaultRuleset, Configuration, Performance The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
219 RemoteDacClusterOn definition TRUE Low Remote admin connections enabled on cluster (DAC) Enable 'remote admin connections' option DefaultRuleset, Configuration SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems. https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators Server Windows Linux OnPremises SqlServer [11.0,)
220 RemoteQueryTimeout definition TRUE Low Option 'remote query timeout' set to default Set 'remote query timeout' option to @{recommended_remote_query_timeout}. Current value is @{remote_query_timeout} DefaultRuleset, Configuration The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
221 RsSvcAccSame definition TRUE Low 'Reporting Services' and 'SQL Server Database Engine' use same account Use different accounts for 'Reporting Services' service and the 'SQL Server Database Engine' service. Now both services use '@{attr::service::ReportServer.account}' account DefaultRuleset, Configuration Running the 'Reporting Services' service under the same account as the 'SQL Server Database Engine' service is not recommended. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
222 RsSvcStoped definition TRUE Low 'Reporting Services' service is stopped Run 'Reporting Services' service DefaultRuleset, Configuration 'The Reporting Services' service manages, executes, creates, schedules and delivers reports. https://docs.microsoft.com/sql/database-engine/configure-windows/manage-the-database-engine-services Server Windows OnPremises SqlServer [11.0,)
223 ScanStartupProcs definition TRUE Low Option 'scan for startup procs' disabled on replication servers Disable 'scan for startup procs' option for servers that participate in replication DefaultRuleset, Configuration Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option Server Windows OnPremises SqlServer [11.0,)
224 SqlSvcAccNotRecommended definition TRUE Low 'SQL Server Database Engine' service uses non-recommended account Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not recommended DefaultRuleset, Configuration Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not recommended for security reasons. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
225 SqlSvcAccNotSupported definition TRUE Low 'SQL Server Database Engine' service uses not supported account Use another account to run 'SQL Server Database Engine' service. Current account '@{attr::service::MSSQL.account}' is not supported DefaultRuleset, Configuration Running the 'SQL Server Database Engine' service under 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\SYSTEM' or 'NT AUTHORITY\NETWORKSERVICE' accounts is not supported. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions Server Windows OnPremises SqlServer [11.0,)
226 ThreadExhaustionCPUBound definition TRUE Low Worker thread exhaustion on CPU-bound system Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}' DefaultRuleset, Performance Consider overall runnable tasks count and schedulers work queue count. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
227 ThreadExhaustionNotCPUBound definition TRUE Low Possible worker thread exhaustion on non-CPU-bound system Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}') DefaultRuleset, Performance Consider overall runnable tasks count and schedulers work queue count. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
228 ThresholdForParallelism definition TRUE Medium Option 'cost threshold for parallelism' set to default Set 'cost threshold for parallelism' option to @{default_cost_parallel}. Current value is @{cost_threshold_for_parallelism} DefaultRuleset, Configuration, Performance The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
229 WorkerThreadsLargeX64 definition TRUE Low Option 'max worker threads' set to recommended value on x64 system Reconfigure 'max worker threads' option parameter. Current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads}) DefaultRuleset, Configuration, Performance, CPU The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows OnPremises SqlServer [11.0,)
230 WorkerThreadsLargeX86 definition TRUE Low Option 'max worker threads' set to recommended value on x86 system Reconfigure 'max worker threads' option. Current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads}) DefaultRuleset, Configuration, Performance, CPU The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option Server Windows OnPremises SqlServer [11.0,)
231 XpCmdShellOn definition TRUE Low Option 'xp_cmdshell' is disabled Disable 'xp_cmdshell' as it exposes to security risks DefaultRuleset, Configuration The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option Server Windows Linux OnPremises SqlServer [11.0,)
232 AzDataDiskCache Affinity64IOMask definition TRUE High Information Azure disk caching for data files Non-default value for 'affinity64 I/O mask' option Set caching to 'ReadOnly' for disk @{name} (@{volume_mount_point}) as it is used for storing data files. Current setting: '@{caching}' Review non-default value @{affinity64_io_mask} for the 'affinity64 I/O mask' option DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration DefaultRuleset, Performance, Configuration Uncached IOPS and throughput plus Cached IOPS and throughput will yield the total possible performance available from the virtual machine within the VMs limits. The 'affinity64 I/O mask' binds SQL Server disk I/O to a specified subset of CPUs, similar to the 'affinity I/O mask' option. Use 'affinity I/O mask' to bind the first 32 processors, and use 'affinity64 I/O mask' to bind the remaining processors. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies https://docs.microsoft.com/sql/database-engine/configure-windows/affinity64-input-output-mask-server-configuration-option Database Server Windows Windows Linux AzureSQL OnPremises SqlServer [11.0,) NOT: tempdb
233 AzDataOnDataDisks Affinity64Mask definition TRUE Medium Low Data files on Azure data disks Non-default value for 'affinity64 mask' option Move data files from @{volume_mount_point} to Premium SSD data disk(s) Review non-default value @{affinity64_mask} for the 'affinity64 mask' option as it will be removed in a future version DefaultRuleset, DBFileConfiguration, DBConfiguration DefaultRuleset, Performance, Configuration Azure data disks can be configured for optimal data security and performance. The 'affinity64 mask' binds processors to specific threads, similar to the 'affinity mask' option. Use 'affinity mask' to bind the first 32 processors, and use 'affinity64 mask' to bind the remaining processors. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist https://docs.microsoft.com/sql/database-engine/configure-windows/affinity64-mask-server-configuration-option Database Server Windows Windows Linux AzureSQL OnPremises SqlServer [11.0,) NOT: tempdb
234 AffinityIOMask definition TRUE Information Non-default value for 'affinity I/O mask' option Review non-default value @{affinity_io_mask} for the 'affinity I/O mask' option DefaultRuleset, Performance, Configuration In a multi-processor system, the 'affinity I/O mask' option binds SQL Server disk I/O to a specified subset of CPUs. https://docs.microsoft.com/sql/database-engine/configure-windows/affinity-input-output-mask-server-configuration-option Server Windows Linux SqlServer [11.0,)
235 AffinityMask definition TRUE Low Non-default value for 'affinity mask' option Review non-default value @{affinity_mask} for the 'affinity64 mask' option as it will be removed in a future version DefaultRuleset, Performance, Configuration In a multi-processor system, the 'affinity mask' option is used to assign certain CPUs to an instance of SQL Server. When the 'affinity mask' is at its default value of 0, the instance of SQL Server can use all processors in the system for its threads. Setting the 'affinity mask' to a non-default value, restricts SQL Server to using only the assigned CPUs. https://docs.microsoft.com/sql/database-engine/configure-windows/affinity-mask-server-configuration-option Server Windows Linux SqlServer [11.0,)
236 AgentXPs definition TRUE Information Option 'Agent XPs' is disabled Enable 'Agent XPs' option DefaultRuleset, Configuration The 'Agent XPs' option enables the SQL Server Agent extended stored procedures. When this option is disabled, the SQL Server Agent node is not available in SQL Server Management Studio Object Explorer. https://docs.microsoft.com/sql/database-engine/configure-windows/agent-xps-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
237 AllowUpdates definition TRUE Low Non-default value for 'allow updates' option Review non-default value @{allow_updates} for the 'allow updates' option as it has no effect and will be removed in a future version DefaultRuleset, Performance, Configuration The 'allow updates' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
238 AutoStartProcs definition TRUE Low Automated execution of stored procedures is enabled Disable automated execution of stored procedures: @{sp_name} DefaultRuleset, Configuration, Security, Performance Automated execution of stored procedures during the SQL Server startup may delay the availability of the SQL Server instance during the startup procedure. It also introduces the risk of execution of unauthorized code. https://docs.microsoft.com/sql/relational-databases/stored-procedures/execute-a-stored-procedure#execute-stored-procedures-automatically Server Windows Linux SqlServer, ManagedInstance [11.0,)
239 AutoUpdateStatsAsync definition TRUE Information Option 'AUTO_UPDATE_STATISTICS_ASYNC' is enabled Disable 'AUTO_UPDATE_STATISTICS_ASYNC' option DefaultRuleset, Configuration The Query Optimizer could choose a suboptimal query plan if statistics are out-of-date when the query compiles. User database has AUTO_UPDATE_STATISTICS_ASYNC enabled on one or more user databases. https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-set-options#auto_update_statistics_async Database Windows Linux SqlServer, ManagedInstance [11.0,)
240 AzDataDiskCache definition TRUE High Azure disk caching for data files Set caching to 'ReadOnly' for disk @{name} (@{volume_mount_point}) as it is used for storing data files. Current setting: '@{caching}' DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Uncached IOPS and throughput plus Cached IOPS and throughput will yield the total possible performance available from the virtual machine within the VMs limits. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies Database Windows AzureVm SqlServer [11.0,) NOT: tempdb
241 AzDataOnDataDisks definition TRUE Medium Data files on Azure data disks Move data files from @{volume_mount_point} to Premium SSD data disk(s) DefaultRuleset, DBFileConfiguration, DBConfiguration Azure data disks can be configured for optimal data security and performance. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Database Windows AzureVm SqlServer [11.0,) NOT: tempdb
242 AzDataOnDataDisks override TRUE Low master model msdb
243 AzDbDefaultLocation definition TRUE Medium Database default locations Configure default @{setting_name} file location DefaultRuleset, Configuration, Performance Default database file location setting makes new data and transaction log files placed on drives configured for this specific workload. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureSQL AzureVm OnPremises SqlServer [11.0,)
244 AzDiskColumnCount definition TRUE Medium Storage spaces disk column count Use all @{poolDiskCount} physical disks of storage pool for virtual disk (@{volume_mount_point}). @{columnCount} physical disk(s) are used now. Use all @{poolDiskCount} physical disks available in your storage pool for virtual disk (@{volume_mount_point}), currently used: @{columnCount} physical disk(s) DefaultRuleset, DBFileConfiguration, DBConfiguration, Performance Increasing virtual disk column count improves the disk's performance. The number of disks in the pool is the maximum available number of columns. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureVm OnPremises SqlServer [11.0,)
245 AzErrorLogLocation definition TRUE Medium Error log and default trace files on Azure data disk Move error log and default trace files to data disk DefaultRuleset, Configuration, Performance Storing error log and default trace files on data disk improves performance. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureSQL AzureVm OnPremises SqlServer [11.0,)
246 AzPremSsdDataFiles definition TRUE High Use premium SSDs for SQL Server data files Move data files from @{volume_mount_point} to Premium SSD disk DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Standard HDDs and SSDs have varying latencies and bandwidth and are only recommended for dev/test workloads. Production workloads should use premium SSDs. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage Database Windows AzureSQL AzureVm OnPremises SqlServer [11.0,) NOT: tempDb
247 AzPremSsdDataFiles override TRUE Low master model msdb
248 AzTempDbFileLocation definition TRUE High Tempdb files on Azure temp drive Move tempdb files from @{volume_mount_point} to the local ephemeral SSD (temp disk) DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration Storing tempdb files on a local ephemeral SSD improves the performance of workloads that use temporary objects heavily (e.g. queries handling large recordsets, index rebuilds, row versioning isolation levels, temp tables, and triggers). https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Database Windows AzureSQL AzureVm OnPremises SqlServer [11.0,) tempdb
249 AzTranLogDiskCache definition TRUE High Azure disk caching for transaction logs Set caching to 'None' for disk @{name} (@{volume_mount_point}) as it is used for storing transaction log files. Current setting: '@{caching}' DefaultRuleset, Performance, DBFileConfiguration, DBConfiguration There is no performance benefit to enabling caching for the Transaction log disk, and in fact having either Read-only or Read/Write caching enabled on the log drive can decrease the amount of cache available for reads on the data drive https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage#data-file-caching-policies Database Windows AzureSQL AzureVm OnPremises SqlServer [11.0,) NOT: tempdb
250 InstantFileInitialization BackupTables definition TRUE High Information Instant file initialization (IFI) is disabled Too many rows in backup or restore history tables Enable instant file initialization Reduce number of rows in table '@{table_name}' to less than @{threshold} DefaultRuleset, DBConfiguration, Performance DefaultRuleset, Configuration Instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files. The upgrade process of a SQL Server instance may appear to hang if the number of rows in the following backup and restore system tables is very high: 'backupfile', 'backupmediafamily', 'backupmediaset', 'backupset', 'restorefile', 'restorefilegroup', 'restorehistory'. This is due to the fact that it would take longer to modify the backup and restore system tables in MSDB database. https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-delete-backuphistory-transact-sql Server Windows Windows Linux OnPremises SqlServer [11.0.7001,12.0) [12.0.5000, ) [11.0,) 10000
251 LockedPagesInMemory C2AuditMode definition TRUE High Information Lock pages in memory Non-default value for 'c2 audit mode' option Enable the 'Lock pages in memory' option Review non-default value @{c2_audit_mode} for the 'c2 audit mode' option as it will be removed in a future version DefaultRuleset, Performance, Memory DefaultRuleset, Configuration This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk. When enabled, the 'c2 audit mode' option collects all attempts to access statements and objects. Enabling this option triggers a significant amount of data collection over a short period of time for even moderately active Microsoft SQL Server instances. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist https://docs.microsoft.com/sql/database-engine/configure-windows/c2-audit-mode-server-configuration-option Server Windows Windows Linux AzureSQL OnPremises SqlServer, ManagedInstance [11.0,)
252 LockedPagesInMemory CCCompliance override definition TRUE Warning Information Non-default value for 'common criteria compliance enabled' option Review non-default value @{common_criteria_compliance_enabled} for the 'common criteria compliance enabled' option DefaultRuleset, Performance, Configuration SQL Server is being developed to achieve not only the best performance results but also to be the most secure database system ever released. Microsoft has the commitment to be compliant with the most important standards. The most recent SQL Server Editions are getting these recognitions, including the Common Criteria certification. Part of that commitment is the independent third-party evaluation of our products and in using the Common Criteria (CC, ISO15408) as a proven and accepted process to ensure compliance with Common Evaluation Methodologies. https://docs.microsoft.com/sql/database-engine/configure-windows/common-criteria-compliance-enabled-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.4001,) [11.0,)
253 PlansUseRatioNotOptimal ClrEnabled definition TRUE Information Cache needs to be cleared of single-use plans Non-default value for 'clr enabled' option Check if the plan cache needs to be cleared. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0}) Review non-default value @{clr_enabled} for the 'clr enabled' option DefaultRuleset, Performance, QueryOptimizer DefaultRuleset, Configuration Setting the 'Optimize for ad hoc workloads' option to 1 affects only new plans; plans that are already in the plan cache are unaffected. Make sure to check whether you need to clear the cache from the old single-use plans that may continue to remain. This option determines whether user assemblies and CLR functionality or objects can be used on a Microsoft SQL Server instance. Disable this option if you do not plan to use CLR database objects on the SQL Server instance. https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option https://docs.microsoft.com/sql/relational-databases/clr-integration/clr-integration-enabling Server Windows Linux OnPremises, ManagedInstance SqlServer, ManagedInstance [11.0,) 0.5
254 CompareRunConfigured definition TRUE Information Run and config values are different Use 'RECONFIGURE' after 'sp_configure' to update run value. Config value is different from run value in: @{unsaved_option} DefaultRuleset, Performance, Configuration SQL Server instance configuration settings have two values: a run value which is the currently active value and a config value which is the value that was last configured. Generally, these two values are the same, but if a setting has been changed but the change is not yet applied, confusion can arise for administrators and, in extreme cases, the system can become unstable. https://docs.microsoft.com/sql/relational-databases/system-catalog-views/sys-configurations-transact-sql Server Windows Linux SqlServer, ManagedInstance [11.0,)
255 ContainedDbAuthentication definition TRUE Information Non-default value for 'contained database authentication' option Review non-default value @{contained_database_authentication} for the 'contained database authentication' option DefaultRuleset, Configuration, Security When contained databases are enabled, database users other than members of the 'sysadmin' and 'securityadmin' fixed server roles can grant access to the instance of SQL Server. https://docs.microsoft.com/sql/database-engine/configure-windows/contained-database-authentication-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
256 CursorThreshold definition TRUE Information Non-default value for 'cursor threshold' option Review non-default value @{cursor_threshold} for the 'cursor threshold' option DefaultRuleset, Performance, Configuration When cursors generate keysets for a result set, the query optimizer estimates how many rows the keyset will contain. If the number is larger than this threshold, the keyset is generated asynchronously. The default value of -1 results in SQL Server generating all keysets asynchronously. If you set the value too low, overall performance may be impacted because small results sets are better built synchronously. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cursor-threshold-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
257 DatabaseMailXPs definition TRUE Information Non-default value for 'Database Mail XPs' option Review non-default value @{Database_Mail_XPs} for the 'Database Mail XPs' option DefaultRuleset, Configuration, Security Configuring the 'Database Mail XPs' option to 1 enables Database Mail on the instance of SQL Server. This configuration is off by default to reduce the attack surface area of SQL Server. Do not enable this functionality unless you intend to use Database Mail. https://docs.microsoft.com/sql/database-engine/configure-windows/database-mail-xps-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
258 DbCompression definition TRUE Information Uncompressed database tables and indexes Compress index: @{IndexName}, total space: @{TotalSpaceMB:N2} MB DefaultRuleset, Configuration, Performance The compression capability at either the row or page level provides an opportunity to save disk space and improve performance, with the tradeoff of requiring a bit more CPU to compress and decompress the data, but requiring less memory and disk access improving performance in many workloads. The data pages are kept compressed when they are uploaded to memory. This check fires if a relatively large amount of space is on indexes without compression (for example, more than 10GB). https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide Database Windows Linux SqlServer, ManagedInstance [11.0,) NOT: master model msdb tempdb 1280000
259 DbRecoveryModel definition TRUE Medium Databases with 'SIMPLE' recovery model Change recovery model to 'FULL' or 'BULK_LOGGED' DefaultRuleset, Configuration A database with the 'SIMPLE' recovery model does not support log backups. As a result, when you need to restore such a database, all the transactions since the last database backup or differential backup will be lost. Review databases that have the 'SIMPLE' recovery model. If the maximum amount of data loss involved is not acceptable, change the recovery model to 'FULL' or 'BULK_LOGGED' and schedule frequent log backups. https://docs.microsoft.com/sql/relational-databases/backup-restore/recovery-models-sql-server Database Windows Linux SqlServer [11.0,) NOT: model tempdb msdb master
260 DbSpaceAvailable definition TRUE Medium Low free space in data files Increase space for data files. Currently @{spaceAvailableRel:P0} is available. Threshold is set to @{threshold:P0}. Total size of data files: @{totalMB:N2} MB. Free space: @{freeMB:N2} MB DefaultRuleset, Configuration, DBFileConfiguration Average available space in data files is less than the threshold. https://docs.microsoft.com/sql/relational-databases/databases/database-states Database Windows Linux SqlServer, ManagedInstance [11.0,) 0.25
261 DbStandby definition TRUE Information STANDBY mode is enabled Disable STANDBY mode for database DefaultRuleset, Configuration A Database in STANDBY mode will be online as READ ONLY, WITH RESTORE LOG allowed. If recovery is not complete, then the availability of the database might be affected. Usually log shipped secondary databases are configured to be in STANDBY mode. https://docs.microsoft.com/sql/t-sql/statements/restore-statements-arguments-transact-sql#with-options Database Windows Linux SqlServer, ManagedInstance [11.0,)
262 EKMProvider definition TRUE Information Non-default value for 'EKM provider enabled' option Review non-default value @{EKM_provider_enabled} for the 'EKM provider enabled' option DefaultRuleset, Configuration The 'EKM provider enabled' option controls Extensible Key Management device support in SQL Server. SQL Server provides data encryption capabilities together with Extensible Key Management (EKM), using the Microsoft Cryptographic API (MSCAPI) provider for encryption and key generation. Encryption keys for data and key encryption are created in transient key containers, and they must be exported from a provider before they are stored in the database. This approach enables key management that includes an encryption key hierarchy and key backup, to be handled by SQL Server. https://docs.microsoft.com/sql/database-engine/configure-windows/ekm-provider-enabled-server-configuration-option Server Windows Linux Enterprise, ManagedInstance [11.0,)
263 FilestreamAccessLevel definition TRUE Information Non-default value for 'filestream access level' option Review non-default value @{filestream_access_level} for the 'filestream access level' option DefaultRuleset, Configuration The 'filestream access level' option controls the FILESTREAM access level for the instance of SQL Server. By default, this option is disabled, but should be enabled to allow FileStream access or to take advantage of the 'FileTable' feature. https://docs.microsoft.com/sql/database-engine/configure-windows/filestream-access-level-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
264 FillFactor definition TRUE Information Non-default value for 'fill factor' option Review non-default value @{fill_factor} for the 'fill factor' option DefaultRuleset, Performance, Configuration The 'fill factor' option controls the default fill factor that is used when a new index is created or rebuilt. The default value is 0, which means that the leaf level of the index will be filled with the highest possible number of rows. This option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server professional. https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-fill-factor-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
265 FtCrawlBandwidthMax definition TRUE Low Non-default value for 'ft crawl bandwidth (max)' option Review non-default value @{ft_crawl_bandwidth_max} for the 'ft crawl bandwidth (max)' option as it will be removed in a future version DefaultRuleset, Configuration The 'ft crawl bandwidth (max)' option determines the maximum number of buffers that will be maintained by the full-text memory manager in a small buffer pool. A high value will allocate more memory to the indexing process, therefore reducing the available memory for other SQL Server processes. https://docs.microsoft.com/sql/database-engine/configure-windows/ft-crawl-bandwidth-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
266 FtCrawlBandwidthMin definition TRUE Low Non-default value for 'ft crawl bandwidth (min)' option Review non-default value @{ft_crawl_bandwidth_min} for the 'ft crawl bandwidth (min)' option as it will be removed in a future version DefaultRuleset, Configuration The 'ft crawl bandwidth (min)' option determines the minimum number of buffers that must be maintained by the full-text memory manager in a small buffer pool. If the SQL Server memory manager requests memory, this minimum number of buffers will generally be maintained. https://docs.microsoft.com/sql/database-engine/configure-windows/ft-crawl-bandwidth-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
267 FtNotifyBandwidthMax definition TRUE Low Non-default value for 'ft notify bandwidth (max)' option Review non-default value @{ft_notify_bandwidth_max} for the 'ft notify bandwidth (max)' option as it will be removed in a future version DefaultRuleset, Configuration The 'ft notify bandwidth (max)' option determines the maximum number of buffers that will be maintained by the full-text memory manager in a large buffer pool. A high value will allocate more memory to the indexing process, therefore reducing the available memory for other SQL Server processes. https://docs.microsoft.com/sql/database-engine/configure-windows/ft-notify-bandwidth-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
268 FtNotifyBandwidthMin definition TRUE Low Non-default value for 'ft notify bandwidth (min)' option Review non-default value @{ft_notify_bandwidth_min} for the 'ft notify bandwidth (min)' option as it will be removed in a future version DefaultRuleset, Configuration The 'ft notify bandwidth (min)' option determines the minimum number of buffers that must be maintained by the full-text memory manager in a large buffer pool. If the SQL Server memory manager requests memory, this minimum number of buffers will generally be maintained. https://docs.microsoft.com/sql/database-engine/configure-windows/ft-notify-bandwidth-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
269 FullTextNoiseWords definition TRUE Information Non-default value for 'transform noise words' option Review non-default value @{transform_noise_words} for the 'transform noise words' option DefaultRuleset, Configuration If a query using a full-text search predicate contains a noise word (for example, is, the, and) and this configuration setting has been disabled, a warning will be issued and no rows from the query will be returned. The default setting for this option is 0, which indicates that it is off. Enabling this configuration by changing the default to 1 will force noise words to be replaced with an asterisk (*) in the query instead. https://docs.microsoft.com/sql/database-engine/configure-windows/transform-noise-words-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
270 FullTextPHTimeout definition TRUE Information Non-default value for 'PH timeout' option Set 'PH timeout' option to default DefaultRuleset, Configuration The 'PH timeout' option controls the number of seconds that the full-text protocol handler will wait to connect to a database before reaching the timeout threshold. You can increase the 'PH timeout' value when connection attempts are timing out due to temporary network issues. https://docs.microsoft.com/sql/database-engine/configure-windows/ph-timeout-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
271 InDoubtXactResolution definition TRUE Information Non-default value for 'in-doubt xact resolution' option Review non-default value @{in_doubt_xact_resolution} for the 'in-doubt xact resolution' option DefaultRuleset, Configuration The 'in-doubt xact resolution' option controls the default outcome of unresolved Microsoft Distributed Transaction Coordinator (MS DTC) transactions. The default value of 0 means that recovery will fail if MS DTC cannot resolve the in-doubt transactions. Before changing this default, you should consider the effect of your application distributed transactions and make sure that no data integrity issues will occur based on partially committed or aborted activity. https://docs.microsoft.com/sql/database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
272 InstantFileInitialization definition TRUE High Instant file initialization (IFI) is disabled Enable instant file initialization DefaultRuleset, DBConfiguration, Performance Instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files. https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization Server Windows SqlServer [11.0.7001,12.0) [12.0.5000, )
273 JdbcModuleVersion definition TRUE Medium JDBC Driver for SQL Server version is not supported Update JDBC Driver for SQL Server. Current product version @{file_version} of JDBC Driver for SQL Server is out of support DefaultRuleset, Performance, Security The JDBC Driver for SQL Server is a Type 4 Java Database Connectivity (JDBC) 4.2 compliant driver that provides robust data access to SQL Server, Azure SQL Database, and Azure SQL Managed Instance. Java connectivity support is continually improving. It is highly recommend to use the latest version of JDBC driver for SQL Server. https://docs.microsoft.com/sql/connect/jdbc/understanding-xa-transactions Server Windows Linux SqlServer [11.0,)
274 LockedPagesInMemory definition TRUE High Lock pages in memory Enable the 'Lock pages in memory' option DefaultRuleset, Performance, Memory This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk. https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist Server Windows AzureVm SqlServer [11.0,)
275 LockedPagesInMemory override TRUE Low [11.0.7001, 12.0) [12.0.6024, 13.0) [13.0.4001,)
276 MaxFTCrawlRange definition TRUE Information Non-default value for 'max full-text crawl range' option Review non-default value @{max_full_text_crawl_range} for the 'max full-text crawl range' option DefaultRuleset, Configuration The 'max full-text crawl range' option sets the number of partitions that SQL Server will use during a full-text index crawl. The default option is 4. However, you can increase this value if you want to optimize the crawl performance and you have sufficient CPU capacity. https://docs.microsoft.com/sql/database-engine/configure-windows/max-full-text-crawl-range-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
277 MaxTextReplSize definition TRUE Information Non-default value for 'max text repl size' option Review non-default value @{max_text_repl_size} for the 'max text repl size' option DefaultRuleset, Configuration The 'max text repl size' option sets the maximum bytes of varchar(max), nvarchar(max), varbinary(max), xml, image, text, and ntext data that can be replicated in a single INSERT, UPDATE, WRITETEXT, or UPDATETEXT operation. If your data modifications exceed this value on replicated columns, you must increase it. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-text-repl-size-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
278 MediaRetention definition TRUE Information Non-default value for 'media retention' option Review non-default value @{media_retention} for the 'media retention' option DefaultRuleset, Configuration, Backup The 'media retention' option sets the default length of time to retain a backup set for the Microsoft SQL Server instance. This default length of time protects the set from being overwritten until the specified number of days has elapsed. The default for this configuration is 0 days. However, you can modify it, based on your own corporate policies. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-media-retention-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
279 MemOptDBResPool definition TRUE Low In-Memory OLTP database without separate resource pool Bind In-Memory OLTP database to separate resource pool Memory, Performance, DefaultRuleset A databases with memory-optimized tables should be bound to a separate resource pool. https://docs.microsoft.com/sql/relational-databases/in-memory-oltp/bind-a-database-with-memory-optimized-tables-to-a-resource-pool#bkmk_DefineBinding Database SqlServer [12.0,)
280 OneDbPerPool definition TRUE Low One database per resource pool Check whether only one database is bound to resource pool @{pool_name} Memory, Performance, DefaultRuleset Only one database should be bound to a resource pool. https://docs.microsoft.com/sql/relational-databases/resource-governor/resource-governor-resource-pool Database SqlServer [12.0,)
281 OpenObjects definition TRUE Low Non-default value for 'open objects' option Review non-default value @{open_objects} for the 'open objects' option as it has no effect and will be removed in a future version DefaultRuleset, Performance, Configuration The 'open objects' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. https://docs.microsoft.com/sql/database-engine/configure-windows/open-objects-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
282 OsLoadedModules definition TRUE Low Third-party modules are loaded into SQL Server process address space Evaluate impact of loading '@{module}' module into SQL Server process address space DefaultRuleset, Performance, Security Certain modules and filter drivers can be loaded into a system that is running SQL Server. In this case, you may experience performance degradation and consistency issues of SQL Server Database Engine. https://docs.microsoft.com/troubleshoot/sql/performance/performance-consistency-issues-filter-drivers-modules Server Windows SqlServer [11.0,)
283 PlansUseRatioNotOptimal definition TRUE Information Cache needs to be cleared of single-use plans Check if the plan cache needs to be cleared. Current amount of single-use plans in cache is high (@{SingleUsePlansUseRatio:P0}) DefaultRuleset, Performance, QueryOptimizer Setting the 'Optimize for ad hoc workloads' option to 1 affects only new plans; plans that are already in the plan cache are unaffected. Make sure to check whether you need to clear the cache from the old single-use plans that may continue to remain. https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,) 0.5
284 PoolMemParamSet definition TRUE Low Set 'min_memory_percent' or 'max_memory_percent' parameters Set 'min_memory_percent' or 'max_memory_percent' for resource pool @{pool_name} Memory, Performance, DefaultRuleset A dedicated resource pool should have either 'min_memory_percent' parameter or 'max_memory_percent' parameter set explicitly. You should not let both parameters have default values at the same time. https://docs.microsoft.com/sql/relational-databases/in-memory-oltp/bind-a-database-with-memory-optimized-tables-to-a-resource-pool Database SqlServer [12.0,)
285 PrecomputeRank definition TRUE Low Non-default value for 'precompute rank' option Review non-default value @{precompute_rank} for the 'precompute rank' option as it has no effect and will be removed in a future version DefaultRuleset, Configuration The 'precompute rank' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. https://docs.microsoft.com/sql/database-engine/discontinued-database-engine-functionality-in-sql-server Server Windows Linux SqlServer, ManagedInstance [11.0,)
286 QueryGovernorCostLimit definition TRUE Information Non-default value for 'query governor cost limit' option Review non-default value @{query_governor_cost_limit} for the 'query governor cost limit' option DefaultRuleset, Performance, Configuration The 'query governor cost limit' option indicates the longest time period in seconds that a query can run. Queries with estimated run times longer than this will not run and will return an error. This can result in critical queries not running on your server. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-governor-cost-limit-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
287 RemoteDAC definition TRUE Low Non-default value for 'remote admin connections' option Review non-default value @{remote_admin_connections} for the 'remote admin connections' option DefaultRuleset, Security, Configuration The 'remote admin connections' option enables remote connections to the dedicated administrator connection (DAC) on a Microsoft SQL Server instance. By default, this option is disabled and allows only a local client connection to the DAC. Leave this option disabled if you want to restrict DAC access to only the local client on the stand-alone server. If your SQL Server instance is on a cluster or if you want to use the DAC connection remotely and for some troubleshooting scenarios, you should enable this option. https://docs.microsoft.com/sql/database-engine/configure-windows/remote-admin-connections-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
288 RemoteProcTrans definition TRUE Low Non-default value for 'remote proc trans' option Review non-default value @{remote_proc_trans} for the 'remote proc trans' option as it will be removed in a future version DefaultRuleset, Configuration The 'remote proc trans' option is used to protect the actions of a server-to-server procedure through a Microsoft Distributed Transaction Coordinator (MS DTC) transaction. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-proc-trans-server-configuration-option Server Windows SqlServer, ManagedInstance [11.0,)
289 ReplicationXPs definition TRUE Low Non-default value for 'Replication XPs' option Set 'Replication XPs' option to default. This option is for internal use only. DefaultRuleset, Configuration, Security The 'Replication XPs' option opens a significant attack surface area that can be used by an attacker to gather information about the system and potentially abuse the privileges of SQL Server. https://docs.microsoft.com/sql/database-engine/configure-windows/replication-xps-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
290 SMOAndDMOXPs definition TRUE Information Option 'SMO and DMO XPs' is disabled Enable 'SMO and DMO XPs' option DefaultRuleset, Configuration The 'SMO and DMO XPs' option determines whether SQL Server Management Objects (SMO) and SQL Server Distributed Management Objects (SQL-DMO) XPs are available. The default for this option is enabled to allow various tools and install packages, including SQL Server hotfixes, to work correctly. https://docs.microsoft.com/sql/database-engine/configure-windows/smo-and-dmo-xps-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
291 SysAdminDefaultDatabase definition TRUE Low Sysadmin logins use non-master default database Set sysadmin logins to use 'master' as default database DefaultRuleset, Configuration This check verifies whether your SQL Sever logins are members of the 'System Administrators' role that use a non-master default database. Sysadmin logins that use a non-master default database impose administrative risks in cases when user databases are dropped. Server Windows Linux SqlServer, ManagedInstance [11.0,)
292 TwoDigitYearCutoff definition TRUE Information Non-default value for 'two digit year cutoff' option Set 'two digit year cutoff' option to default DefaultRuleset, Configuration The 'two digit year cutoff' option is used to define the two digit year cutoff value when specifying two-digit years in place of four-digit years. Changing this to a non-default value could have unexpected results if the non-default value is inconsistent with other Microsoft SQL Server instances in your environment. This option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server professional. https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-two-digit-year-cutoff-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
293 UserConnections definition TRUE Information Non-default value for 'user connections' option Review non-default value @{user_connections} for the 'user connections' option DefaultRuleset, Performance, Configuration The 'user connections' option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server professional. Using the 'user connections' option helps avoid overloading the server with too many concurrent connections. You can estimate the number of connections based on system and user requirements. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-user-connections-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
294 UserOptions definition TRUE Information Non-default value for 'user options' option Review non-default value @{user_options} for the 'user options' option DefaultRuleset, Configuration The 'user options' option defines the user option defaults, such as ARITHABORT, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL. The bit positions in user options are identical to those in @@OPTIONS. Each connection has its own @@OPTIONS function, which represents the configuration environment. When logging in to Microsoft SQL Server, a user receives a default environment that assigns the current user options value to @@OPTIONS. Executing SET statements for user options affects the corresponding value in the session's @@OPTIONS function. All connections created after this setting is changed, receive the new value. https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-user-options-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)
295 WorkingSetSize definition TRUE Low Non-default value for 'set working set size' option Review non-default value @{set_working_set_size} for the 'set working set size' option as it has no effect and will be removed in a future version DefaultRuleset, Configuration The 'set working set size' option has no effect and will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. https://docs.microsoft.com/sql/database-engine/configure-windows/set-working-set-size-server-configuration-option Server Windows Linux SqlServer, ManagedInstance [11.0,)