SQL Server 2014可以在批处理模式下执行什么操作?


21

在查询中使用列存储索引时,SQL Server可以使用批处理模式。关于可以在批处理模式下运行什么以及不能在批处理模式下运行的文档很少。请查看以下(激励性)查询计划,其中以批处理模式(绿色)执行大量操作:

在此处输入图片说明

(这是一个估计的计划。我使用实际计划来验证实际执行模式确实是批处理的。)

请注意,只有T1的构建方使用列存储索引。所有探针输入(T2和T3)都是行存储。他们的数据似乎转换为批处理模式。我一直认为批处理模式仅用于通过探针侧运行的数据流。

似乎数据可以转换为批处理模式,即使它不是源自于列存储索引。这就提出了一个问题:为什么SQL Server也不将批处理模式也用于仅行存储的查询?对于其中一些人可能是有益的。使用列存储索引是否是使SQL Server考虑批处理模式所必需的正式要求?我们是否可以添加一个带有列存储索引的零行伪表来引入批处理模式并实现性能提升?

自SQL Server 2014起,批处理模式下到底可以运行什么?


5
为什么SQL Server也不将批处理模式也用于仅行存储的查询?因为CS到目前为止仅支持批处理模式。对于其中一些人可能是有益的。使用列存储索引是否是使SQL Server考虑批处理模式所必需的正式要求?是的,CS是必需的。Neugebauer打开了一个连接项,该连接项仍处于活动状态,对行存储实施“批量处理模式支持”
Kin Shah 2015年

2
在2016年有获得批模式考虑BTW新的可能招sqlmag.com/sql-server/...
马丁·史密斯

Answers:


30

自SQL Server 2014起,批处理模式下到底可以运行什么?

SQL Server 2014将以下内容添加到批处理模式运算符的原始列表中:

  • 哈希外部联接(包括完全联接)
  • 哈希半连接
  • 哈希防半加入
  • 全部合并(仅串联)
  • 标量哈希聚合(无分组依据)
  • 批处理哈希表构建已删除

似乎数据可以转换为批处理模式,即使它不是源自于列存储索引。

SQL Server 2012在使用批处理运算符方面非常受限制。批处理模式计划具有固定的形状,依赖于试探法,并且一旦转换到行模式处理就无法重新启动批处理模式。

SQL Server 2014将执行模式(批处理或行)添加到查询优化器的常规属性框架中,这意味着它可以在计划中的任何时候考虑转换为批处理模式和从批处理模式过渡。过渡由计划中的不可见执行模式适配器实现。这些适配器具有与之相关的成本,以限制优化期间引入的转换数量。这种新的灵活模型称为混合模式执行。

使用未记录的TF 8607,可以在优化器的输出中看到执行模式适配器(尽管遗憾的是在用户可见的执行计划中却看不到)。例如,捕获了以下查询以对行存储中的行进行计数:

行对批对行适配器

使用列存储索引是否是使SQL Server考虑批处理模式所必需的正式要求?

今天是,是的。此限制的一个可能原因是,它自然将批处理模式的处理限制为Enterprise Edition。

我们可以添加一个带有列存储索引的零行虚拟表来引发批处理模式吗?

是的,这可行。正因为如此,我也看到人们与单行集群列存储索引交叉连接。您在注释中提出的关于在false上加入虚拟列存储表的建议非常棒。

-- Demo the technique (no performance advantage in this case)
--
-- Row mode everywhere
SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
GO
-- Dummy columnstore table
CREATE TABLE dbo.Dummy (c1 int NULL);
CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
GO
-- Batch mode for the partial aggregate
SELECT COUNT_BIG(*) 
FROM dbo.FactOnlineSales AS FOS
LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;

使用虚拟左外部联接的计划:

带有虚拟表的批处理模式

文档很薄

真正。

最佳的官方信息来源是“ 描述的列存储索引”和“ SQL Server列存储性能调整”

SQL Server MVP Niko Neugebauer在这里通常对列存储有一个很棒的系列。

尽管不是官方产品文档,但Microsoft Research论文《SQL Server列存储的增强(pdf)》中有关于2014年更改的一些很好的技术细节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.