ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)

適用於: SQL Server 2016 (13.x) 以上版本 Azure SQL DatabaseAzure SQL 受控執行個體Azure Synapse Analytics

此命令可以在個別資料庫層級設定幾項資料庫設定。

重要

不同版本的 SQL Server 或 Azure 服務支援不同的 DATABASE SCOPED CONFIGURATION 選項。 此頁面描述所有DATABASE SCOPED CONFIGURATION 選項。 已指出適用的版本。 請務必採用您所使用服務版本提供的語法。

Azure SQL Database、Azure SQL 受控執行個體和 SQL Server 支援下列設定,如引數一節各項設定的適用於一行所述:

  • 清除程序快取。
  • 根據最適合該特定工作負載的設定,將主要資料庫的 MAXDOP 參數設為建議的值 (1、2、...),並為報告查詢所使用的次要複本資料庫設定其他的值。 如需選擇 MAXDOP 的相關指導,請檢閱設定 max degree of parallelism 伺服器組態選項
  • 將與資料庫無關的查詢最佳化工具基數估計模型設定為相容性層級。
  • 在資料庫層級啟用或停用參數探測。
  • 在資料庫層級啟用或停用查詢最佳化。
  • 在資料庫層級啟用或停用識別快取。
  • 允許或不允許在第一次編譯批次時,將已編譯的計劃虛設常式儲存在快取中。
  • 啟用或停用原生編譯 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

-- 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 }
}

重要

從 SQL Server 2019 (15.x) 開始,Azure SQL Database 和 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 Database 和 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 Database 中,新的單一和彈性集區資料庫的 MAXDOP 資料庫範圍設定預設為 8。 您可以為每個資料庫設定 MAXDOP,如本文中所述。 如需設定 MAXDOP 的最佳建議,請參閱其他資源一節。

提示

若要在查詢層級完成此操作,請使用 MAXDOP查詢提示
若要在伺服器層級完成此操作,請使用平行處理原則的最大程度 (MAXDOP)伺服器組態選項
若要在工作負載層級完成此操作,請使用 MAX_DOPResource 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 }

啟用或停用查詢最佳化 Hotfix,而不管資料庫的相容性層級為何。 預設值為 OFF,這會停用在針對特定版本導入最高可用相容性層級之後 (RTM 後) 發行的查詢最佳化 Hotfix。 將此值設定為 ON 相當於啟用追蹤旗標 4199

適用於:SQL Server (從 SQL Server 2016 (13.x) 開始)、Azure SQL Database 和 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 Database 和 Azure SQL 受控執行個體

在資料庫層級啟用或停用識別快取。 預設值為 ON。 識別快取可用來改善含有識別資料行之資料表上的 INSERT 效能。 若要避免因伺服器意外重新啟動或容錯移轉至次要伺服器,而導致識別資料行值不連貫,請停用 IDENTITY_CACHE 選項。 此選項類似於現有的追蹤旗標 272差異在於此選項可以在資料庫層級設定,而不僅止於在伺服器層級設定。

注意

只能針對 PRIMARY 設定此選項。 如需詳細資訊,請參閱識別資料行

INTERLEAVED_EXECUTION_TVF = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

可讓您在資料庫或陳述式範圍啟用或停用多重陳述式資料表值函式的交錯執行,同時仍保有 140 (含) 以上的資料庫相容性層級。 預設值為 ON。 交錯執行是 Azure SQL Database 中自適性查詢處理作業的一項功能。 如需詳細資訊,請參閱智慧查詢處理

注意

針對資料庫相容性層級 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 Database 和 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 Database 和 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 Database 和 Azure SQL 受控執行個體

可讓您選取選項,讓引擎自動將支援的作業提升至線上。 預設為 OFF,這表示除非在陳述式中指定,否則不會將作業提升至線上。 sys.database_scoped_configurations 會反映 ELEVATE_ONLINE 目前的值。 這些選項將僅適用於線上支援的作業。

FAIL_UNSUPPORTED

此值會將所有支援的 DLL 作業提升至 ONLINE。 不支援在線執行的作業失敗,並擲回錯誤。

注意

一般情況下,在資料表中加入資料行是線上作業。 在某些情況下,例如新增不可為 Null 的資料行時,則無法線上新增資料行。 在這些情況下,如果設定 FAIL_UNSUPPORTED,作業就會執行失敗。

WHEN_SUPPORTED

此值會提升支援 ONLINE 的作業。 不支援線上的作業將離線執行。

注意

您可以在指定 ONLINE 選項的情形下提交陳述式,進而覆寫預設設定。

ELEVATE_RESUMABLE= { OFF | WHEN_SUPPORTED | FAIL_UNSUPPORTED }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

可讓您選取選項,讓引擎自動將支援的作業提升至可繼續。 預設為 OFF,這表示除非在陳述式中指定,否則不會將作業提升至可繼續。 sys.database_scoped_configurations 會反映 ELEVATE_RESUMABLE 目前的值。 這些選項僅適用於可繼續支援的作業。

FAIL_UNSUPPORTED

此值會將所有支援的 DLL 作業提升至 RESUMABLE。 不支援繼續執行的作業會執行失敗,並擲回錯誤。

WHEN_SUPPORTED

此值會提升支援 RESUMABLE 的作業。 不支援繼續的作業無法繼續執行。

注意

您可以在指定 RESUMABLE 選項的情形下提交陳述式,進而覆寫預設設定。

OPTIMIZE_FOR_AD_HOC_WORKLOADS = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

允許或不允許在第一次編譯批次時,將已編譯的計劃虛設常式儲存在快取中。 預設值為 OFF。 針對資料庫啟用 OPTIMIZE_FOR_AD_HOC_WORKLOADS 資料庫範圍組態之後,在第一次編譯批次時,就會將已編譯的計劃虛設常式儲存在快取中。 與完整的已編譯計劃大小相比,計劃虛設常式的記憶體耗用量較少。 如果再次編譯或執行某個批次,就會移除已編譯的計劃虛設常式,並以完整的已編譯計劃取代。

XTP_PROCEDURE_EXECUTION_STATISTICS = { ON | OFF }

適用於:Azure SQL Database 與 Azure SQL 受控執行個體

在目前的資料庫上啟用或停用原生編譯 T-SQL 模組的模組層級執行統計資料收集。 預設值為 OFF。 執行統計資料會反映在 sys.dm_exec_procedure_stats

如果這個選項是 ON,或已透過 sp_xtp_control_proc_exec_stats 啟用統計資料收集,則會收集原生編譯 T-SQL 模組的模組層級執行統計資料。

XTP_QUERY_EXECUTION_STATISTICS = { ON | OFF }

適用於:Azure SQL Database 與 Azure SQL 受控執行個體

在目前的資料庫上啟用或停用原生編譯 T-SQL 模組的陳述式層級執行統計資料收集。 預設值為 OFF。 執行統計資料會反映在 sys.dm_exec_query_stats查詢存放區

如果這個選項是 ON,或已透過 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 Database 和 Azure SQL 受控執行個體

可讓您在資料庫範圍啟用或停用資料列模式記憶體授與回饋,同時仍保有 150 (含) 以上的資料庫相容性層級。 預設值為 ON。 批次模式記憶體授與意見反應於 SQL Server 2017 (14.x) 首度推出,是智慧查詢處理的其中一項功能。 SQL Server 2019 (15.x) 和 Azure SQL Database 支援資料列模式。 如需記憶體授與意見反應的詳細資訊,請參閱記憶體授與意見反應

注意

針對資料庫相容性層級 140 (含) 以下,這個資料庫範圍設定沒有任何作用。

MEMORY_GRANT_FEEDBACK_PERCENTILE_GRANT = { ON |OFF }

適用於:SQL Server (版本 SQL Server 2022 (16.x) 起) 與 Azure SQL Database

可讓您針對源自資料庫的所有查詢執行作業,停用記憶體授與意見反應百分位數。 預設值為 [ON]。 如需完整資訊,請參閱百分位數和持續性模式記憶體授與意見反應

注意

針對資料庫相容性層級 140 (含) 以下,這個資料庫範圍設定沒有任何作用。

MEMORY_GRANT_FEEDBACK_PERSISTENCE = { ON | OFF }

適用於:SQL Server (版本 SQL Server 2022 (16.x) 起) 與 Azure SQL Database

可讓您針對源自資料庫的所有查詢執行作業,停用記憶體授與意見反應持續性。 預設值為 [ON]。 如需完整資訊,請參閱百分位數和持續性模式記憶體授與意見反應

注意

針對資料庫相容性層級 140 (含) 以下,這個資料庫範圍設定沒有任何作用。

BATCH_MODE_ON_ROWSTORE = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

可讓您在資料庫範圍啟用或停用資料列存放區上的批次模式,同時仍保有 150 (含) 以上的資料庫相容性層級。 預設值為 ON。 資料列存放區上的批次模式是智慧查詢處理功能系列的其中一項功能。

注意

針對資料庫相容性層級 140 (含) 以下,這個資料庫範圍設定沒有任何作用。

DEFERRED_COMPILATION_TV = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

可讓您在資料庫範圍啟用或停用資料表變數延遲編譯,同時仍保有 150 (含) 以上的資料庫相容性層級。 預設值為 ON。 資料表變數延遲編譯是智慧查詢處理功能系列的其中一項功能。

注意

針對資料庫相容性層級 140 (含) 以下,這個資料庫範圍設定沒有任何作用。

ACCELERATED_PLAN_FORCING = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

針對強制執行查詢計劃啟用最佳化機制,適用於所有形式的強制執行計劃,例如查詢存放區強制執行計劃自動調整使用計劃查詢提示。 預設值為 ON

注意

不建議停用加速強制執行計劃。

GLOBAL_TEMPORARY_TABLE_AUTO_DROP = { ON | OFF }

適用於:Azure SQL Database 與 Azure SQL 受控執行個體

允許設定全域臨時表自動刪除功能。 預設值為 [ON],表示沒有任何工作階段使用全域暫存資料表時,資料表會自動卸除。 當設定為 OFF 時,必須使用 語句明確卸 DROP TABLE 除全域臨時表,或在伺服器重新啟動時自動卸除。

  • 如果使用 Azure SQL Database 單一資料庫和彈性集區,您可以在 SQL Database 伺服器的個別使用者資料庫中設定此選項。
  • 在 SQL Server 及 Azure SQL 受控執行個體中,此選項需要在 tempdb 中設定,個別使用者資料庫的設定不會有任何效果。

LIGHTWEIGHT_QUERY_PROFILING = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

可讓您啟用或停用輕量型查詢分析基礎結構。 輕量型查詢分析基礎結構 (LWP) 提供比標準分析機制更具效率的查詢效能資料,預設會予以啟用。 預設值為 ON

VERBOSE_TRUNCATION_WARNINGS = { ON | OFF }

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 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 Database 和 Azure SQL 受控執行個體

可讓您啟用或停用 sys.dm_exec_query_plan_stats 中最後一個查詢計劃統計資料 (相當於實際執行計畫) 的集合。 預設值為 OFF

PAUSED_RESUMABLE_INDEX_ABORT_DURATION_MINUTES

適用於:SQL Server (從 SQL Server 2022 (16.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

PAUSED_RESUMABLE_INDEX_ABORT_DURATION_MINUTES 選項會決定可繼續索引在被引擎自動中止之前,其暫停的時間 (以分鐘為單位)。

  • 預設值設定為 1 天 (1,440 分鐘)
  • 最小持續時間設定為 1 分鐘
  • 持續時間上限為 71,582 分鐘
  • 當設定為 0 時,暫停的作業永遠不會自動中止

此選項目前的值會顯示於 sys.database_scoped_configurations

ISOLATE_SECURITY_POLICY_CARDINALITY = { ON | OFF}

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

可讓您控制資料列層級安全性 (RLS) 述詞是否會影響整體使用者查詢的執行計畫基數。 預設值為 OFF。 當 ISOLATE_SECURITY_POLICY_CARDINALITY 為 ON 時,RLS 述詞不會影響執行計畫的基數。 例如,假設某資料表包含 1 百萬個資料列以及一個 RLS 述詞,此述詞會針對發出查詢的特定使用者將結果限制為 10 個資料列。 將此資料庫範圍的設定設為 OFF 時,此述詞的基數估計值會是 10。 當此資料庫範圍設定為 ON 時,查詢優化估計 1 百萬個數據列。 建議針對大部分工作負載使用預設值。

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

適用於:僅限 Azure Synapse Analytic

將 Transact-SQL 及查詢處理行為,設定為相容於資料庫引擎的指定版本。 設定之後,當查詢在該資料庫上執行時,只會練習相容的功能。 每個相容性層級支援不同的查詢處理增強功能, 每個層級會吸收前一層級的功能。 首次建立時,資料庫的相容性層級會預設為 AUTO,這是建議使用的設定。 資料庫即使在暫停/繼續、備份/還原作業之後,也會保留該相容性層級。 預設值為 [AUTO]。

相容性層級 註解
AUTO 預設值。 Synapse Analytics 引擎會自動更新其值,在 sys.database_scoped_configurations 中會以 0 表示。 AUTO 目前對應至相容性層級 30 功能。
10 導入相容性層級支援之前,先執行 Transact-SQL 和查詢引擎行為。
20 第 1 層相容性層級,包含受管制的 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 Database 與 Azure SQL 受控執行個體

可讓您控制純量使用者定義函式 (UDF) 的執行統計資料是否顯示於 sys.dm_exec_function_stats 系統檢視中。 對於純量 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 Database 和 Azure SQL 受控執行個體

如果啟用異步統計數據更新,啟用此設定會導致背景要求更新統計數據以等候 Sch-M 低優先順序佇列上的鎖定,以避免在高並行情況下封鎖其他會話。 如需詳細資訊,請參閱 AUTO_UPDATE_STATISTICS_ASYNC。 預設值為 OFF

OPTIMIZED_PLAN_FORCING = { ON | OFF }

適用於:SQL Server (從 SQL Server 2022 (16.x) 開始)

強制執行最佳化計畫可減少重複強制查詢作業所額外產生的編譯負荷。 預設值為 ON。 產生查詢執行計畫之後,系統會儲存特定的編譯步驟,以最佳化重新執行指令碼的形式重複使用。 最佳化重新執行指令碼會以隱藏 OptimizationReplay 屬性的形式,儲存於查詢資料存放區的壓縮執行程序表 XML 之中。 若要深入了解,請參閱使用查詢資料存放區強制執行最佳化計畫

DOP_FEEDBACK = { ON | OFF }

適用於:SQL Server (從 SQL Server 2022 (16.x) 開始)

根據已耗用及等候的時間,識別重複查詢平行處理原則效率低落的問題。 如果系統判斷平行處理原則的使用情形效率不佳,DOP 意見反應就會從任何已設定的 DOP 降低下一次執行查詢作業的 DOP,並驗證是否有效。 您必須啟用查詢資料存放區,並處於 READ_WRITE 模式。 如需詳細資訊,請參閱平行處理原則程度 (DOP) 意見反應。 預設值為 OFF

CE_FEEDBACK = { ON | OFF }

適用於:SQL Server (從 SQL Server 2022 (16.x) 開始)

CE 意見反應能解決使用預設 CE (CE120 或更高版本) 時,不正確的 CE 模型假設所產生的認知迴歸問題,而且可以選擇是否使用不同的模型假設。 您必須啟用查詢資料存放區,並處於 READ_WRITE 模式。 如需詳細資訊,請參閱基數估計 (CE) 意見反應。 資料庫相容性層級 160 以上層級的預設值為 [ON]。

PARAMETER_SENSITIVE_PLAN_OPTIMIZATION = { ON | OFF }

適用於:SQL Server (從 SQL Server 2022 (16.x) 開始)

當參數化查詢的單一快取計畫並非最適合所有可能傳入的參數值,參數敏感度計畫 (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 Database 和 Azure SQL 受控執行個體

導致 SQL Server 在使用輕量型查詢執行統計資料分析基礎結構,或針對長時間執行的查詢作業疑難排解並執行 sys.dm_exec_query_statistics_xml 時,產生具有 ParameterRuntimeValue 的 Showplan XML 片段。

重要

資料庫 FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION 範圍組態選項並非要持續在生產環境中啟用,但僅供限時疑難解答之用。 使用此資料庫範圍組態選項將引進額外的且可能重要的 CPU 和記憶體額外負荷,因為我們將建立具有運行時間參數資訊的 Showplan XML 片段,無論 sys.dm_exec_query_statistics_xml DMV 或輕量型查詢執行統計數據配置檔基礎結構是否已啟用。

權限

資料庫上需要 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 Database 和 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 7.0 到 SQL Server 2012 (11.x) 版本的預設查詢最佳化工具或查詢最佳化工具 Hotfix 時,查詢提示與資料庫範圍組態設定之間會是 OR 條件;也就是說,不論啟用其中哪一個,都會套用資料庫範圍設定選項。

異地災害復原

可讀取次要資料庫 (Always On 可用性群組、Azure SQL Database 和Azure SQL 受控執行個體異地複寫資料庫) 會檢查資料庫的狀態,藉以使用次要值。 儘管重新編譯並不會發生在容錯移轉時,而且就技術而言,新的主要資料庫會有使用次要設定的查詢,但主要資料庫與次要資料庫之間的設定只有在工作負載不同時會有差異,因此快取的查詢會使用最佳設定,而新查詢則會挑選適合它們的新設定。

DacFx

由於 ALTER DATABASE SCOPED CONFIGURATION 是 Azure SQL Database、Azure SQL 受控執行個體和 SQL Server (從 SQL Server 2016 (13.x) 開始) 的新功能,會影響資料庫結構描述,因此結構描述的匯出項目 (不管是否有資料) 無法匯入較舊版本的 SQL Server,例如 SQL Server 2012 (11.x) 或 SQL Server 2014 (12.x)。 例如,從使用此新功能的 SQL Database 或 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_configurationssys.configurations (Transact-SQL) 系統檢視只會顯示伺服器層級的設定。

範例

下列範例示範如何使用 ALTER DATABASE SCOPED CONFIGURATION

A. 授與權限

此範例會將執行 ALTER DATABASE SCOPED CONFIGURATION 所需的權限授與使用者 Joe。

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 Database 和 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 Database 和 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 Database 和 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 Database 和 Azure SQL 受控執行個體

此範例會將 ELEVEATE_RESUMABLE 設定為 WHEN_SUPPORTED。

ALTER DATABASE SCOPED CONFIGURATION SET ELEVATE_RESUMABLE = WHEN_SUPPORTED ;

K. 從計畫快取清除查詢計劃

適用於:SQL Server (從 SQL Server 2019 (15.x) 開始)、Azure SQL Database 和 Azure SQL 受控執行個體

此範例會將特定計劃從程序快取清除

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE 0x06000500F443610F003B7CD12C02000001000000000000000000000000000000000000000000000000000000;

L. 設定暫停的持續時間

適用於:Azure SQL Database 與 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 資源

線上索引作業的指導方針