GaussDB(DWS)查询优化技术大揭秘

GaussDB(DWS)查询优化技术大揭秘

大数据时代,数据量呈爆发式增长,经常面临百亿、千亿数据查询场景,当数据仓库数据量较大、SQL语句执行效率低时,数据仓库性能会受到影响。本文将深入讲解在GaussDB(DWS)中如何进行表结构设计,如何进行SQL优化,如何查找慢SQL和高频SQL,提高数据仓库的性能和响应速度。

1.认识优化器

1.1 什么是优化器,优化器的作用是什么?

当前市场上的数据库产品,基本上都是基于CBO模型的优化器,因此统计信息的及时收集显得很重要

  • 基于规则的优化器(rbo,rule based optimizer)

基于硬编码的多组内置规则选取最优执行计划,比如优先使用唯一约束或主键来定位存储单元、优先使用Hash索引等等。它不考虑表大小、列大小、数据分布、排序占用的内存大小。优点:基于经验总结出来的一套规则,它的优点是执行计划稳定缺点:对开发者的SQL开发能力要求非常高,只有熟悉各种规则,才能写出优质的SQL。当表数据虽发生变化,原来的执行计划不是最优的时候,优化无法自动调整。

  • 基于成本的优化器(cbo,cost based optimizer)

该优化器通过根据优化规则对关系表达式进行转换,生成多个执行计划,然后CBO会通过根据统计信息(Statistics)和代价模型(Cost Model)计算各种可能“执行计划”的“代价”,即COST,从中选用COST最低的执行方案,作为实际运行方案。优点:可以自动适应表数据量变化,计算量发生变化,自动调节,选择较优的执行计划缺点: 依赖于COST计算模型重要的影响因子: 统计信息,需要给优化器提供准确的统计信息,才能做出好的执行计划。

1.2 SQL执行流程

image-20240114221431704

1.3 什么是执行计划

  • 执行计划是查询语句在数据库中执行过程的描述
  • 执行计划描述了SQL引擎为执行SQL语句进行的操作
  • 分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划;所以执行计划常用于sgl调优

image-20240114221915701

1. 4执行计划怎么生成的

SQL + 表统计信息 =>优化器 => 最优执行计划

image-20240114221933023

1. 5什么是COST?

较各种操作代价时的相对性能指标
PostgresQL的查询优化是基于代价(Cost)的。代价是一个无量纲的值,它并不是一种绝对的性能指标,但可以作为比

  • 举个例子
全表顺序扫描并过滤,代价公式为:
Cost = seq scan cost*relpages + cpu tuple cost*reltuples + cpu operator cost*reltuples

COST计算的两个影响因素,其中数据库参数基本按实践值,一次修改长期不变;表的统计信息,要及时收集,以反映最真实的表数据状态

image-20240114222757145

image-20240114222901615

使用explain命令可以查看优化器为每个查询生成的具体执行计划

edw_db=#h explainCommand:EXPLAINDescription:show the execution plan of a statementsyntax :...] ) ] statement;EXPLAINoptionANALYSE 3 ][VERBOSE ]PERFORMANCE statement;EXPLAINANALYZEEXPLAINSTATS[ boolean ] ) statement;
where option can be:ANALYZE[boolean ]ANALYSEbooleanVERBOSEbooleanCOSTSbooleanCPUboolean]DETAIL[booleanNODESboolean]NUM_NODES[booleanBUFFERSbooTeanTIMINGbooleanPLAN [booleanFORMATTEXTXMLJSON YAML 3
  • INTO/CREATETABLE AS)详细的计划信息
    执行EXPLAIN VERBOSE命令,收集DML语句 (SELECT/UPDATE/INSERT/DELETE/MERGE
EXPLAIN VERBOSE
SELECT
sum(l extendedprice * (1 - l discount)) AS revenue
FROM orders
INNER JOIN lineitem ON l orderkey = o orderkey
o orderdate >=11994-01-01'::date AND o orderdate <1994-01-01'::date +WHEREinterval1 year';
  • INTO/CREATETABLEAS)详细的执行信息
    执行EXPLAIN PERFORMANCE命令,收集DML语句 (SELECT/UPDATE/NSERT/DELETE/MERGE
EXPLAIN PERFORMANCE
SELECT
sum(l extendedprice * (1 - l discount)) AS revenue
FROM orders
INNER JOIN lineitem ON l orderkey = o orderkey
WHERE o orderdate >= '1994-01-01'::date AND o orderdate < '994-01-01'::date + interval '1 year';

1.6 理解执行计划

执行计划阅读方法:

从最右缩进开始;从下往上逐步执行,算子后面的数字表示算子编号,左边表示外表,右边表示内表(如Hash Joim(3.8),3号算子做为外表,8号算子做为内表);

算子运行时间=当前算子的a-time减去下层算子的a-time(如2号算子Hash Jomn(3.8= 25388-21483)

image-20240114223605665

1.7Explain 执行计划-算子介绍

1.7.1 扫描算子

功能:扫描算子的作用是扫描表,每次获取一条元组作为上层节点的输入。
扫描算子普遍存在于查询计划树的叶子节点,它不仅可以扫描表,还可以扫描函数的结果集、链表结构、子查询结果集等

1.7.2 连接算子

连接算子对应于关系代数中的连接操作,主要的几种连接类型如下:

image-20240114224236124

image-20240114224255685

1.7.3 Stream算子

功能: Streaming是一个特殊的算子,它实现了分布式架构的核心数据shuffle功能,Streaming共有三种形态,分别对应分布式结构下不同的数据shuffle功能

image-20240114224451145

1.7.4 物化算子

物化算子是一类可以缓存元组的节点
在执行计划中,很多扩展的物理操作符需要首先获取所有的元组才能进行操作(例如聚集函数操作、没有索引辅助的排序等),这是要用物化算子将元组缓存起来

image-20240114224615912

1.8 总结

本节主要介绍通过Explain命令查看查询语句的执行计划的两种常用方法,并以示例的查询语句为例,详细介绍Explain Performance 命令收集到的各部分执行信息及SQL性能调优过程需要重点关注的信息。

2. 调优流程

  • 静态调优
    根据硬件资源和客户的业务特征确定集群部署方案,表定义。
    • 表定义:行列存、复制/哈希分布等0
    • 集群部署方案和表定义一旦确定,后续改动的代价会比较大
  • 执行态调优(动态调优)根据SQL语句执行的实际情况采取针对性干预SQL执行计划的方式来提升性能
    • SQL改写
    • GUC参数干预
    • Plan Hint

DWS逻辑架构

image-20240114231706155

  • 运维管理模块,提供日常运维、配置管理的管
    理接口、工具。
  • 集群管理模块,管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行
  • 协调节点,负责接收来自应用的访问请求并向客户端返回执行结果
    CN负责分解任务,并调度任务分片在各Data Node上并行执行
  • 全局事务控制器,负责生成和维护全局事务ID事务快照、时间戳等需要全局唯一的信息。
  • 工作负载管理器,控制系统资源的分配,防止过量业务负载对系统的冲击而导致业务拥寒和系统崩溃。
  • 数据节点,负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及向CN返回执行结果
    服务器的本地存储资源,持久化存储数据

全并行架构,发挥系统极致性能

核心问题:
x86 PC Server集群架构下,单核处理能力有限,如何利用x86多核计算资源,提升集群处理性能:华为鳃鹏众核架构下,如何解决众核、Numa架构资源利用问题;

image-20240114231825679

2.1 分布式优化技术,大幅提升分布式执行性能

核心问题:分布式架构下,单机优化方法无法保证最优计划的生成

问题一: 单机SQL逻辑无法完全实现分布式执行?

image-20240114233607010

核心技术:

  • 30+查询重写技术,10+项分布式查询重写,在分布式场景下消除NestLoop和子查询等瓶颈运算
  • 查询重写相关专利4篇

问题二: 单机统计信息不能全面反应分布式数据特征

image-20240114233634471

核心技术:

  • 单机+全局统计信息收集、自动统计信息收集技
  • 基于Poisson的估算模型、全局/单点cost估算模型
  • Local+Global结合的数据处理估算模型

问题三: 数据倾斜会造成分布式执行木桶效应

image-20240114233654710

核心技术:

  • 静态模型:分布式倾斜估算模型
  • 动态模型:RLBT(Runtime Load BalanceTechnology)动态倾斜处理方案

2.2 如何查找待优化SQL

基于topSQL的慢SQL识别

topSQL记录了查询作业运行结束时的资源使用情况(包括内存、下盘、CPU时间、IO等)和运行状态信息(包括报错、终止,异学等)以及性能告警信息

image-20240114235327846

SELECTqueryid,start timeduration,--执行时间warning,--SQL自诊断信息query--SQL语句queryplan--SQL语句简单的explainFROM pgxc wlm session infoWHERE username =edw poc’-- 用户
AND dbname =pluat'-- 数据库AND duration>10000-- 长SQL值,单位msAND start time BETWEEN now0 AND (now0 -interva/ 1 days --SQL时间段ORDER BYduration DESC-- 按照执行时长倒序输出LIMIT100:-- top100
高频SOL: SELECTunique sl id.count() FROM pgxc wlm session imfo WHERE start time >='2023-04-20 15:00:00' and stat time <=2023-04-20 18:00:00GROUPBYunique sql id ORDER BY 2 desc;
CPUSOL: SELECT start time.finish time.block time.usemame.duration.status.abort infosubstr(query.1.100) FROMpgxc wlm session info WHERE start time >=(now0 - interval '1 daty) ORDER BY ax cpu time desc;
不下推SOL:
SELECT start timefinish time,block timeusenameduration.status,abot infosubstr(query,1.100) FROMpgxc wlm session imfo WHERE start time >=(now0 - interval "1 daty) and waming like "%can not be shipped%' ORDER BY duration desc:
复杂SOL:
SELECT nodenamestart time.duration.substring(guery .1.40) as query name.(leneth(query plan) -length(replace(query plan.Streaming,"))/ length(Streaming) as stream count FROM pgxc wlm session info WHERE stream count >= 10 and stat time >= (now0interval '1 day) ORDER BY stream count DESC:
历史SQL: 
SELECT start time.duraton.block time.statusspil info.abort info FROMpgxc wlm session imfo WHERE start time between'2023-08-01'and2023-08-08ORDERBYduration DESC

2.3 静态调优

2.3.1审视和修改表定义
  • 集群部署有SA协助规划,只关注表定义创建策略

  • 数据分布在DN上,好的表定义要求

    • 表数据均匀分布在各个DN口
      防止单个DN数据过多导致集群有效容量下降
    • 表Scan压力均匀分散在各个DN避免单DN的Scan压力过大,形成Scan的单节点瓶颈
    • 减少扫描数据量:通过分区机制实现
    • 尽量减少随机IO:通过聚族/局部聚族可以实现这
    • 减小网络压力

    image-20240114235737326

2.3.2选择存储类型
  • 存储类型的重要性
    • 存储类型决定存储格式,进而影响I/O操作行为
    • 客户业务属性决定表的存储类型
  • 行列存选择依据

image-20240114235922018

2.3.3 分布列-简述
  • 复制(Replication)
    • 集群中每个DN实例上都有一份全量表数据
    • Join操作可减小重分布造成的网络开销
    • 存在数据冗余
    • 适用于小表、维表
  • 哈希(Hash)-- 8.1.3之前默认分布方式
    • 数据通过Hash方式散列到集群的所有DN实例
    • 读写数据可充分利用各个节点O资源,提升读写速度
    • 适用于数据量大的表
  • 轮询(RoundRobin)-- 8.1.3开始之后默认分布方式
    • 数据通过轮询方式发放到集群内所有DN实例
    • 读写数据可充分利用各个节点IO资源,提升读写速度
    • 适用于数据量大的表,且各列都有严重倾斜的表

image-20240115000528462

2.3.4 分布列- 选取原则
  • 选择分布列的基本原则
    • 各个DN列值应比较离散,以便数据能够均匀分布到通常选择表的主键为分布列
      示例:人员信息表,选择身份证号作为分布列
    • 尽量不要选取存在常量等值过滤条件,避免DN剪枝后Scan集中到一个DNcjk的列zqdh 存在常量的约束(例如zqdh=000001),
    • 示例:如果表dwcjk相关查询中经常出现不用zqdh做分布列
    • 选择查询中的连接条件为分布列,以便Join能够推到DN中执行,且减少DN间的通信数据量布方式,无法确定时可以选择roundbobin分布
    • 根据上述原则尽量根据业务特征选择hash分布
2.3.5 分布列-倾斜分析和分布调整
  • 判断数据是否存在存储倾斜的方法: table distribution函数

    • 不同DN的数据量:相差5%以上即可视为倾斜:相差10%以上建议调整分布列

    image-20240115001225108

  • 在线判定列是否倾斜: table skewness函数

image-20240115001341226

2.3.6 选择分布列 典型案例
  • 常见场景

    • a)原始表定义存在数据倾斜,需要通过调整分布列达到数据分区均衡的目标
    • b)把表分布列修改为关联列,达到性能加速的目的
    SELECT
    count(distinctc custkey)FROM customerWHERE c custkey IN (SELECT DISTINCT o custkeyFROM orders custkey     #原orders表的分布列为订单号o orderkeyorders custkey表为调整分布列为客户编号o custkeyALTER TABLE orders DISTRIBUTE BY HASH(o custkey)
    

    image-20240115001509781

2.3.7 局部聚族-简述
  • 局部聚族(Partial Cluster Key,简称PCK)
    • 列存储下一种通过min/max稀疏索引实现基表快速扫描的一种索引技术
  • 适用场景
    • 业务特征:大表大批量数据导入,每次导入数据量远大于DN数*6W
    • 基表存在大量形如col op Const约束,其中col为列名,const为常量值,op为操作符 =、>、>=
    • 选用选择度比较高的简单表达式的列上建pck
  • 使用约束
    • 列存表,一个表只能创建一个PCK
    • 适用数据类型有整型、时间类型、字符串类型
    • 对于字符串类型,如果当前库的collate不为C,则只对表达式col=Const起大加速查询的效果
  • 使用方法
    • 创建表时指定PCK约束,或者ALTER TABLE语法增加PCK约束(只对后续导入数据生效)
2.3.8 局部聚簇- 优化原理

优化原理:入库时候进行局部排序换查询性能

image-20240115001826634

2.3.9 局部聚族-典型案例

image-20240115001926245

image-20240115001932423

2.4 总结

本节主要从表定义角度,介绍静态调优的几种常用方法,从而指导用户根据业务场景正确选择表的存储类型、分布方式和分布列,合理使用局部聚簇、分区表来设计和定义表,提高SQL语句的查询性能

3. 动态调优

3.1 概述

  • 概述

动态调优,即执行态调优,是一个不断分析与尝试的过程

首先,试跑Query;然后,判断性能是否满足客户需求;如果不满足客户需求,则需要进一步分析性能瓶颈点获取性能瓶颈点之后进行针对性优化,重新试跑,一直到满足性能目标。

  • 基本步骤
    判断查询相关表是否已收集统计信息
    判断查询语句是否下推
    收集Perfromance信息进行性能分析,并做针对性优化
    SQL改写优化

image-20240115002311312

3.2动态调优

3.2.1 统计信息-简述
  • 可用的统计信息有哪些?

    • 统计信息(表数据特征)

      • 表的元组数、字段宽度、NULL记录比率、DISTINCT值、MCV值(Most CommonValue)HB
      • 值(直方图,数据分布概率区间)
    • 优化器 (基于代价的优化(Cost-Based Optimization,简称CBO

      • 数据库根据大量表数据特征,结合代价计算模型,通过代价估算输出估算的最优执行计划
      • 统计信息是查询优化的核心输入,准确的统计信息可以帮助优化器选择最合适的查询计划
  • 统计信息如何收集?

    • 使用ANALYZE语法收集整个表或表的若干列的统计信息
  • 如何操作

    • 大批量数据导入/更新/删除之后及时analyze
3.2.2统计信息-典型案例
  • 收集统计信息前后执行计划对比分析

    • E-rows:

    没有收集统计信息的计划中,估计值E-rows比实际值小

    • 执行计划:

    没有收集统计信息的计划中,出现两个低效的Nest Loop算子

    • 示例:

      查询所有供货商在1994年1月1日起的1年间为公司带来的总收入

SELECT
sum(l extendedprice * (1 - l discount)) AS revenueFROM customer, orders, lineitem, supplierWHERE c custkey = o custkeyAND l orderkey = o orderkeyAND I suppkey = s suppkeyAND o orderdate >=1994-01-01'::dateAND o orderdate <11994-01-01'::date + interval '1 year'

image-20240115002822721

3.2.3 不下推分析 -计划类型
  • 并行计算能力是GaussDB(DWS)的性能优势

  • 优化器在分布式框架下有三种执行规划策

    • 下推语句计划

      CN发送查询语句到DN直接执行,执行结果返回给CN

    • 分布式计划

      CN生成计划树,发送计划树给DN执行
      DN执行完后,将结果返回给CN

    • 不下推计划: CN承载大量计算任务,导致性能劣化!

    优化器将部分查询(多为基表扫描语句)

  • 常见的不下推因素

    • 含有shippable属性为false的函数的语句不下推
3.2.4 不下推分析-函数易变属性
  • 函数下推行为的分析
    • 函数的易变属性可分为三种,在创建函数时如果不指定函数易变属性,默认为VOLATILE
      • IMMUTABLE: 相同的入参值,总是返回相同的结果。如,pg catalog.trunc(numeric)
      • STABLE:相同的入参值,同一次表扫描中,函数返回值不变,但在不同SQL语句中函数返回值可能发生变化。
      • VOLATILE:相同的入参值,函数值随时可能返回不同的结果,即便是同在一次表扫描内
    • 函数定义时可指定函数下推属性为SHIPPABLE,默认为NOT SHIPPABLE,即调用函数的SQL语句不下推。
    • 函数的下推行为由其易变属性和下推属性共同决定

image-20240115003343191

image-20240115003348387

3.2.5 Performance分析
  • Explain Performance: 收集Query的执行信息+分析可能的性能问题+针对性优化
  • 重点关注:耗时占整体执行时间高的算子
  • 重要执行信息: DataNode lnformation、Memory Information、Targetlist Information
  • 常见算子的瓶颈及优化策略
    • Scan性能瓶颈
      • 基表扫描元组数过多: 增加索引、使用PCK、使用分区
      • 数据在各个DN分布不均衡: 调整分布列方式
    • Join性能瓶颈
      • Join方式选择不当: 增加索引、使用Plan Hint
      • Join内外表选择不当: 使用PIanHint、改写SQL
3.2.6 Scan性能优化
  • Scan性能提升策略
    • 减少实际IO
      • 标准点查场景: 增加索引; 使用PCK(列存表

image-20240115003700009

3.2.7 Join性能优化- Join类型

表连接(Join): 根据特定规则从两个其他表(真实表或生成表)中派生出结果集

join语法

T1 Join type T2 [join condition]

join类型

语法层支持: 内连接(lnner Join)、外连接(Outer Jin) 和交叉连接(或笛卡尔积,CrossJoin)

T1( [INNER]
T1
[INNER]
TI NATURAL
( LEFT
RIGHT
( LEFT I RIGHT
[INNER]
( LEET
FULL
FULL 1
RIGHT
[OUTER1
[OUTER]
JOINT2ON boolean expression
T2USING ( join column list )
JOIN
FULL 1
OUTER] JOIN T2

3.2.8 Join性能优化-优化策略

策略1:选择高效的Join方式

改写SQL实现HashJoin
优化策略: 尝试将不等值Join条件转化为等值Join条件

image-20240115003915653

策略2:选择合适的内外表

HashJoin:内表小,外表大,执行高效!
使用Plan Hint调整内外表顺序

image-20240115003952617

3.3 总结

本节简要介绍动态调优的基本流程,常用的统计信息及其收集方法,如何根据执行信息分析SQL语句的性能瓶颈,并着重介绍因计划不下推造成性能问题的典型场景码优化等收

4. 总结

在大数据时代,数据量剧增,查询效率成为关键。

GaussDBDWS作为高效的数据仓库解决方案,其查询优化技术是核心。首先,优化器是数据库查询优化的核心组件,分为基于规则的优化器和基于成本的优化器。前者根据硬编码规则选取最优执行计划,稳定但要求高;后者则依赖统计信息和代价模型,能自动适应数据变化,选择最优执行计划。其次,执行计划是查询执行过程的描述,用于分析和调优。最后,调优技术包括静态和动态调优,前者针对已知问题优化,后者则实时调整。此外,分布式优化技术也能大幅提升分布式执行性能。

总之,要提高GaussDBDWS的数据仓库性能和响应速度,需关注表结构设计、SQL优化、慢SQL和高频SQL查找等关键环节。准确统计信息是优化器做出好决策的前提。深入理解执行计划和优化器原理,结合实际场景灵活运用调优技术,是提升大数据查询效率的关键。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python进阶知识:整理6 -> 正则表达式

1 基础匹配用法 # 演示Python中正则表达式re模块的3个基础匹配方法 import re # 1. match()方法 从头匹配 string "hello world" result re.match("hello", string) # 如果头部没有匹配成功就直接失败了,后面就不会继续匹配了 print(result) print(r…

软件测试|Selenium StaleElementReferenceException 异常分析与解决

简介 Selenium 是一个流行的自动化测试工具&#xff0c;用于模拟用户与网页交互。然而&#xff0c;当我们在使用 Selenium 时&#xff0c;可能会遇到一个常见的异常&#xff0c;即 StaleElementReferenceException。这个异常通常在我们尝试与网页上的元素交互时抛出&#xff0…

牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】

文章目录 前言牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】题目及类型思路思路1&#xff1a;大顶堆思路2&#xff1a;快排二分随机基准点 前言 博主所有博客文件目录索引&#xff1a;博客目录索引(持续更新) 牛客-寻找第K大、LeetCode215. 数组中的第K个最大元…

pytest -- 进阶使用详解

pytest-html⽣成报告 Pytest-HTML 是⼀个插件&#xff0c;它可以⽣成漂亮且易于阅读的 HTML 测试报告。 pytest-html ⽣成报告的步骤 ① 安装 pytest-html 插件&#xff1a; pip install pytest-html ② 运⾏测试并⽣成报告&#xff1a; file name:main.pyimport pytest&qu…

苹果MAC怎么清理内存?苹果MAC清理内存的方法

很多使用苹果电脑的用户都喜欢在同时运行多个软件&#xff0c;不过这样会导致在运行一些大型软件的时候出现不必要的卡顿现象&#xff0c;这时候我们就可以去清理下内存&#xff0c;不过很多人可能并不知道正确的清内存方式&#xff0c;下面就和小编一起来看看吧。 苹果MAC清理…

opengauss-高斯数据库的安装部署及MySQL数据迁移实战.

目录 介绍 下载安装包 安装 1.设置SEMMNI 2.新建用户和用户组 3.下载安装包解压 4.安装数据库 5.修改配置 6.重启服务 数据库使用 gsql命令和常用sql 1.使用omm用户连接数据库-本地登陆无需输入密码&#xff1a; 2.查看用户信息 3.删除数据库 4.创建用户 5.创建…

SSL之mkcert构建本地自签名

文章目录 1. 什么是SSL2. mkcert&#xff1a;快速生成自签名证书2.1 mkcert的工作流程如下&#xff1a;2.2 window 本地实现自签证书2.2.1 下载安装2.2.2 下载,生成本地 SSL2.2.3 生成 pem 自签证书,可供局域网内使用其他主机访问。2.2.4 使用-psck12 生成*.p12 文件 2.3 Sprin…

【设计模式-06】Observer观察者模式

简要说明 事件处理模型 场景示例&#xff1a;小朋友睡醒了哭&#xff0c;饿&#xff01; 一、v1版本(披着面向对象的外衣的面向过程) /*** description: 观察者模式-v1版本(披着面向对象的外衣的面向过程)* author: flygo* time: 2022/7/18 16:57*/ public class ObserverMain…

Odoo14 动态过滤或联动domain

在 Odoo14 中最常用的动态过滤或联动domain的方法有两种 1. 使用 上下文 context 和 重写 _search() 或 _name_search() 方法 2. 使用 onchange() 装饰器 的 domain 返回值 示例&#xff1a; 这个图有字段&#xff1a;项目&#xff0c;上级任务&#xff0c;任务 要求&#…

论文笔记(四十)Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds

Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 学习 6D 抓握政策3.1 背景3.2 从点云抓取 6D 策略3.3 联合运动和抓握规划器的演示3.4 行为克隆和 DAGGER3.5 目标--辅助 DDPG3.6 对未知物体进行微调的后视目标 4. 实…

现代密码学 考点汇总(上)

现代密码学 考点汇总&#xff08;上&#xff09; 写在最前面考试范围一、给一个简单的方案&#xff0c;判断是否cca安全二、随机预言机模型之下的简单应用 0. 规约证明一个规约法证明PRG&#xff08;伪随机生成器&#xff09;的例子定长加密方案&#xff0c;并证明不可区分加密…

【二、自动化测试】为什么要做自动化测试?哪种项目适合做自动化?

自动化测试是一种软件测试方法&#xff0c;通过编写和使用自动化脚本和工具&#xff0c;以自动执行测试用例并生成结果。 自动化旨在替代手动测试过程&#xff0c;提高测试效率和准确性。 自动化测试可以覆盖多种测试类型&#xff0c;包括功能测试、性能测试、安全测试等&…

wins安装paddle框架

一、安装 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/windows-pip.html 装包&#xff08;python 的版本是否满足要求&#xff1a; 3.8/3.9/3.10/3.11/3.12&#xff0c; pip 版本为 20.2.2 或更高版本 &#xff09; CPU 版:…

python贪吃蛇游戏

为了实现这个游戏&#xff0c;需要用到Python的pygame模块&#xff0c;它是一个专门用于开发游戏的模块&#xff0c;提供了很多方便的功能&#xff0c;比如窗口、图形、音效、事件处理等。 用pygame来创建一个窗口&#xff0c;设置游戏的背景色&#xff0c;画出蛇和食物&#…

Flutter首页框架搭建

1.下载flutter 2. 安装android 3.配置环境变量 关于环境搭建部分&#xff0c;哪天写一下&#xff0c;日志杂乱无章。 打开android studio 新建项目&#xff0c;选择flutter 新建文件夹创建 navigator和pages 文件夹下分别创建文件&#xff0c;tab_navigator.dart&#xff…

Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

文章目录 RTMP服务器搭建与视频流推送第一部分&#xff1a;搭建RTMP服务器&#xff08;流媒体服务器&#xff09;1.1 安装Docker1.2 搭建RTMP服务器 第二部分&#xff1a;使用ffmpeg进行视频推流&#xff08;推流客户端&#xff09;2.1 安装ffmpeg2.2 使用ffmpeg推流 第三部分&…

【数据结构】二叉树-堆(top-k问题,堆排序,时间复杂度)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 堆排序 第一种 ​编辑 第二种 …

npm install 无反应 npm run serve 无反应

说明情况&#xff1a;其实最开始我就是发现我跟着黑马的苍穹外卖的前端day2的环境搭建做的时候&#xff0c;到这一步出现了问题&#xff0c;无论我怎么 npm install 和 npm run serve 都没有像黑马一样有很多东西进行加载&#xff0c;因此我换了一种方法 1.在这个文件夹下cmd …

助力工业焊缝质量检测,YOLOv3开发构建工业焊接场景下钢材管道焊缝质量检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《轻量级模型YOLOv5-Lite基于自己的数据集【焊接质量检测】从零构建模型超详细教程》 《基于DeepLabV3Pl…

计算机组成原理-程序中断方式完整流程

文章目录 程序中断方式完整流程例题小结 程序中断方式完整流程 首先CPU通过执行IO指令来启动外部设备&#xff0c;此时外部设备可以开始做准备工作了&#xff08;准备CPU想要的数据或者信息&#xff09;&#xff0c;在外部设备准备过程中&#xff0c;CPU可以继续执行原程序的内…