详情页标题前

腾讯云TDSQL-C MySQL版实现原理

详情页1

本文介绍并行查询功能的实现原理。

并行原理

TDSQL-C MySQL 版推出并行查询(Parallel Query)能力,将完整数据分区下推到不同的线程上,利用多个线程进行并行计算,并将结果汇总到用户线程上,并返回给用户,提升查询效率。

腾讯云TDSQL-C MySQL版实现原理

下面用一个简单的例子介绍并行查询的基本原理。说明MySQL/InnoDB 物理存储为段页式,分区单位为页,这里用行演示分区的概念。给定一个表 t 和如下分组聚合查询。

select x, count(*) from t group by x;

哈希聚合算法(迭代求值)过程如下表所示。算法迭代每一行,更新分组聚合状态。当所有数据行迭代结束时,就得到了分组聚合结果。假设聚合状态更新操作是恒定的,那么算法时间复杂度是 O(n) 的。

腾讯云TDSQL-C MySQL版实现原理


如果用 k 个线程来加速这个查询(这里 k = 2),那么最好先将数据表划分成 k * p 个分区(这里 p = 1)。这样,每个线程可以处理 p 个分区,产生一个局部结果。显然,这些局部结果并不是最终结果,还需要进行合并处理。合并操作需要放在同一个用户线程里执行,才能获得正确的最终结果。

腾讯云TDSQL-C MySQL版实现原理


由上述示例我们可以将串行查询模式与并行查询模式的运算用算子图表示为:

腾讯云TDSQL-C MySQL版实现原理


通过算子图可看到,在并行查询中数据会根据并行度,被拆分为数个不重叠的分区,这一过程被称为数据分区。
在数据分区完成后,原始计划中的特殊运算也会进行拆分,此过程为任务拆分。全部拆分完成后数据会被多个工作线程(并行线程)扫描并执行,工作线程会将各部分结果通过数据交换算子聚集到用户线程,这一过程依赖于数据交换。数据交换完成后,由用户线程完成聚集操作,汇总结果,将完整结果输出。其中,用户线程负责数据分区和任务分拆,同时充当协调者角色(也称为协调线程),协调多个工作线程并行地执行子任务。用户线程还负责合并最终结果,返回给用户。工作线程执行并行子任务,并通过数据通道交换中间结果。那么,可以总结并行查询的几个核心要素为:数据分区:将原始表数据划分成不重叠的分区,并支持按分区读数据。任务拆分:将原始计划中的特殊运算拆分成“局部-整体”两段运算,除此之外,还要插入数据交换算子,支持跨线程数据传递。数据交换:支持在不同线程间传递数据。

并行流程

TDSQL-C MySQL 版基于上述原理,实现了整套并行查询计划,将串行处理流程扩展为了并行处理流程,如下图所示。

腾讯云TDSQL-C MySQL版实现原理


一条 SQL 语句,在 MySQL 传统的串行流程中为:一条 SQL 语句先进行串行优化,输出串行执行计划,之后执行迭代式模型输出结果,整个过程效率不高。为实现并行查询能力,TDSQL-C MySQL 版全新设计了整套 SQL 语句处理流程:
1. 基于并行查询原理我们可知,整个过程被划分为用户线程和工作线程(并行线程)两部分,所有的流程均在这两类线程中进行。在一条 SQL 语句开始执行后,用户线程会在优化器中根据所设定的参数值对这条语句进行分析,生成对应的执行计划。SQL 优化环境可以简单理解为一个高度抽象的确定性计算模块,其输入是 SQL 和优化环境,输出是执行计划。对于相同的输入,就会有相同的优化路径,产生相同的输出,保证结果的准确性。2. 生成执行计划后,会进入语句检测阶段,此时计算层会检测该语句是否符合执行并行查询的标准,语句层面检测包括动态查询,数据隔离级别是 RC 或 RR,数据处理量是否足够多代价,执行计划层面检测迭代算子和函数是否可以并行,若不符合要求,该语句会回到串行执行;若符合标准则执行并行查询,进入并行优化阶段。具体支持的语句请参见 并行查询支持的语句场景3. 在并行优化阶段,计算层会根据需求去选择对哪个表进行数据拆分,并对聚合或排序等操作进行任务拆分,方便各 worker 并行执行。在优化阶段,由于涉及数据划分,为保证划分到每个线程的数据足够均衡,TDSQL-C MySQL 版引入动态分区管理能力,保证一个线程执行多个任务,最大程度避免数据倾斜。4. 在完成上述一系列流程后,计算层将生成并行查询任务,通过任务副本的方式下推至工作线程,并根据参数设置的值对工作线程数量进行分配与限制,工作线程此时开始执行并行查询操作,各线程并行执行,得到结果后将数据上推至用户线程进行聚合处理,并返回给用户,至此,一条语句完整的并行查询流程执行完毕。整体流程可以总结为,用户线程收到 SQL 后,经解析、校验和优化等常规步骤,产生串行执行计划,同时搜集优化过程依赖的各种信息(优化环境)。然后,分析串行执行计划(语句检测,实际上是检测算子树、执行环境和优化代价),决定是否启动并行优化。并行优化时将串行算子树划分成粗粒度任务,选定并行表(动态分区)和任务间数据交换算法,并构造任务依赖图。此时,用户线程准备就绪,从可用线程管理器里申请到足够的工作线程,就可以开始调度执行,工作线程完成后,根据并行查询原理,数据通过数据交换至用户线程进行聚合处理,返回给用户完整结果。在以上流程中,TDSQL-C MySQL 版设置了多种参数方便用户对并行查询能力进行调整,控制语句的执行代价与并行查询造成的资源负载等,并辅以多种监控指标,实时监控与并行查询有关的多项信息,详情请参见 开启或关闭并行查询
官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:http://www.yunxiaoer.com/141074.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云对象存储PUT Bucket lifecycle

    功能描述 COS 支持用户以生命周期配置的方式来管理 Bucket 中 Object 的生命周期。生命周期配置包含一个或多个将应用于一组对象规则的规则集(其中每个规则为 COS 定义一个操作)。这些操作分为以下两种:转换操作:定义对象转换为另一个存储类的时间。例如,您可以选择在对象创建30天后将其转换为低频存储(STANDARD_IA,适用于不常访问)存储类…

    腾讯云 2023年12月9日
  • 阿里云负载均衡【20220401】【优惠活动】ALB资源包首购优惠公告-云淘科技

    尊敬的阿里云用户,为了帮助您更好地了解阿里云应用型负载均衡ALB(Application Load Balancer)的功能特性,2022年04月01日~2024年03月31日期间,阿里云对首次购买ALB产品的用户提供1分钱购买1000 LCU的ALB资源包的优惠活动。 ALB资源包简介 ALB资源包是ALB推出的预付费套餐包,购买生效后可按抵扣比例自动抵扣…

    阿里云负载均衡 2023年12月10日
  • 腾讯云内容分发网络CDNHTTPS 配置指南

    配置场景 腾讯云 CDN 支持 HTTPS 加速服务,您可以通过上传证书进行部署,也可以将已经托管至腾讯云 SSL 证书管理的证书,直接部署至 CDN 平台,启用 HTTPS 加速服务,实现全网数据加密传输。 查看配置 登录 CDN 控制台,在菜单栏里选择域名管理,单击域名右侧管理,即可进入域名配置页面 Https 配置中,查看指定域名的 HTTPS 配置情…

    2023年12月9日
  • 腾讯云负载均衡绑定容器实例

    负载均衡的后端服务支持绑定容器实例。 容器实例简介 容器实例(EKS Container Instance,EKSCI) 是由 Serverless 容器服务(Tencent Kubernetes Engine for Serverless, TKE Serverless)推出的无需用户购买服务器、无需部署 K8S 集群,即可部署容器应用的服务模式,提供虚…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储防盗刷指引

    前言 近年来,越来越多的用户在搭建网站或图床时将图片视频等资源上传到对象存储 COS,提升了访问稳定性的同时减轻了服务器的存储空间压力,但随之而来的流量盗刷、图片盗链问题也困扰着不少开发者,一旦存储空间被恶意访问,会产生高额的流量费用,产生不必要的纠纷。这类问题实际上可以通过多种手段来防护,本文将主要介绍一些常见的防护手段,帮助开发者合理配置存储桶,建立安全…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。