达梦分布式集群DPC_分布式执行计划执行拆分流程

  • 1 DPC任务拆分原理
    • 1.1 分布式架构思想
    • 1.2 DPC如何实现任务拆分?
  • 2 DPC任务拆分完整示例
    • 2.1 单表查询
      • 2.1.1 创建分区表,存储在不同BP上
      • 2.1.2 生成sql的最佳执行计划
      • 2.1.3 代码生成并执行、拆分
        • 2.1.3.1 任务拆分步骤
        • 2.1.3.2 任务拆分图示
        • 2.1.3.3 子任务执行详情查看
    • 2.2 表连接任务拆分
      • 2.2.1 前期准备
      • 2.2.2 任务拆分
      • 2.2.3 任务拆分图解
      • 2.2.4 子任务执行详情

1 DPC任务拆分原理

1.1 分布式架构思想

从单机-分布式,最大的变化是表数据从存储到一个节点(一台服务器),变化成分散到多个节点(多台服务器存储);

例如 当客户端产生一个任务时,如执行"select *from表"
1.单机的任务执行方式为单线程调度,例如一个人承包一个任务
2.当表数据存储在多台服务器,就出现了任务拆分的解决方案,任务拆分为多个部分,每个人负责一部分,最后对结果汇总

通过将大任务分为多个小任务,每个小任务存储在不同服务器,让多台服务器并行执行任务来提升性能

1.2 DPC如何实现任务拆分?

达梦dpc的架构为SP+MP+BP,计算节点+元数据节点+数据存储节点

1. SP为计算节点:
作用为进行分布式执行计划的生成,分发子任务到BP,结果集汇总等

例如
SP类似于总控节点,对任务进行拆解,并分发任务给BP

2. MP为元数据节点:
提供数据字典信息,包含数据分布等信息

例如
MP存储了哪个分区存储在哪个BP上
可以给SP提供元数据信息,方便SP的任务分发和计划生成等

3. BP是数据存储节点
BP是数据存储节点,一般每台服务器至少配置1个BP,方便数据拆分,并执行SP分发的任务

例如
建表时通过创建分区表,指定不同的分区存储在不同BP上,实现数据拆分;

达梦DPC通过这三层架构协同,来解决分布式任务的拆分执行问题

2 DPC任务拆分完整示例

2.1 单表查询

2.1.1 创建分区表,存储在不同BP上

create table Y1(A int, B int) partition by hash(A) partitions 3 ;  
--默认会存储在3个BP上

2.1.2 生成sql的最佳执行计划

1.sql请求:客户端连接SP发送sql语句 select *from Y1;2.解析:SP收到请求后,向MP申请Y1表的元数据信息,然后进行语法检查、语义检查、共享池检查3.优化器阶段:默认没有缓存,会进行到优化器阶段,生成最佳执行计划①.优化器会首先生成单机版本的最佳执行计划(CBO)project[0x1215e4170] n_exp(3) (cost: 0.04461, rows: 1)base table[0x1215e4cc8] (Y1, INDEX47617565, FULL SEARCH) (cost: 0.04461, rows: 1)②生成单机最佳执行计划后,插入分发操作符(send、recv为分布式操作符)recv[0x1215e6f20]  (cost: 0.04461, rows: 1)send[0x1215e68d8] send_type(DIRECT) sites(5:1,12:1,10:1) gi_polic(UNIT) (cost: 0.04461, rows: 1)project[0x1215e4170] n_exp(3) (cost: 0.04461, rows: 1)base table[0x1215e4cc8] (Y1, INDEX47617565, FULL SEARCH) (cost: 0.04461, rows: 1)最佳执行计划
1   #NSET2: [1, 1, 20] 
2     #ERECV: [1, 1, 20]; stask_no(-1), l_stask_no(0), n_key(0), in_turn(0), trig(0)
3       #ESEND: [1, 1, 20]; stask_no(0), type(DIRECT), sites(5:1,12:1,10:1), sql_invoke(0), pwj_opt(0), table(-); INFO_BITS(0xc)
4         #GI: [1, 1, 20]; policy(PART_UNIT), gi_unit[0..0], scan_type[0](FULL)
5           #PRJT2: [1, 1, 20]; exp_num(3), is_atom(FALSE) 
6             #CSCN2: [1, 1, 20]; INDEX47617565(Y1); btr_scan(1)

2.1.3 代码生成并执行、拆分

当拿到最佳执行计划后,进行可执行代码生成后执行

2.1.3.1 任务拆分步骤

①任务分发
NSET2执行根计划,任务号为stask_no(-1)=-1,往下走遇到了ERECV,这个是分布式的操作符,开始进行任务分割和数据分发,QC(查询调度总单元)调度发送所有子计划到BP上;

2     #ERECV: [1, 1, 20]; stask_no(-1), l_stask_no(0), n_key(0), in_turn(0), trig(0)
3       #ESEND: [1, 1, 20]; stask_no(0), type(DIRECT), sites(5:1,12:1,10:1), sql_invoke(0), pwj_opt(0), table(-); INFO_BITS(0xc)--分析
主任务号为stask_no(-1),子任务号为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917794.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917794.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917794.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么免费建立自己的网站步骤

以下是免费建立个人网站的详细步骤,结合多种方案和工具推荐: 一、零基础快速建站方案 ‌选择免费建站平台‌ PageAdmin CMS‌: 1、提供开源模板,模板可以自定义界面和风格,同时支持原创设计和定制。 2、后台支持自定义…

使用ASIWebPageRequest库编写Objective-C下载器程序

全文目录:开篇语前言为什么选择ASIWebPageRequest?安装ASIWebPageRequest库编写下载器程序1. 导入必要的库2. 创建下载任务3. 设置下载保存路径4. 发起下载请求5. 更新下载进度6. 处理下载完成7. 处理下载失败完整代码示例8. 运行程序总结文末开篇语 哈喽…

mathtype加载项搞崩了word(上)

一、Mathtype更新后word异常 在mathtype更新后,打开word文件时一直报宏的错: 点击“取消”: 点击“确定”: 点击“确定”: 点击“确定”: 还有一堆小弹窗,最后还是能打开word文件: …

算法入门第一篇:算法核心:复杂度分析与数组基础

引言:为什么需要学习算法? 你可能也发现,即使是社招,面试官也时不时会抛出几道算法题,从简单的反转链表到复杂的动态规划。这常常让人感到困惑:我一个做游戏开发的,写好 Unity 的 C# 代码&…

从“听指令”到“当参谋”,阿里云AnalyticDB GraphRAG如何让AI开窍

01、背景 在智能客服与医疗问诊领域,用户模糊描述导致的多轮对话断裂与语义关联缺失,长期阻碍决策效率提升。传统 RAG 技术面临双重困境: 单轮检索局限:当用户仅反馈“空调制冷效果差”、“持续发热三天”等模糊信息时&#xff…

javascript常用实例

常见字符串操作字符串反转const reversed hello.split().reverse().join(); console.log(reversed); // olleh检查回文字符串function isPalindrome(str) {return str str.split().reverse().join(); }数组处理方法数组去重const unique [...new Set([1, 2, 2, 3])]; // [1,…

RK3568下用 Qt Charts 实现曲线数据展示

实际效果: 在工业监控、智能家居等场景中,实时数据可视化是核心需求之一。本文将介绍如何使用 Qt5 的 Charts 模块,快速实现一个支持温度、湿度、大气压和噪声四个参数的实时监测系统,包含曲线动态绘制、坐标轴自适应、多窗口布局等实用功能。 项目背景与目标 环境参数监…

接口自动化测试用例详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快Post接口自动化测试用例Post方式的接口是上传接口,需要对接口头部进行封装,所以没有办法在浏览器下直接调用,但是可以用Curl命令…

JavaEE初阶第十四期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十二)

专栏:JavaEE初阶起飞计划 个人主页:手握风云 目录 一、JUC的常见类 1.1. Callable接口 1.2. ReentrantLock​ 1.3. 信号量Semaphore 1.4. CountDownLatch 二、线程安全的集合类 2.1. 多线程环境使用 ArrayList​ 2.2. 多线程环境使用哈希表 一、…

什么是RabbitMQ?

什么是RabbitMQ? 一、什么是RabbitMQ? 二、Rabbitmq 的使用场景? 三、RabbitMQ基本概念 四、RabbitMQ的工作模式 1. **简单队列模式(Simple Queue)** 2. **工作队列模式(Work Queue)** 3. **发布/订阅模式(Publish/Subscribe)** 4. **路由模式(Routing)** 5. **主题…

DVWA靶场第一关--Brute force 新手入门必看!!!

文中涉及讲解burp爆破模块介绍可能不太准确,请大佬批评指正就dvwa靶场而言,两个常见漏洞让我有了新的认知第一个接触的漏洞为弱口令漏洞,常见情况下,人们口中的弱口令可能为“姓名缩写”“123456”“生日简写等”接触了dvwa&#…

完美解决Docker pull时报错:https://registry-1.docker.io/v2/

1、错误描述rootubuntu-database:/opt/dify/docker# docker compose up -d [] Running 9/9✘ api Error context canceled …

用 Python 批量处理 Excel:从重复值清洗到数据可视化

引言日常工作中,经常需要处理多份 Excel 表格:比如合并销售数据、清洗重复的用户信息,最后生成可视化图表。手动操作不仅效率低,还容易出错。这篇文章分享一套 Python 自动化流程,用pandas和matplotlib搞定从数据清洗到…

4.5 点云表达方式——图

(一)定义与原理 图4-5-1 点云图结构

wordpress菜单调用的几种常见形式

在WordPress主题开发里,“菜单”在前端页面中常见的调用/输出形式可以归纳为5种,按出现频率从高到低列给你,并给出最简代码片段,方便直接复制粘贴。 标准菜单位置调用(99%场景) 后台“外观→菜单”里把菜单A指派到菜单位置prima…

linux中pthread_t 的值与top -Hp中线程id值的区别

linux中pthread_t 值与top -Hp中线程id值的区别 #include <stdio.h> #include <pthread.h> #include <thread>void thread_func() {printf("child thread id0x%x\n",pthread_self());while(1){ printf("hello world\n");} }int ma…

Idea集成Jenkins Control插件,在IDEA中触发Jenkins中项目的构建

IDEA可以下一个这个插件 Jenkins Control&#xff0c;直接在idea中触发测试环境项目的部署测试环境API-TOKEN&#xff1a;XXXXXXXXXXXXXXXX&#xff08;在jenkins的首页 - 系统管理 - 管理用户中获取&#xff09;配置号后&#xff0c;测试连接&#xff0c;需要是成功的状态&…

【ARM】CMSIS6 介绍

1、 简介CMSIS是通用微控制器软件接口标准(Common Microcontroller Software Interface Standard ) 的简写。CMSIS 包括API、软件组件、工具及工作流程&#xff0c;主要用于简化软件重用、缩短开发人员学习曲线&#xff0c;加快项目构建和调试&#xff0c;从而使产品更快上市。…

【含文档+PPT+源码】基于SSM的旅游与自然保护平台开发与实现

项目介绍 本课程演示的是一款&#xff1f;&#xff1f;&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码资料…