并行执行线程资源管理方式——《OceanBase 并行执行》系列 3
在某些特定场景下,由于需要等待线程资源,并行查询会遇到排队等待的情况。本篇博客将介绍如何管理并行执行线程资源,以解决这种问题。
《OceanBase并行执行》系列的内容分为七篇博客,本篇是其中的第三篇。
| 一 | 并行执行概念 |
| 二 | 如何手动设置并行度 |
| 三 | 并行执行线程资源管理方式 |
| 四 | 并行执行的4种类别 |
| 五 | 并行执行参数的应用技巧 |
| 六 | 如何进行并行执行的诊断与调优 |
| 七 | 快速上手并行执行 |
3.1 并行执行并发控制
我们利用租户级变量 PARALLEL_SERVERS_TARGET 来设定租户在每个节点上能够提供的最大并行执行工作线程数。在启动并行查询之前,系统会向所有相关的 observer 预约所需的工作线程资源,只有当所有的 observer 都能够为此次并行查询提供足够的资源时,查询才会被投入执行,否则查询将不会启动。该并行查询会被丢回查询队列排队,等待下次执行时重新尝试获取线程资源,直到能获取到足够工作线程资源才能获准执行。整个查询执行完后,预约的工作线程资源会立即释放。
这种“尝试预约工作线程资源-资源不足丢回查询队列-再次获得执行机会-再次尝试预约工作线程资源”的过程我们称之为并行查询排队。管理全部 observer 工作线程资源预约的模块称为并行执行资源管理器。
并行执行资源管理器为了计算每个并行查询需要的工作线程数,会将查询计划做 DFO 划分,模拟调度 DFO 过程,根据 parallel hint、table parallel 等参数计算出该查询在每个 observer 上需要的最大线程数。这组线程数我们称之为“资源向量”。
资源向量是逻辑概念,用于控制并发与排队。使用资源向量从并行执行资源管理器中预约到足够工作线程资源后,并行查询会投入执行。在执行过程中,尽管随着不同 DFO 的调度执行,会不断有物理线程的获取和释放,但是逻辑上的线程资源并不会归还给并行执行资源管理器。只有在并行查询完全执行完成后,这组资源向量才会归还给并行执行资源管理器。
当大量并发查询从并行执行资源管理器预约线程资源时,采取先来先服务的策略,直至资源分配殆尽,无法满足任何一个查询的资源需求为止。之后的查询都会丢回查询队列排队,再次调度时重试获取资源。
3.2 并行执行工作线程分配
在租户的每个 observer 上都有一个并行执行线程池,用于执行并行查询任务。执行任务时,如果线程池里线程数量不足,会动态扩容线程池。如果线程池里的线程空闲时间超过 10 分钟,会触发自动缩容到 10 个线程;如果线程池里的线程空闲时间超过 60 分钟,会触发进一步缩容,可能缩容到 0 个线程。
并行查询一旦获得调度执行后,每个 DFO 总是可以在它涉及到的 observer 的并行执行线程池里获得需要的并行线程资源。需要注意的是,默认情况下,每个 DFO 在一个 observer 上分配的线程数,不得大于租户 MIN CPU * 10,如果它提出的资源需求大于这个值,会被自动降低为 MIN CPU * 10。
3.3 两级资源控制模型
对于任意并行查询,它会经历两级资源控制:
- 全局控制:在执行资源管理器的控制下,预约包含足够执行线程的资源向量
- 局部控制:在并行执行线程池的控制下,分配期望的物理线程数
全局控制会考虑分布式场景下的资源获取,局部控制仅考虑单机线程池的资源分配,二者各司其职。前者确保Query 通过检查后一定能够执行下去,不会在运行时遇到拿不到资源的问题,后者确保极端情况下单个 Query 的 DFO 不会申请远大于能有效利用的物理线程数,造成线程资源浪费。一个并行查询,只要通过了全局控制阶段,就可以顺利执行,无论并发多大,都不会遇到物理线程数不足的问题。

3.4 并行执行资源管理器相关视图
并行执行资源管理器拥有全局视角,通过视图 GV$OB_PX_TARGET_MONITOR能看到租户内每个 observer 的线程预约状态。关于视图字段详细含义,可以参考 ob 官网上的视图手册。
OceanBase(admin@oceanbase)>select * from GV$OB_PX_TARGET_MONITOR;
+--------------+----------+-----------+-----------+-----------------+--------------+-----------+-------------+------------------+-------------------+------------------------------+
| SVR_IP | SVR_PORT | TENANT_ID | IS_LEADER | VERSION | PEER_IP | PEER_PORT | PEER_TARGET | PEER_TARGET_USED | LOCAL_TARGET_USED | LOCAL_PARALLEL_SESSION_COUNT |
+--------------+----------+-----------+-----------+-----------------+--------------+-----------+-------------+------------------+-------------------+------------------------------+
| 192.168.11.2 | 19512 | 1004 | N | 555393108309134 | 192.168.11.1 | 19510 | 10 | 6 | 0 | 0 |
| 192.168.11.2 | 19512 | 1004 | N | 555393108309134 | 192.168.11.2 | 19512 | 10 | 0 | 0 | 0 |
| 192.168.11.1 | 19510 | 1004 | Y | 555393108309134 | 192.168.11.1 | 19510 | 10 | 6 | 6 | 1 |
| 192.168.11.1 | 19510 | 1004 | Y | 555393108309134 | 192.168.11.2 | 19512 | 10 | 0 | 0 | 1 |
+--------------+----------+-----------+-----------+-----------------+--------------+-----------+-------------+------------------+-------------------+------------------------------+
4 rows in set (0.002 sec)
在一个瞬态里,不同 observer 看到的全局状态可能不一致,但后台每 500 毫秒就会同步一次全局状态,总体上各个 observer 看到的状态会基本一致,不会有太大偏差。
相关文章:
并行执行线程资源管理方式——《OceanBase 并行执行》系列 3
在某些特定场景下,由于需要等待线程资源,并行查询会遇到排队等待的情况。本篇博客将介绍如何管理并行执行线程资源,以解决这种问题。 《OceanBase并行执行》系列的内容分为七篇博客,本篇是其中的第三篇。 一并行执行概念二如何手…...
数据库系统概论(个人笔记)(第二部分)
数据库系统概论(个人笔记) 文章目录 数据库系统概论(个人笔记)2、关系模型简介2.1 关系数据库的结构2.2 数据库模式2.3 键2.4 模式图2.5 关系查询语言2.6 关系代数 2、关系模型简介 2.1 关系数据库的结构 Structure of Relational…...
WebView基础知识以及Androidx-WebKit的使用
文章目录 摘要WebView基础一、启动调整模式二、WebChromeClient三、WebViewClient四、WebSettings五、WebView和Native交互 Androidx-WebKit一、启动安全浏览服务二、设置代理三、安全的 WebView 和 Native 通信支持四、文件传递五、深色主题的支持六、JavaScript and WebAssem…...
解锁AI写作新纪元的文心一言指令
解锁AI写作新纪元的文心一言指令 在人工智能(AI)飞速发展的今天,自然语言处理(NLP)技术取得了显著的进步。文心一言,作为NLP领域的一颗璀璨明星,以其强大的文本生成和指令理解能力,为…...
前端学习——工具的使用
文章目录 1. 引入一个组件需要什么步骤2. 监听变量的修改3. async与await实现异步调用4. position: relative5. 定时执行方法 1. 引入一个组件需要什么步骤 引入一个组件,一定不要加{} (对)import editForm from “./component/editForm”; …...
图的拓扑序列(BFS_如果节点带着入度信息)
way:找入度为0的节点删除,减少其他节点的入度,继续找入度为0的节点,直到删除完所有的图节点。(遍历node的neighbors就能得到neighbors的入度信息) #include<iostream> #include<vector> #incl…...
Linux常用指令集合
ls显示目录文件 选项: -a 所有文件(all所有) -l 详细信息(Information信息)(自动包含-1) 所以常用 ll -1 一行只输出一个文件。 -R 列出所有子目录下的文件。…...
前端 JS 经典:为什么需要模块化
首先,自我评定一下,一个 js 文件,各位兄弟,最多能掌控多少行,什么意思呢,就是说,一个 js 文件在多少行之内,你是可以清楚的知道这个 JS 实现了哪些业务逻辑,并对这些业务…...
MySQL:某字段追加随机数
在MySQL中,你可以使用UPDATE语句结合随机函数RAND()来为某个字段追加随机数。以下是一个示例,假设我们有一个表my_table,其中有一个字段my_field,我们想要为这个字段追加一个介于1到100之间的随机数: UPDATE my_table…...
研发管理-选择研发管理系统-研发管理系统哪个好
选择研发管理系统-研发管理系统哪个好 选择研发管理系统时,并没有一个绝对的“最好”的系统,因为每个企业的需求和情况都是独特的。然而,我可以向您介绍一些在市场上广受欢迎且功能强大的研发管理系统,供您参考: 1、彩…...
学校NTP时钟系统(时间同步系统)方案助力建设智慧校园
学校NTP时钟系统(时间同步系统)方案助力建设智慧校园 学校NTP时钟系统(时间同步系统)方案助力建设智慧校园 建设智慧校园也意味着校内网络设备和服务器剧增,如何保障智慧校园内各数字系统时序一致、维稳运行成为一大难…...
HTML中打开窗口的类型及使用方法
HTML中打开窗口是Web开发中常用的功能之一,可以通过不同的方式打开窗口,以满足不同的需求。本文将介绍HTML中打开窗口的类型及使用方法。 一、使用target属性打开窗口 target属性是HTML中打开窗口最常用的方式之一,可以通过设置target属性的…...
【userfaultfd+条件竞争劫持modprobe_path】TSGCTF 2021 -- lkgit
前言 入门题,单纯就是完成每日一道 kernel pwn 的 kpi 😀 题目分析 内核版本:v5.10.25,可以使用 userfaultfd,不存在 cg 隔离开启了 smap/smep/kaslr/kpti 保护开启了 SLAB_HADNERN/RANDOM 保护 题目给了源码&…...
StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读
StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Proposed Approach4 Experiments5 Conclusion 文章信息: 原文链接:https://ojs.aaai.org/index.php/AAAI/article/view/4…...
SpringBoot解决CORS跨域——WebMvcConfigurationSupport
前端请求后端报错了。 状态码:403 返回错误:Invalid coRs request 增加配置类WebMvcConfig Configuration public class WebMvcConfig extends WebMvcConfigurationSupport {Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许跨域…...
Linux之内存管理-malloc \kmalloc\vmalloc\dma
1、malloc 函数 1.1分配内存小于128k,调用brk malloc是C库实现的函数,C库维护了一个缓存,当内存够用时,malloc直接从C库缓存分配,只有当C库缓存不够用; 当申请的内存小于128K时,通过系统调用brkÿ…...
PyTorch中定义自己的数据集
文章目录 1. 简介2. 查看PyTorch自带的数据集(可视化)3. 准备材料3.1 图片数据3.2 标签数据 4. 方法 1. 简介 尽管PyTorch提供了许多自带的数据集,如MNIST、CIFAR-10、ImageNet等,但它们对于没有经验的用户来说,理解数据加载器的工作原理以及…...
助力数字农林业发展服务香榧智慧种植,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建香榧种植场景下香榧果实检测识别系统
作为一个生在北方但在南方居住多年的人,居然头一次听过香榧(fei)这种作物,而且这个字还不会念,查了以后才知道读音(fei),三声,这着实引起了我的好奇心,我相信…...
2024 年 4 月区块链游戏研报:市场低迷中活跃用户数创新高
2024 年 4 月区块链游戏研报 作者:stellafootprint.network 数据来源:GameFi 研究页面 2024 年 4 月,Web3 游戏领域在经历 3 月创纪录的表现后,迎来了显著波动。比特币自历史高位回调,月跌幅达到 10.4%。与此同时&a…...
排序(一)----冒泡排序,插入排序
前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法,它重复地遍历要排序的序列,每次比较相邻…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
