ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics

此命令在单个数据库级别启用多个数据库配置设置。

重要

SQL Server或 Azure 服务的不同版本支持不同的 DATABASE SCOPED CONFIGURATION 选项。 此页面介绍所有DATABASE SCOPED CONFIGURATION选项。 其中指出了适用的版本。 确保使用你正在使用的服务版本中可用的语法。

Azure SQL 数据库、Azure SQL 托管实例和 SQL Server 中支持以下设置,如参数部分中每个设置的“适用范围”行所示:

  • 清除过程缓存。
  • 根据最适合特定工作负载的情况,将 MAXDOP 参数设置为主数据库的推荐值(1、2、…),并为报告查询使用的次要副本数据库设置不同的值。 有关如何选择 MAXDOP 的指导,请查看配置最大并行度服务器配置选项
  • 设置独立于数据库兼容级别的查询优化器基数估计模型。
  • 在数据库级别启用或禁用参数探查。
  • 在数据库级别启用或禁用查询优化修补程序。
  • 在数据库级别启用或禁用标识缓存。
  • 在第一次编译批处理时启用或禁用要存储在缓存中的已编译计划存根。
  • 启用或禁用对本机编译的 Transact-SQL 模块的执行统计信息收集。
  • 为支持 ONLINE = 语法的 DDL 语句启用或禁用默认联机选项。
  • 为支持 RESUMABLE = 语法的 DDL 语句启用或禁用默认可恢复选项。
  • 启用或禁用智能查询处理功能。
  • 启用或禁用加速计划强制实施。
  • 启用或禁用全局临时表的自动删除功能。
  • 启用或禁用轻型查询分析基础结构
  • 启用或禁用新的 String or binary data would be truncated 错误消息。
  • sys.dm_exec_query_plan_stats 中启用或禁用最后一个实际执行计划的收集。
  • 指定暂停的可恢复索引操作在数据库引擎自动中止之前暂停的分钟数。
  • 允许或禁止等待低优先级的锁以完成异步统计信息更新。
  • 启用或禁用将账本摘要上传到 Azure Blob 存储。

此设置仅在 Azure Synapse Analytics 中可用。

  • 设置用户数据库的兼容性级别

Transact-SQL 语法约定

语法

-- Syntax for SQL Server, Azure SQL Database and Azure SQL Managed Instance

ALTER DATABASE SCOPED CONFIGURATION
{
    { [ FOR SECONDARY] SET <set_options>}
}
| CLEAR PROCEDURE_CACHE [plan_handle]
| SET < set_options >
[;]

< set_options > ::=
{
    MAXDOP = { <value> | PRIMARY}
    | LEGACY_CARDINALITY_ESTIMATION = { ON | OFF | PRIMARY}
    | PARAMETER_SNIFFING = { ON | OFF | PRIMARY}
    | QUERY_OPTIMIZER_HOTFIXES = { ON | OFF | PRIMARY}
    | IDENTITY_CACHE = { ON | OFF }
    | INTERLEAVED_EXECUTION_TVF = { ON | OFF }
    | BATCH_MODE_MEMORY_GRANT_FEEDBACK = { ON | OFF }
    | BATCH_MODE_ADAPTIVE_JOINS = { ON | OFF }
    | TSQL_SCALAR_UDF_INLINING = { ON | OFF }
    | ELEVATE_ONLINE = { OFF | WHEN_SUPPORTED | FAIL_UNSUPPORTED }
    | ELEVATE_RESUMABLE = { OFF | WHEN_SUPPORTED | FAIL_UNSUPPORTED }
    | OPTIMIZE_FOR_AD_HOC_WORKLOADS = { ON | OFF }
    | XTP_PROCEDURE_EXECUTION_STATISTICS = { ON | OFF }
    | XTP_QUERY_EXECUTION_STATISTICS = { ON | OFF }
    | ROW_MODE_MEMORY_GRANT_FEEDBACK = { ON | OFF }
    | MEMORY_GRANT_FEEDBACK_PERCENTILE_GRANT = { ON | OFF }
    | MEMORY_GRANT_FEEDBACK_PERSISTENCE = { ON | OFF }
    | BATCH_MODE_ON_ROWSTORE = { ON | OFF }
    | DEFERRED_COMPILATION_TV = { ON | OFF }
    | ACCELERATED_PLAN_FORCING = { ON | OFF }
    | GLOBAL_TEMPORARY_TABLE_AUTO_DROP = { ON | OFF }
    | LIGHTWEIGHT_QUERY_PROFILING = { ON | OFF }
    | VERBOSE_TRUNCATION_WARNINGS = { ON | OFF }
    | LAST_QUERY_PLAN_STATS = { ON | OFF }
    | PAUSED_RESUMABLE_INDEX_ABORT_DURATION_MINUTES = <time>
    | ISOLATE_SECURITY_POLICY_CARDINALITY  = { ON | OFF }
    | EXEC_QUERY_STATS_FOR_SCALAR_FUNCTIONS = { ON | OFF }
    | ASYNC_STATS_UPDATE_WAIT_AT_LOW_PRIORITY = { ON | OFF }
    | OPTIMIZED_PLAN_FORCING = { ON | OFF }
    | DOP_FEEDBACK = { ON | OFF }
    | CE_FEEDBACK = { ON | OFF }
    | PARAMETER_SENSITIVE_PLAN_OPTIMIZATION = { ON | OFF }
    | LEDGER_DIGEST_STORAGE_ENDPOINT = { <endpoint URL string> | OFF }
    | OPTIMIZED_SP_EXECUTESQL = { ON | OFF }
}

重要

从 SQL Server 2019 (15.x) 开始,在 Azure SQL 数据库 和 Azure SQL 托管实例 中,某些选项名称已更改:

  • DISABLE_INTERLEAVED_EXECUTION_TVF 更改为 INTERLEAVED_EXECUTION_TVF
  • DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK 更改为 BATCH_MODE_MEMORY_GRANT_FEEDBACK
  • DISABLE_BATCH_MODE_ADAPTIVE_JOINS 更改为 BATCH_MODE_ADAPTIVE_JOINS
-- Syntax for Azure Synapse Analytics

ALTER DATABASE SCOPED CONFIGURATION
{
    SET <set_options>
}
[;]

< set_options > ::=
{
    DW_COMPATIBILITY_LEVEL = { AUTO | 10 | 20 | 30 | 40 | 50 | 9000 }
}

参数

FOR SECONDARY

指定辅助数据库的设置(所有辅助数据库必须具有相同的值)。

CLEAR PROCEDURE_CACHE [plan_handle]

清除数据库的过程(计划)缓存,可同时对主要和辅助数据库执行此操作。

指定查询计划句柄,以从计划缓存中清除单个查询计划。

适用范围:从 SQL Server 2019 (15.x) 开始,在 Azure SQL 数据库和 Azure SQL 托管实例中,可以指定查询计划句柄。

MAXDOP = {<value> | PRIMARY }

<value>

指定应用于该语句的默认最大并行度 (MAXDOP) 设置。 0 是默认值,表示将改用服务器配置。 数据库范围中的 MAXDOP 将替代(除非其设置为 0)在服务器级别设置的最大并行度sp_configure 查询提示仍然可以替代数据库作用域内 MAXDOP,以调整需要不同设置的特定查询。 所有这些设置都受为工作负荷组设置的 MAXDOP 限制。

你可以使用 MAXDOP 选项来限制执行并行计划时所用的处理器数量。 SQL Server 考虑为查询、索引数据定义语言 (DDL) 操作、并行插入、联机更改列、并行统计信息集合以及静态的和由键集驱动的游标填充实施并行执行计划。

注意

将按任务设置最大并行度 (MAXDOP) 限制。 它不是按请求限制或按查询限制。 这意味着,在并行查询期间,单个请求可以生成多个任务,然后将它们分配给计划程序。 有关详细信息,请参阅线程和任务体系结构指南

要在实例级别设置此选项,请参阅配置 max degree of parallelism 服务器配置选项

注意

在 Azure SQL 数据库中,新的单一数据库和弹性池数据库的 MAXDOP 数据库范围的配置默认设置为 8。 可以为每个数据库配置 MAXDOP,如当前文章中所述。 有关最佳配置 MAXDOP 的建议,请参阅其他资源部分。

提示

要在查询级别完成此操作,请使用 MAXDOP 查询提示
要在服务器级别完成此操作,请使用“最大并行度 (MAXDOP)”服务器配置选项
要在工作负荷级别完成此操作,请使用 MAX_DOP Resource Governor 工作负荷组配置选项

PRIMARY

仅可为辅助数据库(该数据库位于主数据库上)设置,表示其配置是为主数据库设置的配置。 如果主数据库的配置更改,辅助数据库上的值也会相应地更改,不需要再显式设置辅助数据库值。 PRIMARY 是辅助数据库的默认设置。

LEGACY_CARDINALITY_ESTIMATION = { ON | OFF | PRIMARY }

可用于独立于数据库兼容性级别将查询优化器基数估计模型设置为 SQL Server 2012 或更低版本。 默认值为 OFF,可根据数据库兼容性级别设置查询优化器基数估计模型。 将 LEGACY_CARDINALITY_ESTIMATION 设置为 ON 等效于启用跟踪标志 9481

提示

要在查询级别完成此操作,请添加 QUERYTRACEON 查询提示。 从 SQL Server 2016 (13.x) SP1 开始,若要在查询级别完成此操作,请添加 USE HINT 查询提示 ,而不是使用跟踪标志。

PRIMARY

此值仅对辅助数据库(该数据库位于主数据库上)有效,指定所有辅助数据库上的查询优化器基数估计模型设置都是为主数据库设置的值。 如果主数据库上查询优化器基数估计模型的配置发生更改,则辅助数据上的值也会相应地更改。 PRIMARY 是辅助数据库的默认设置。

PARAMETER_SNIFFING = { ON | OFF | PRIMARY }

启用或禁用参数截取。 默认值为 ON。 将 PARAMETER_SNIFFING 设置为 OFF 等效于启用跟踪标志 4136

提示

要在查询级别完成此操作,请参阅 OPTIMIZE FOR UNKNOWN 查询提示。 从 SQL Server 2016 (13.x) SP1 开始,若要在查询级别完成此操作, USE HINT 查询提示 也可用。

PRIMARY

此值仅对辅助数据库(该数据库位于主数据库上)有效,指定所有辅助数据库上此设置的值都是为主数据库设置的值。 如果主数据库上用于使用参数截取的配置更改,则辅助数据库上的值也会相应地更改,不需要再显式设置辅助数据库值。 PRIMARY 是辅助数据库的默认设置。

QUERY_OPTIMIZER_HOTFIXES = { ON | OFF | PRIMARY }

启用或禁用查询优化修补程序,而无论数据库兼容性级别。 默认值为 OFF,可禁用在为特定版本 (post-RTM) 引入可用度最高的兼容性级别后发布的查询优化修补程序。 将此值设置为 ON 等效于启用跟踪标志 4199

适用范围:SQL Server(SQL Server 2016 (13.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

提示

要在查询级别完成此操作,请添加 QUERYTRACEON 查询提示。 从 SQL Server 2016 (13.x) SP1 开始,要在查询级别完成此操作,请添加 USE HINT 查询提示,而不是使用跟踪标志。

PRIMARY

此值仅对辅助数据库(该数据库位于主数据库上)有效,指定所有辅助数据库上此设置的值都是为主数据库设置的值。 如果主数据库的配置更改,辅助数据库上的值也会相应地更改,不需要再显式设置辅助数据库值。 PRIMARY 是辅助数据库的默认设置。

IDENTITY_CACHE = { ON | OFF }

适用范围:SQL Server(SQL Server 2017 (14.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

在数据库级别启用或禁用标识缓存。 默认值为 ON。 标识缓存用于提高具有标识列的表的 INSERT 性能。 为了避免服务器意外重启或故障转移到辅助服务器时出现标识列值的差值,请禁用 IDENTITY_CACHE 选项。 该选项与现有跟踪标志 272 类似,但前者可在数据库级别设置,而不只是可在服务器级别设置。

注意

仅可为 PRIMARY 设置此选项。 有关详细信息,请参阅标识列

INTERLEAVED_EXECUTION_TVF = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许用户在数据库或语句范围内启用或禁用多语句表值函数的交错执行,同时将数据库兼容性级别维持在 140 或更高。 默认值为 ON。 交错执行是 Azure SQL 数据库 中自适应查询处理的一个功能。 有关详细信息,请参阅智能查询处理

注意

对于数据库兼容性级别 130 或更低级别,此数据库范围配置无效。

仅在 SQL Server 2017 (14.x) 中,选项 INTERLEAVED_EXECUTION_TVF 具有旧名称 DISABLE_INTERLEAVED_EXECUTION_TVF。

BATCH_MODE_MEMORY_GRANT_FEEDBACK = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许用户在数据库范围内启用或禁用批处理模式内存授予反馈,同时将数据库兼容级别维持在 140 或更高。 默认值为 ON。 SQL Server 2017 (14.x) 中引入的批处理模式内存授予反馈是智能查询处理功能套件的一部分。 有关详细信息,请参阅内存授予反馈

注意

对于数据库兼容性级别 130 或更低级别,此数据库范围配置无效。

BATCH_MODE_ADAPTIVE_JOINS = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许用户在数据库范围内启用或禁用批处理模式自适应联接,同时将数据库兼容性级别维持在 140 或更高。 默认值为 ON。 批处理模式自适应联接是 SQL Server 2017 (14.x) 中推出的智能查询处理的一个功能。

注意

对于数据库兼容性级别 130 或更低级别,此数据库范围配置无效。

TSQL_SCALAR_UDF_INLINING = { ON | OFF }

适用于:SQL Server(从 SQL Server 2019(15.x)开始)和Azure SQL 数据库(功能为预览版)

允许用户在数据库范围启用或禁用 T-SQL 标量 UDF 内联,同时将数据库兼容性级别维持在 150 或更高。 默认值为 ON。 T-SQL 标量 UDF 内联属于智能查询处理功能系列的一部分。

注意

对于数据库兼容级别 140 或更低级别,此数据库范围配置无效。

ELEVATE_ONLINE = { OFF | WHEN_SUPPORTED | FAIL_UNSUPPORTED }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许你选择选项,使引擎自动将支持的操作提升为联机。 默认值为 OFF,表示除非在语句中指定,否则操作不会提升为联机。 sys.database_scoped_configurations 反映 ELEVATE_ONLINE 的当前值。 这些选项只适用于支持联机的操作。

FAIL_UNSUPPORTED

此值可将所有支持的 DDL 操作提升为 ONLINE。 不支持联机执行的操作失败并引发错误。

注意

一般情况下,向表中添加列是一项联机操作。 在某些情况下(例如,当添加非可为空的列时),无法联机添加列。 在这些情况下,如果已设置 FAIL_UNSUPPORTED,操作将失败。

WHEN_SUPPORTED

此值可提升支持 ONLINE 的操作。 不支持联机的操作将脱机运行。

注意

通过提交指定了 ONLINE 选项的语句,可替代默认设置。

ELEVATE_RESUMABLE= { OFF | WHEN_SUPPORTED | FAIL_UNSUPPORTED }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许你选择选项,使引擎自动将支持的操作提升为可恢复。 默认值为 OFF,表示除非在语句中指定,否则操作不会提升为可恢复。 sys.database_scoped_configurations 反映 ELEVATE_RESUMABLE 的当前值。 这些选项只适用于支持可恢复的操作。

FAIL_UNSUPPORTED

此值可将所有支持的 DDL 操作提升为 RESUMABLE。 不支持可恢复执行的操作会失败并引发错误。

WHEN_SUPPORTED

此值可提升支持 RESUMABLE 的操作。 不支持可恢复的操作不可恢复运行。

注意

通过提交指定了 RESUMABLE 选项的语句,可替代默认设置。

OPTIMIZE_FOR_AD_HOC_WORKLOADS = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

第一次编译批处理时,启用或禁用要存储在缓存中的已编译计划存根。 默认为 OFF。 为数据库启用了数据库作用域内配置 OPTIMIZE_FOR_AD_HOC_WORKLOADS 后,已编译计划存根可在第一次编译批处理时存储在缓存中。 与完全编译的计划大小相比,计划存根的内存占用空间更小。 如果编译或再次执行批处理,则会删除已编译计划存根,并将其替换为完全编译的计划。

XTP_PROCEDURE_EXECUTION_STATISTICS = { ON | OFF }

适用范围:Azure SQL 数据库和 Azure SQL 托管实例

启用或禁用对当前数据库的本机编译的 T-SQL 模块在模块级别的执行统计信息收集。 默认为 OFF。 执行统计信息反映在 sys.dm_exec_procedure_stats 中。

如果该选项为“开”,或通过 sp_xtp_control_proc_exec_stats 启用了统计信息收集,则收集对本机编译的 T-SQL 模块的模块级别执行统计信息。

XTP_QUERY_EXECUTION_STATISTICS = { ON | OFF }

适用范围:Azure SQL 数据库和 Azure SQL 托管实例

启用或禁用对当前数据库的本机编译的 T-SQL 模块语句级别的执行统计信息收集。 默认为 OFF。 执行统计信息反映在 sys.dm_exec_query_stats查询存储中。

如果该选项为“开”,或通过 sp_xtp_control_query_exec_stats 启用了统计信息收集,则收集对本机编译的 T-SQL 模块的语句级别执行统计信息。

有关本机编译 Transact-SQL 模块的性能监视的详细信息,请参阅 “本机编译存储过程的监视性能”。

ROW_MODE_MEMORY_GRANT_FEEDBACK = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许用户在数据库范围内启用或禁用行模式内存授予反馈,同时将数据库兼容性级别维持在 150 或更高。 默认值为 ON。 行模式内存授予反馈是 SQL Server 2017 (14.x) 中推出的智能查询处理的一个功能。 行模式在 SQL Server 2019 (15.x) 和 Azure SQL 数据库中受支持。 有关内存授予反馈的详细信息,请参阅内存授予反馈

注意

对于数据库兼容级别 140 或更低级别,此数据库范围配置无效。

MEMORY_GRANT_FEEDBACK_PERCENTILE_GRANT = { ON | OFF }

适用于:SQL Server(从 SQL Server 2022 (16.x) 开始)和 Azure SQL 数据库

允许你为源自数据库的所有查询执行禁用内存授予反馈百分位数。 默认值为“启用”。 有关完整信息,请参阅百分位和持久性模式内存授予反馈

注意

对于数据库兼容级别 140 或更低级别,此数据库范围配置无效。

MEMORY_GRANT_FEEDBACK_PERSISTENCE = { ON | OFF }

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许你为源自数据库的所有查询执行禁用内存授予反馈持久性。 默认值为“启用”。 有关完整信息,请参阅百分位和持久性模式内存授予反馈

注意

对于数据库兼容级别 140 或更低级别,此数据库范围配置无效。

BATCH_MODE_ON_ROWSTORE = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许用户在数据库范围内的行存储上启用或禁用批处理模式,同时将数据库兼容性级别维持在 150 或更高。 默认值为 ON。 行存储上的批处理模式是智能查询处理功能系列中的一个功能。

注意

对于数据库兼容级别 140 或更低级别,此数据库范围配置无效。

DEFERRED_COMPILATION_TV = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许用户在数据库范围内启用或禁用表变量延迟编译,同时将数据库兼容性级别维持在 150 或更高。 默认值为 ON。 表变量延迟编译是智能查询处理功能系列中的一个功能。

注意

对于数据库兼容级别 140 或更低级别,此数据库范围配置无效。

ACCELERATED_PLAN_FORCING = { ON | OFF }

适用对象:SQL Server(从 SQL Server 2019 (15.x)开始)、Azure SQL 数据库 和 Azure SQL 托管实例

启用经过优化的查询计划强制实施机制,这适用于所有形式的计划强制实施,例如查询存储强制实施计划自动优化USE PLAN 查询提示。 默认值为 ON。

注意

不建议禁用加速计划强制实施。

GLOBAL_TEMPORARY_TABLE_AUTO_DROP = { ON | OFF }

适用范围:Azure SQL 数据库和 Azure SQL 托管实例

允许设置 全局临时表的自动删除功能。 默认值为“ON”,这意味着如果没有任何会话使用全局临时表,系统会自动删除该表。 设置为 OFF 时,需要使用语句显式删除 DROP TABLE 全局临时表,或者在服务器重启时自动删除。

  • 使用 Azure SQL 数据库 单一数据库和弹性池,可以在 SQL 数据库服务器的单个用户数据库中设置此选项。
  • 在 SQL Server 和 Azure SQL 托管实例中,此选项在 tempdb 中进行设置,且单个用户数据库的设置不起作用。

LIGHTWEIGHT_QUERY_PROFILING = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许启用或禁用轻型查询分析基础结构。 轻型查询分析基础结构 (LWP) 比标准分析机制更有效地提供查询性能数据,并且默认启用。 默认值为 ON。

VERBOSE_TRUNCATION_WARNINGS = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许启用或禁用新的 String or binary data would be truncated 错误消息。 默认值为 ON。 SQL Server 2019 (15.x) 针对此情况引入了更具体的新错误消息 (2628):

String or binary data would be truncated in table '%.*ls', column '%.*ls'. Truncated value: '%.*ls'.

在数据库兼容性级别 150 下设置为 ON 时,截断错误会引发新的错误消息 2628 以提供更多上下文并简化故障排除过程。

在数据库兼容性级别 150 下设置为 OFF 时,截断错误会引发先前的错误消息 8152。

对于数据库兼容性级别 140 或更低级别,错误消息 2628 仍然是要求启用跟踪标志 460 的“选择加入”错误消息,并且此数据库范围的配置无效。

LAST_QUERY_PLAN_STATS = { ON | OFF }

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许在 sys.dm_exec_query_plan_stats 中启用或禁用最后一个查询计划统计信息(相当于实际执行计划)的收集。 默认为 OFF

PAUSED_RESUMABLE_INDEX_ABORT_DURATION_MINUTES

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

PAUSED_RESUMABLE_INDEX_ABORT_DURATION_MINUTES 选项确定可恢复索引在被引擎自动中止之前暂停的时间(以分钟为单位)。

  • 默认值设置为 1 天(1440 分钟)
  • 最短持续时间设置为 1 分钟
  • 最长持续时间为 71,582 分钟
  • 当设置为 0 时,暂停的操作永远不会自动中止

此选项的当前值显示在 sys.database_scoped_configurations 中。

ISOLATE_SECURITY_POLICY_CARDINALITY = { ON | OFF}

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

允许你控制行级别安全性 (RLS) 谓词是否影响整个用户查询的执行计划的基数。 默认为 OFF。 如果 ISOLATE_SECURITY_POLICY_CARDINALITY 为 ON,则 RLS 谓词不会影响执行计划的基数。 例如,假设有一个包含一百万行和一个 RLS 谓词的表,该表将发出查询的特定用户的结果限制为 10 行。 将此数据库范围的配置设置为 OFF 时,此谓词的基数估计值为 10。 当此数据库范围的配置为 ON 时,查询优化估计为 100 万行。 建议对大多数工作负载使用默认值。

DW_COMPATIBILITY_LEVEL = { AUTO | 10 | 20 | 30 | 40 | 50 | 9000 }

适用范围:仅限 Azure Synapse Analytics

将 Transact-SQL 和查询处理行为设置为与指定的数据库引擎版本兼容。 设置后,当对该数据库执行查询时,只会执行兼容的功能。 在每个兼容性级别,支持各种查询处理增强功能。 每个级别都纳入了上一级别的功能。 首次创建数据库时,其兼容性级别默认设置为 AUTO,这也是建议的设置。 即使在数据库暂停/恢复、备份/还原操作之后,仍保留兼容性级别。 默认值为“AUTO”。

兼容级别 注释
AUTO 默认。 其值由 Synapse Analytics 引擎自动更新,并由 sys.database_scoped_configurations 中的 0 表示。 AUTO 当前映射到兼容级别 30 功能。
10 在引入兼容性级别支持之前,请练习 Transact-SQL 和查询引擎行为。
20 第一种兼容性级别,包括封闭 Transact-SQL 和查询引擎行为。 此级别支持系统存储过程 sp_describe_undeclared_parameters
30 包括新的查询引擎行为。
40 包括新的查询引擎行为。
50 此级别支持多列分布。 若要了解详细信息,请参阅CREATE TABLECREATE TABLE AS SELECTCREATE MATERIALIZED VIEW
9000 预览版兼容性级别。 特定于功能的文档中专门对此级别下的预览功能进行了说明。 此级别还包括非 9000 的最高级别的功能。

EXEC_QUERY_STATS_FOR_SCALAR_FUNCTIONS = { ON | OFF }

适用范围:Azure SQL 数据库和 Azure SQL 托管实例

允许你控制是否在 sys.dm_exec_function_stats 系统视图中显示标量用户定义函数 (UDF) 的执行统计信息。 对于标量为 UDF 密集型的一些密集型工作负荷,收集函数执行统计信息可能会导致明显的性能开销。 可以通过将 EXEC_QUERY_STATS_FOR_SCALAR_FUNCTIONS 数据库范围的配置设置为 OFF 来避免这种情况。 默认值为 ON。

ASYNC_STATS_UPDATE_WAIT_AT_LOW_PRIORITY = { ON | OFF }

适用范围:SQL Server(SQL Server 2022 (16.x) 及更高版本始)、Azure SQL 数据库和 Azure SQL 托管实例

如果启用了异步统计信息更新,则启用此配置会导致后台请求更新统计信息以等待 Sch-M 低优先级队列上的锁,以避免在高并发方案中阻止其他会话。 有关详细信息,请参阅 AUTO_UPDATE_STATISTICS_ASYNC。 默认为 OFF

OPTIMIZED_PLAN_FORCING = { ON | OFF }

适用于:SQL Server(从 SQL Server 2022 (16.x) 开始)和 Azure SQL 数据库

优化计划强制执行减少了重复强制查询的编译开销。 默认值为 ON。 生成查询执行计划后,将会存储特定编译步骤以作为优化重播脚本重复使用。 在查询存储中,优化重播脚本作为压缩的显示计划 XML 的一部分存储在隐藏属性 OptimizationReplay 中。 在使用查询存储优化计划强制中了解详细信息。

DOP_FEEDBACK = { ON | OFF }

适用于:SQL Server(从 SQL Server 2022 (16.x) 开始)和 Azure SQL 数据库

根据运行时间和等待标识重复查询的并行度低效率。 如果认为并行度使用率效率低下,DOP 反馈会降低下一次执行查询的 DOP,无论配置的 DOP 是什么,并验证它是否有帮助。 需要启用查询存储并处于 READ_WRITE 模式。 有关详细信息,请参阅并行度 (DOP) 反馈。 默认为 OFF

CE_FEEDBACK = { ON | OFF }

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

CE 反馈解决了使用默认 CE(CE120 或更高版本)时错误 CE 模型假设导致的被视为回归的问题,并且可以选择性地使用不同模型假设。 需要启用查询存储并处于 READ_WRITE 模式。 有关详细信息,请参阅基数估计 (CE) 反馈。 在数据库兼容级别 160 及更高级别中,默认值为 ON。

PARAMETER_SENSITIVE_PLAN_OPTIMIZATION = { ON | OFF }

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

参数敏感度计划 (PSP) 优化解决了参数化查询的单个缓存计划对于所有可能的传入参数值都不是最佳方案的情况。 这是数据分布不均匀的情况。 从数据库兼容级别 160 开始,默认值为 ON。 有关详细信息,请参阅参数敏感计划优化

LEDGER_DIGEST_STORAGE_ENDPOINT = { <endpoint URL string> | OFF }

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)

启用或禁用将账本摘要上传到 Azure Blob 存储。 若要启用上传账本摘要,请指定 Azure Blob 存储帐户的终结点。 若要禁用上传账本摘要,请将选项值设置为“OFF”。 默认为 OFF。

FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION = { ON | OFF }

适用范围:SQL Server(SQL Server 2022 (16.x) 及更高版本始)、Azure SQL 数据库和 Azure SQL 托管实例

当使用轻型查询执行统计信息分析基础结构或执行 sys.dm_exec_query_statistics_xml DMV,同时对长时间运行的查询进行故障排除时,会导致 SQL Server 生成带有 ParameterRuntimeValue 的 Showplan XML 片段。

重要

数据库 FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION 范围的配置选项不应在生产环境中持续启用,但仅用于时间限制的故障排除目的。 使用此数据库范围的配置选项将引入额外的和可能重要的 CPU 和内存开销,因为我们将创建带有运行时参数信息的 Showplan XML 片段,无论是 sys.dm_exec_query_statistics_xml 启用 DMV 还是轻型查询执行统计信息配置文件基础结构。

OPTIMIZED_SP_EXECUTESQL

适用于: Azure SQL 数据库

启用或禁用编译批处理时sp_executesql的编译序列化行为。 默认为 OFF。 允许使用sp_executesql序列化编译过程的批处理在频繁和同时编译利用sp_executesql系统存储过程的临时查询时减少编译风暴的影响非常有效。 sp_executesql的第一次执行将编译并将其编译的计划插入计划缓存中。 其他会话中止等待编译锁,并在计划可用后重复使用该计划。 这样,sp_executesql就可以像从编译角度的存储过程和触发器等对象一样行为。

权限

需要数据库上的 ALTER ANY DATABASE SCOPED CONFIGURATION。 用户若具有针对数据库的 CONTROL 权限,便可授予此权限。

备注

虽然可以为辅助数据库配置不同于主数据库的作用域内配置设置,但所有辅助数据库都使用相同的配置。 无法为各辅助数据库配置不同的设置。

执行此语句会清除当前数据库中的过程缓存,这意味着需要重新编译所有查询。

对于三部分名称查询,除了在另一个数据库上下文中编译的 SQL 模块(如过程、函数和触发器)之外,还遵循查询的当前数据库连接设置,因此使用它们所在的数据库的选项。 同样,异步更新统计信息时,会遵循统计信息所在的数据库的设置 ASYNC_STATS_UPDATE_WAIT_AT_LOW_PRIORITY

ALTER_DATABASE_SCOPED_CONFIGURATION 事件添加为可用于触发 DDL 触发器的 DDL 事件,并且是 ALTER_DATABASE_EVENTS 触发器组的子元素。

还原或附加给定数据库时,数据库范围的配置设置将进行传递并保留在数据库上。

从 SQL Server 2019 (15.x) 开始,在 Azure SQL 数据库 和 Azure SQL 托管实例 中,某些选项名称已更改:

  • DISABLE_INTERLEAVED_EXECUTION_TVF 更改为 INTERLEAVED_EXECUTION_TVF
  • DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK 更改为 BATCH_MODE_MEMORY_GRANT_FEEDBACK
  • DISABLE_BATCH_MODE_ADAPTIVE_JOINS 更改为 BATCH_MODE_ADAPTIVE_JOINS

限制

MAXDOP

精细设置可以替代全局设置,而资源调控器可以限制所有其他 MAXDOP 设置。 MAXDOP 设置的逻辑如下:

  • 查询提示替代 sp_configure 和数据库作用域内配置。 如果为工作负荷组设置了资源组 MAXDOP:

    • 如果查询提示设置为零 (0),则其会由资源调控器设置替代。

    • 如果查询提示未设置为零 (0),则其会受资源调控器设置限制。

  • 如果不存在受资源调控器设置限制的查询提示,则数据库作用域内配置(除非为零)会替代 sp_configure 设置。

  • sp_configure 设置由资源调控器设置替代。

QUERY_OPTIMIZER_HOTFIXES

QUERYTRACEON 提示用于通过 SQL Server 2012 (11.x) 版本或查询优化器修补程序启用 SQL Server 7.0 的默认查询优化器时,会成为查询提示和数据库范围配置设置之间的 OR 条件,也就是说,如果启用了两者中任意一个,都会应用数据库作用域内配置。

异地灾难恢复

可读的辅助数据库(Always On 可用性组、Azure SQL 数据库 和 Azure SQL 托管实例 异地复制数据库),通过检查数据库的状态来使用辅助值。 尽管重新编译不会在故障转移时发生,且从技术上讲,新的主数据库具有使用辅助数据库设置的查询,但是,主数据库和辅助数据库的设置仅在工作负荷不同时才有所相同,因此已缓存查询使用的是最佳设置,而新查询选择适合它们的新设置。

DacFx

由于 ALTER DATABASE SCOPED CONFIGURATION 是 Azure SQL 数据库、Azure SQL 托管实例 和 SQL Server(从 SQL Server 2016 (13.x) 开始)中的新功能,可影响数据库模式,因此架构的导出(有数据或没有数据)无法导入 SQL Server 的旧版本(如 SQL Server 2012 (11.x) 或 SQL Server 2014 (12.x))。 例如,从使用新功能的 SQL 数据库 或 SQL Server 2016 (13.x) 数据库到 DACPACBACPAC 的导出无法导入到下级服务器。

ELEVATE_ONLINE

此选项仅适用于支持 WITH (ONLINE = <syntax>) 的 DDL 语句。 XML 索引不受影响。

ELEVATE_RESUMABLE

此选项仅适用于支持 WITH (RESUMABLE = <syntax>) 的 DDL 语句。 XML 索引不受影响。

元数据

sys.database_scoped_configurations (Transact-SQL) 系统视图提供有关数据库作用域内配置的信息。 数据库作用域内配置选项仅在 sys.database_scoped_configurations 中显示,因为它们是服务器范围内默认设置的替代项。 sys.configurations (Transact-SQL) 系统视图仅显示服务器范围内的设置。

示例

以下示例演示 ALTER DATABASE SCOPED CONFIGURATION 的用法

A. 授予权限

本示例为用户 Joe 授予执行 ALTER DATABASE SCOPED CONFIGURATION 所需的权限。

GRANT ALTER ANY DATABASE SCOPED CONFIGURATION to [Joe] ;

B. 设置 MAXDOP

本示例在异地复制方案中为主数据库设置 MAXDOP = 1,为辅助数据库设置 MAXDOP = 4。

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1 ;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = 4 ;

本示例在异地复制方案中为辅助数据库设置与其主数据库相同的 MAXDOP。

ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY ;

C. 设置 LEGACY_CARDINALITY_ESTIMATION

本示例在异地复制方案中为辅助数据库将 LEGACY_CARDINALITY_ESTIMATION 设置为 ON。

ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = ON ;

本示例在异地复制方案中为辅助数据库设置与其主数据库相同的 LEGACY_CARDINALITY_ESTIMATION。

ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY ;

D. 设置 PARAMETER_SNIFFING

本示例在异地复制方案中为主数据库将 PARAMETER_SNIFFING 设置为 OFF。

ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = OFF ;

此示例在异地复制方案中为辅助数据库将 PARAMETER_SNIFFING 设置为 OFF。

ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = OFF ;

本示例在异地复制方案中为辅助数据库设置与其主数据库相同的 PARAMETER_SNIFFING。

ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY ;

E. 设置 QUERY_OPTIMIZER_HOTFIXES

在异地复制方案中为主数据库将 QUERY_OPTIMIZER_HOTFIXES 设置为 ON。

ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON ;

F. 清除过程缓存

本示例清除了过程缓存(仅可用于主数据库)。

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

G. 设置 IDENTITY_CACHE

适用范围:SQL Server(SQL Server 2017 (14.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

本示例禁用了标识缓存。

ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF ;

H. 设置 OPTIMIZE_FOR_AD_HOC_WORKLOADS

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

本示例可在第一次编译批处理时启用要存储在缓存中的已编译计划存根。

ALTER DATABASE SCOPED CONFIGURATION SET OPTIMIZE_FOR_AD_HOC_WORKLOADS = ON;

I. 设置 ELEVATE_ONLINE

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

此示例将 ELEVATE_ONLINE 设置为 FAIL_UNSUPPORTED。

ALTER DATABASE SCOPED CONFIGURATION SET ELEVATE_ONLINE = FAIL_UNSUPPORTED ;

J. 设置 ELEVATE_RESUMABLE

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

此示例将 ELEVATE_RESUMABLE 设置为 WHEN_SUPPORTED。

ALTER DATABASE SCOPED CONFIGURATION SET ELEVATE_RESUMABLE = WHEN_SUPPORTED ;

K. 从计划缓存中清除查询计划

适用范围:SQL Server(SQL Server 2019 (15.x) 及更高版本)、Azure SQL 数据库和 Azure SQL 托管实例

此示例从过程缓存中清除特定计划

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE 0x06000500F443610F003B7CD12C02000001000000000000000000000000000000000000000000000000000000;

L. 设置暂停的持续时间

适用范围:Azure SQL 数据库和 Azure SQL 托管实例

此示例将可恢复索引暂停持续时间设置为 60 分钟。

ALTER DATABASE SCOPED CONFIGURATION
SET PAUSED_RESUMABLE_INDEX_ABORT_DURATION_MINUTES = 60

M. 启用和禁用上传账本摘要

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)

此示例会启用上传账本摘要并将其上传到 Azure 存储帐户。

ALTER DATABASE SCOPED CONFIGURATION
SET LEDGER_DIGEST_STORAGE_ENDPOINT = 'https://mystorage.blob.core.windows.net'

此示例禁用上传账本摘要。

ALTER DATABASE SCOPED CONFIGURATION
SET LEDGER_DIGEST_STORAGE_ENDPOINT = OFF

其他资源

MAXDOP 资源

LEGACY_CARDINALITY_ESTIMATION 资源

PARAMETER_SNIFFING 资源

QUERY_OPTIMIZER_HOTFIXES 资源

ELEVATE_ONLINE 资源

联机索引操作准则

ELEVATE_RESUMABLE 资源

联机索引操作准则