加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server 2014在批处理模式下可以执行什么操作

发布时间:2020-12-12 06:15:04 所属栏目:MsSql教程 来源:网络整理
导读:在查询中使用列存储索引时,SQL Server可以使用批处理模式.关于什么可以在批处理模式下运行,哪些不可以运行的文档很薄.请查看以下(激励)查询计划,其中批量模式(绿色)执行了大量令人惊讶的事情: (这是一个估计的计划.我使用实际计划来验证实际执行模式确实是批
在查询中使用列存储索引时,SQL Server可以使用批处理模式.关于什么可以在批处理模式下运行,哪些不可以运行的文档很薄.请查看以下(激励)查询计划,其中批量模式(绿色)执行了大量令人惊讶的事情:

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

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

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

从SQL Server 2014开始,在批处理模式下究竟能运行什么?

解决方法

What exactly can run in batch mode as of SQL Server 2014?

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

>哈希外连接(包括完全连接)
> Hash Semi加入
> Hash Anti Semi Join
>全联盟(仅限连接)
>标量散列聚合(没有分组)
>删除批处理哈希表构建

It seems that data can transition into batch mode even if it does not originate from a columnstore index.

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

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

执行模式适配器可以在优化器的输出中看到(虽然很遗憾不在用户可见的执行计划中),带有未记录的TF 8607.例如,对于计算行存储中的行的查询捕获了以下内容:

Is using a columnstore index a formal requirement that is necessary to make SQL Server consider batch mode?

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

Could we maybe add a zero row dummy table with a columnstore index to induce batch mode?

是的,这很有效.出于这个原因,我还看到人们使用单行聚簇列存储索引进行交叉连接.您在评论中提出的建议是加入虚假列存储表的假是非常好的.

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

使用虚拟左外连接计划:

Documentation is thin

真正.

最好的官方信息来源是Columnstore Indexes Described和SQL Server Columnstore Performance Tuning.

SQL Server MVP Niko Neugebauer在here一般的列存储上有一个非常棒的系列.

虽然这不是官方产品文档,但有关Microsoft研究论文Enhancements to SQL Server Column Stores(pdf)中2014年更改的一些很好的技术细节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读