并行执行参数的应用技巧——《OceanBase 并行执行》系列 5

OceanBase 提供了一套参数,实现对并行执行功能的初始化和调优。
在OceanBase 的启动过程中,系统会根据租户的 CPU 数量和特定的配置项  px_workers_per_cpu_quota  来自动计算出默认的并行执行控制参数。当然,用户也可以选择不采用这些默认值,而是在启动时手动指定所需的参数值,也根据实际场景的调整,在后续阶段手动调整这些参数值。并行执行在 OceanBase 中是默认启用的。

这篇博客会从并行执行默认参数和相关参数调优这两个方面,来讲解并行执行参数控制的技巧。

并行执行系列的内容分为七篇博客,本篇是其中的第五篇。

并行执行概念
如何手动设置并行度
并行执行线程资源管理方式
并行执行的4种类别

5.1 并行执行默认参数

并行执行的参数能够控制并行线程数、并行执行排队等行为。具体总结为下表:

参数名称默认值级别说明
px_workers_per_cpu_quota10租户级配置项每个 CPU 上可以分配的并行执行线程数,取值范围 [1,20]
parallel_servers_targetMIN CPU * px_workers_per_cpu_quota租户级变量表示租户在每个节点上可申请的并行执行线程数量。
parallel_degree_policyMANUAL租户级/Session级变量自动 DOP 开启开关,当设置为 AUTO 时,会开启自动 DOP,优化器根据统计信息自动计算 Query 的并行度。当设置为 MANUAL 时,根据 HINT、TABLE PARALLEL 属性、SESSION 级 DOP 等控制并行度。
_parallel_max_active_sessions0租户级配置项TPCH 测试中,Power Run 需要的并行度比较高, Throughput Run 需要的并行度比较低。但是,TPCH 测试规范不允许通过 SQL 来动态更改并行度。为了达到动态更改并行度的目的,增加一个配置项 _parallel_max_active_sessions (pmas)当 pmas 等于 0 时,并行执行的活跃 session 数不受限制;当 pmas 大于 0 时,当前并行执行最大活跃 session 数会限制在 pmas 值以下,其它并行执行 session 线程会被挂起,等待被唤醒。某个 query 执行成功后,会唤醒它们尝试继续执行。

OceanBase 为了降低用户使用并行执行的门槛,将并行执行参数个数降到了最低,使用默认参数即可实现开箱即用。在特殊场景下,用户可以通过改变默认参数实现应用调优。

px_workers_per_cpu_quota

这个参数表示在每个 CPU 上可以分配的并行执行线程数。当分配给租户的 MIN CPU 为 N 时,如果并行负载均匀,那么每个节点上可以分配的线程数为 N * px_workers_per_cpu_quota。如果并行负载访问的数据分布不均匀,那么某些节点上实际分配的线程数会短时间大于 N * px_workers_per_cpu_quota,当负载结束后,这些多分配出来的线程会被自动回收。

px_workers_per_cpu_quota 对 parallel_servers_target 默认值的影响仅仅发生在创建租户时,租户创建完成后,修改 px_workers_per_cpu_quota 值并不会改变 parallel_servers_target 值。

一般情况下,不需要更改 px_workers_per_cpu_quota 的默认值。当未开启资源隔离特性时,如果发生并行执行占用了全部 CPU 资源的情况,可以尝试通过降低 px_workers_per_cpu_quota 参数的值来缓解该问题。

parallel_servers_target

这个参数表示租户在每个节点上可申请的并行执行线程资源数量。当资源耗尽时,并行执行请求需要排队。关于排队的概念,请参考本文中《3 并发控制与排队》一节。

并行执行的 CPU 使用率非常低,可能是因为 parallel_servers_target 值太小,导致 SQL 的 DOP 被降级,实际分配的线程数小于期望的数量。OBServer v3.2.3 版本之前,parallel_servers_target 的默认值非常小,可以通过调大 parallel_servers_target 值来解决,建议设置为 MIN CPU * 10。 OBServer v3.2.3 版本起,parallel_servers_target 的默认值就是 MIN CPU * 10,一般不会遇到这个问题。

MIN CPU 表示租户的 min_cpu 值,一般在创建租户时指定。

设定好 parallel_servers_target 值后,重新连接,执行下面的命令查看最新值:

show variables like 'parallel_servers_target';

从运维的角度,如何给 parallel_servers_target 设置一个最大值,避免以后频繁调整呢?理论上,可以将 parallel_servers_target 设置得无穷大,这时会面临一个问题:低效。所有的查询都不排队,它们都开始执行,并争抢 CPU 时间片、争抢磁盘 IO、网络 IO。

从吞吐量的角度看,这个问题不算严重。从单个 SQL 延迟的角度看,这种争抢会严重影响延迟。综合考虑 CPU 和 IO 的利用率,我们可以以租户 UNIT 的 MIN CPU 为基准,一般把 parallel_servers_target 设置为 MIN CPU * 10 即可;少数 IO 密集型场景,CPU 可能用不满,可以将 parallel_servers_target 设置为 MIN CPU * 20。

parallel_degree_policy

这个参数是自动 DOP 开启开关,当设置为 AUTO 时,会开启自动 DOP,优化器根据统计信息自动计算 Query 的并行度。当设置为 MANUAL 时,根据 HINT、TABLE PARALLEL 属性、SESSION 级 DOP 等控制并行度。

OBServer v4.2 起,如果用户不熟悉并行度的设置规则,可以设置 parallel_degree_policy 为 AUTO,让优化器帮忙自动选择并行度。关于自动并行度的计算规则,参考本文的 《2 设定并行度》一节。OBServer v4.2 之前的版本,不支持 parallel_degree_policy 开关,不支持自动 DOP 功能,需要手工设置。

5.2 并行执行相关参数调优

ob_sql_work_area_percentage

租户级变量,用于限制 SQL 模块可以使用的最大内存。它是一个百分值,表示占租户总内存的比值,默认为 5,表示占租户内存的 5%。当 SQL 使用的内存超过限制时,会触发内存落盘。sql work area 内存的实际使用量,可以在 observer.log 日志中搜索 WORK_AREA。例如:

[MEMORY] tenant_id=1001 ctx_id=WORK_AREA hold=2,097,152 used=0 limit=157,286,400

读多写少场景下,如果 SQL 模块内存受限导致数据落盘,可以适当增大 ob_sql_work_area_percentage 值。

workarea_size_policy

OceanBase 实现了全局自适应的内存管理,当 workarea_size_policy 设置为 AUTO 时,执行框架会以最优的策略为各个算子(如 HashJoin、GroupBy、Sort 等)分配内存,开启自适应的数据落盘策略。如果 workarea_size_policy 设置为 MANUAL,则用户需要手工设置 _hash_area_size_sort_area_size

_hash_area_size

租户级配置项,用于手动指定每个算子的 Hash 算法最大可用内存,默认值为 128MB。超过指定值后,会启用内存落盘功能。对于 Hash 算法相关算子有效,如 Hash Join、Hash Groupby、Hash Distinct 等。一般情况下,不需要修改本配置项,建议 workarea_size_policy 保持为 AUTO。如果认定 Hash 算法中系统自动内存落盘功能不满足业务需要,可以先将 workarea_size_policy 设置为 MANUAL,然后手工指定 _hash_area_size值。

_sort_area_size

租户级配置项,用于手动指定每个算子的 Sort 算法最大可用内存,默认值为 128MB。超过指定值后,会启用内存落盘功能。主要在 Sort 算子中使用。一般情况下,不需要修改本配置项,建议 workarea_size_policy 保持为 AUTO。如果认定 Sort 算法中系统自动内存落盘功能不满足业务需要,可以先将 workarea_size_policy 设置为 MANUAL,然后手工指定 _sort_area_size值。

_px_shared_hash_join

SESSION 级系统变量,用于决定Hash Join 是否采用共享哈希表方式进行优化。默认值为 true,表示默认开启 shared hash join 算法。Hash Join 在并行场景下,每个并行线程都是独立计算 hash 表。考虑到左表使用 Broadcast 重分布方式时,因为所有并行工作线程计算出的哈希表是相同的,所以每台机器只需要构造一个 hash 表,由所有工作线程共享,这样可以提高 CPU Cache 友好性。一般情况下,不需要修改本配置项。

5.3 并行 DML 相关的参数调优

OBServer v4.1 起,如果没有事务要求,向表中导入数据时建议使用 INSERT INTO SELECT 加上旁路导入功能,一次性将数据插入到新表。这种方式既可以缩短导入时间,也可以避免写入太快导致内存不足的问题。

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

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

相关文章

一键开启,盲盒小程序里的梦幻奇遇

在这个充满惊喜与未知的数字时代,盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启,你就能踏入一个充满梦幻奇遇的世界,探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台,它更是一个充满神秘与惊喜的宝藏库…

ETL中如何执行Python脚本

Python的解读 Python 是一种高级、通用的编程语言,由荷兰程序员吉多范罗苏姆(Guido van Rossum)于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性,它的语法清晰且表达力强,使得开发者能够以更少的代…

GT2512-STBA 三菱触摸屏12.1寸型

T2512-STBA参数说明:12.1"、SVGA 800*600、65536色、TFT彩色液晶显示屏、AC电源、32MB内存 三菱触摸屏GT2512-STBA性能规格详细说明: [显示部] 显示软元件:TFT彩色液晶显示屏 画面尺寸:12.1寸 分辨率:SVGA 80…

【Vue】Vue的核心

目录 计算属性-computed插值语法实现methods实现计算属性实现使用使用总结: 监视属性-watch监视的两种写法:深度监视备注: computed和watch之间的区别 绑定样式class样式绑定字符串写法数组写法对象写法 style样式绑定对象式1对象式2数组式 条…

Web数字孪生引擎

Web数字孪生引擎是指用于在Web上创建和运行数字孪生的软件平台。它们通常提供一组API和工具,用于连接到实时数据源、可视化数据并创建交互式体验。Web数字孪生引擎被广泛应用于各种应用,例如工业物联网、智能建筑、城市管理和公共安全等。北京木奇移动技…

Unable to locate the .NET SDK

问题描述: vs2019 加载项目时,提示如下: Unable to locate the .NET SDK as specified by global.json, please check that the specified version is installed. 项目中没有globan找al.json 文件 先使用: dotnet --list-sdks 命…

玩游戏专用远程控制软件

玩游戏专用远程控制软件:实现远程游戏的新体验 随着网络技术的不断发展和创新,远程控制软件已经逐渐渗透到我们生活的方方面面,尤其是在游戏领域。玩游戏专用远程控制软件,作为这一趋势下的产物,为玩家提供了全新的游…

linux开发知识点笔记汇总(F1C200S)

1、buildroot常用make 命令 常用命令 意义 make menuconfig buildroot菜单 make uboot-menuconfig uboot菜单 make linux-menuconfig linux菜单 make busybox-menuconfig busybox菜单 make 编译buildroot make linux-rebuild 重新编译linux make uboot-rebuild 重…

MongoDB聚合运算符:$toUpper

MongoDB聚合运算符&#xff1a;$toUpper 文章目录 MongoDB聚合运算符&#xff1a;$toUpper语法使用举例角度的双曲正切 $toUpper聚合运算符用于将字符串转换为大写。 语法 { $toUpper: <expression> }<expression>为可被解析为字符串的表达式。如果参数解析为null…

杭州打的样,适合全国推广

房地产 昨天&#xff0c;杭州和西安全面解除房地产限购。 在房价跌跌不休的今天&#xff0c;这两大城市取消限购其实并不意外。 尤其是杭州&#xff0c;土地财政依赖全国第一&#xff0c;绷不住很正常。 近十年&#xff0c;杭州依靠于亚运会、G20 和阿里巴巴&#xff0c;涨得飞…

霍金《时间简史 A Brief History of Time》书后索引(E--H)

A–D部分见&#xff1a;霍金《时间简史 A Brief History of Time》书后索引&#xff08;A–D&#xff09; 图源&#xff1a;Wikipedia INDEX E Earth: circumference, motion, shape Eclipses Eddington, Arthur Einstein, Albert: biography, see also Relativity; Special…

RabbitMQ高级(MQ的问题,消息可靠性,死信交换机,惰性队列,MQ集群)【详解】

目录 一、MQ的问题 1. 问题说明 2. 准备代码环境 1 创建project 2 创建生产者模块 3 创建消费者模块 二、消息可靠性 1. 介绍 2. 生产者确认机制 3. MQ消息持久化 4. 消费者确认机制 5. 消费者auto模式的失败重试 6. 小结 三、死信交换机和延迟消息 1. 介绍 2. …

Ubuntu Server 22.04 系统性能优化

ubuntu 系统是非常流行和常用的系统&#xff0c;但是在安装系统完毕后系统默认参数可能不太适合物理机性能和并发情况&#xff0c;本篇文章重点介绍通用的性能优化和简单的安全方案。 1、更换系统镜像源 将系统自带的镜像源更新为阿里的镜像源&#xff0c;可以提高软件下载速…

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

目录 引言 LSTM的预测效果图 LSTM机制 了解LSTM的结构 忘记门 输入门 输出门 LSTM的变体 只有忘记门的LSTM单元 独立循环(IndRNN)单元 双向RNN结构(LSTM) 运行代码 代码讲解 引言 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种常用的循环神经网络&a…

Android 如何启用user版本的adb源码分析

通过adb shell中执行getprop persist.sys.usb.config&#xff0c;可以看到系统usb的相关选项&#xff0c;persist.sys.usb.config显示的就是当前系统关于usb选项的系统配置【RK3188Android4.4刚移植的例子】: 全编脚本中make命令会调用build/core/main.mk,在里面可以看到一段…

安全工程师面试题

安全工程师面试题安全工程师是一个非常重要的职位&#xff0c;他们负责保护公司的网络和系统免受黑客和恶意软件的攻击。如果你想成为一名安全工程师&#xff0c;那么你需要准备好面试。下面是一… 1安全工程师面试题 安全工程师是一个非常重要的职位&#xff0c;他们负责保护…

数组小游戏

练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚&#xff08;go to beijing&#xff09; char arr1[]"go to beijing"; char arr2[]"*************";记住&#xff0c;数组元素通过下标访问 第一步&#xff0c;我们想将 (arr1的第一个元素) 放…

SearXNG - 一个注重隐私的互联网元搜索引擎

引言 在数字监控和数据货币化的时代&#xff0c;对于许多用户而言&#xff0c;在线保护个人信息变得至关重要。隐私问题特别突出的一个领域是搜索引擎&#xff0c;它们经常收集用户数据以定制个性化广告或构建用户档案。SearXNG 是一个开源的元搜索引擎&#xff0c;它汇集了各…

后仿真中的必懂VCS仿真选项之+nospecify/+notimingcheck/+no_notifier

今天&#xff0c;抽空学习和整理一下后仿真中的VCS仿真选项之nospecify/notimingcheck/no_notifier共三个选项。“后仿真很重要&#xff0c;坚持点滴学习” 1 选项&#xff1a;nospeicy 在仿真时忽略库文件中指定的延时。 2 选项&#xff1a;notimingcheck 时序检查开关&…

图解HTTP(2、简单的 HTTP 协议)

HTTP 协议用于客户端和服务器端之间的通信 请求访问文本或图像等资源的一端称为客户端&#xff0c;而提供资源响应的一端称为服务器端。 通过请求和响应的交换达成通信 请求必定由客户端发出&#xff0c;而服务器端回复响应报文 请求报文是由请求方法、请求 URI、协议版本、…