并行执行线程资源管理方式——《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…...

排序(一)----冒泡排序,插入排序
前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法,它重复地遍历要排序的序列,每次比较相邻…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...