数据库范围配置配置

大多数人都知道,我’m致力于更新我所有的SQL Server知识,何处’自从SQL Server 2012以来我想要的是深处。

所以我们有几件事’重新关注今天,首先是我的名单中的顶部’ve突出显示,遗留基数估计:

默认情况下,关闭此值并随着优化器对数据库性能以及每个数据库平台,处理方式不同,因此’s值得开始侦听。数据库范围的配置设置是特定于数据库的,可以通过SSMS访问,右键单击数据库并左键单击 数据库 特性 和上 选项.

第二个是查询sys.database_scoped_configurations:

SELECT name, value 
 FROM sys.database_scoped_configurations;

来自此处的值将显示为ON = 1和OFF的数值= 0

只有MaxDop(最大程度的并行度)是数值VS.NOR.N / OFF。在将我的更新保存到数据库属性的MAX DOP之后,这将被证明,这将立即更改允许的DOP值没有四个。毋庸置疑,这只是为了证明更新,我将它恢复为0 vs.一个不同的值。

Legacy_CARDINALITY_ESTIMATION是一个较大的功能的一部分,可以在SQL Server中控制优化程序的功能版本控制选项。

遗留基数估计

甲骨文 DBA已经使用了所有基数提示了一段时间,应该理解,这可能看起来类似,但实际上是完全不同的。 - 因为在TSQL中提示有点不同于PL / SQL,我们可以比较类似的查询来协助:

TSQL.
SELECT CustomerId, OrderAddedDate 
FROM OrderTable 
WHERE OrderAddedDate >= '2016-05-01';
OPTION (USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION'));
go
PL / SQL.

您可能首先在Oracle中首先误以为以下基数提示的CE提示:

SELECT /*+ CARDINALITY(ORD,15000) */ ORD.CUSTOMER_ID, ORD.ORDER_DATE 
FROM ORDERS ORD WHERE ORD.ORDER_DATE >= '2016-05-01';

这将是不正确的,在Oracle到SQL Server中最接近的提示’S传统CE提示将是优化器功能提示:

SELECT /*+ optimizer_features_enable('9.2.0.7') */ ORD.CUSTOMER_ID, ORD.ORDER_DATE FROM ORDERS ORD 
WHERE ORD.ORDER_DATE >= '2016-05-01';

如果你’重新想知道为什么我选择9i版本来强制优化器,继续阅读和你’LL来了解。

要检查兼容性版本,以及每个数据库在SQL Server中设置它,我们将执行以下操作:

SELECT ServerProperty('ProductVersion');    

SELECT d.name, d.compatibility_level FROM sys.databases AS d 
WHERE d.name = '<Database_name>';

要将兼容版本更新到最新版本以匹配我们的SQL Server VNext数据库引擎,我们’d运行以下命令:

ALTER DATABASE <yourDatabase> SET COMPATIBILITY_LEVEL = 140;

让’s假设我们刚刚将数据库升级到140,(SQL Server 2017),并遇到了一些不存在的绩效问题’T出现在测试期间。我们可以选择将兼容性级别设置为130,(SQL Server 2016)暂时解决性能问题,允许优化程序使用以前的版本功能,同时我们排除问题。

ALTER DATABASE <yourDatabase> SET COMPATIBILITY_LEVEL = 130;

现在数据库引擎和兼容性是一个奇怪的事情,就像Inâoracle一样,了解那里的版本,这里’s a handy reference:

现在你会注意到他们的不是’T a值为SQL Server 7设置兼容性时。即使70可能是版本值,将重新设置的能力需要不同的答案,而不是您为较新版本看到的修复程序。答案首先,如果您’仍然强迫兼容版本7,我们​​需要有一个严肃的谈话,但如果您需要强制兼容兼容版本7,这就是我们进入疯狂的土地的地方… 🙂

ALTER DATABASE SCOPED CONFIGURATION LEGACY_CARDINALITY_ESTIMATION = ON;

然后,此选项将允许您覆盖给定数据库的兼容级别值。这意味着您可以拥有一个数据库:

  • 产品版本:140,(SQL Server 2017)
  • 兼容性版本:120,(SQL Server 2016)
  • 然后将范围的数据库配置转到遗留基数估计,并使用100的优化器兼容功能(SQL Server 2012)

当发生性能挑战时,这可以创建一个令人难以置信的复杂情况。 - 优化器是一个令人难以置信的特征集,并且每个版本都变得更加复杂。新功能可能会影响先前的优化器特征,并且当遗留基数的范围内容时估算已打开,它可以真正为DBA创建一个拼图盒诊断.Â这是建议在查询商店上打开,提取一个流程性能的XML迹线,然后以优化器所做的详细信息查看特定信息在执行期间。

我相信尽可能多的事情,修复正确的事情是更好的选择,比带来优化值覆盖的性能问题覆盖多个版本。 - 如果您必须将此决定作为最后的手段,请与此主意这样做它是一个临时解决方案。’D感受到这种方式如果是Oracle或SQL Server。我知道有些强大的客户在某些情况下有一些需要这个功能,但我们都知道它最终会产生更多的痛苦而不是收入到底。

 

 

 

dbakevlar.

http://about.me/dbakevlar

One thought on “数据库范围配置配置

评论被关闭。