Kingsadrr Asked: 2019-12-05 02:20:44 +0800 CST2019-12-05 02:20:44 +0800 CST 2019-12-05 02:20:44 +0800 CST SQL Server 的兼容级别 772 有没有办法知道我的 SQL SERVER DB 2014 中的兼容性级别是否发生了变化? sql-server sql-server-2014 2 个回答 Voted Best Answer Randi Vertongen 2019-12-05T02:33:52+08:002019-12-05T02:33:52+08:00 要了解数据库的当前兼容性级别,您可以运行: SELECT name,compatibility_level FROM sys.databases WHERE name = 'DatabaseName'; 我的 TEST 数据库的结果: name compatibility_level TEST 140 如果兼容性级别发生变化,例如使用以下命令: ALTER DATABASE TEST SET COMPATIBILITY_LEVEL = 120; 您可以在 sql server 错误日志中找到发生的日期和时间: 或使用以下命令读取(当前)错误日志文件xp_readerrorlog: EXEC sp_readerrorlog 0, 1, 'COMPATIBILITY_LEVEL' 结果 将 的第一个参数替换xp_readerrorlog为 1 读取第二个错误日志文件, 2 为第三个文件, ... 。 John K. N. 2019-12-05T05:03:46+08:002019-12-05T05:03:46+08:00 此外,您可以通过运行以下语句来验证您的数据库未使用下级查询优化器 (LEGACY_CARDINALITY_ESTIMATOR) 运行: use [yourDB] GO select * from sys.database_scoped_configurations 这将为您在 SQL Server 2014 实例上为使用旧基数估计器运行的给定数据库提供以下结果集: configuration_id | name | value | value_for_secondary ------------------|-------------------------------|-------|--------------------- 1 | MAXDOP | 0 | NULL 2 | LEGACY_CARDINALITY_ESTIMATION | 1 | NULL 3 | PARAMETER_SNIFFING | 1 | NULL 4 | QUERY_OPTIMIZER_HOTFIXES | 0 | NULL 我添加此信息作为答案,因为您可以让实例以当前兼容级别 120(对于 SQL Server 2014)运行,但数据库仍将使用旧的基数估计器,这否定了使用的一些好处为您的数据库提供更新的 SQL Server 2014 兼容性级别。 参考资料 基数估计 (SQL Server) (Microsoft | SQL Docs) ALTER DATABASE (Transact-SQL) 兼容级别 更改数据库范围配置 (Transact-SQL) DBCC TRACEON - 跟踪标志 (Transact-SQL)(特别是 TF 2312) 启用可以由特定查询级别上的不同跟踪标志控制的影响计划的 SQL Server 查询优化器行为
要了解数据库的当前兼容性级别,您可以运行:
我的 TEST 数据库的结果:
如果兼容性级别发生变化,例如使用以下命令:
您可以在 sql server 错误日志中找到发生的日期和时间:
或使用以下命令读取(当前)错误日志文件
xp_readerrorlog
:结果
将 的第一个参数替换
xp_readerrorlog
为 1 读取第二个错误日志文件, 2 为第三个文件, ... 。此外,您可以通过运行以下语句来验证您的数据库未使用下级查询优化器 (LEGACY_CARDINALITY_ESTIMATOR) 运行:
这将为您在 SQL Server 2014 实例上为使用旧基数估计器运行的给定数据库提供以下结果集:
我添加此信息作为答案,因为您可以让实例以当前兼容级别 120(对于 SQL Server 2014)运行,但数据库仍将使用旧的基数估计器,这否定了使用的一些好处为您的数据库提供更新的 SQL Server 2014 兼容性级别。
参考资料