Oracle并行操作——浅议使用并行的时机

2024-04-02 08:18

本文主要是介绍Oracle并行操作——浅议使用并行的时机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相对于我们经常使用的Oracle优化技术,并行操作是一种很特殊的选择。恰当合理、有选择的对一些SQL语句进行并行化处理,可以有针对性的提升系统一些关键业务场景的执行效率。但是,另一方面,如果使用并行过多过滥,甚至处处并行,那么可能引起服务器整体过载的现象。

 

那么,我们如何判断此时应该进行并行化处理?如何得知哪个时候可以使用并行呢?

 

1、影响并行因素分析

 

并行技术是一种软硬件综合技术。硬件方面的基础就是多CPU系统的普及和广泛应用,多磁盘IO负载分割。硬件方面的提升为并行技术的实现提供了物质上的基础,多个CPU可以真正的同时完成任务。软件方面的并行基础就是并行算法研究的成熟,一个任务如何分解,分解子任务如何进行沟通、合并等等。软件方面重新实现了一套算法体系,支持了系统并行计算的实现。

 

 

那么,我们的并行操作决策受到哪些因素作用和影响呢?

 

 

ü        服务器CPU个数和运算能力

 

相对于如索引、聚簇表等逻辑优化手段,并行操作是一种硬件条件强依赖的优化手段。其中,CPU的个数是并行操作效果的决定因素。如果数据库服务器拥有多个CPU,那么采用并行操作的效果就会更好。反之,如果服务器只有一块CPU,设置的SQL又要求一个很高的并行度指标,那么并行进程之间争用CPU的现象会很多,反而影响到并行整体性能。

 

 

作为企业级应用,部署的数据库服务器硬件条件应该是有一定水准的。随着多核CPU和多CPU服务器的普及,并行操作的硬件条件会慢慢不再成为瓶颈所在。

 

 

ü        数据存储的分散性

 

通常情况下,Oracle服务进程Server Process获取一个数据块,首先是从高速缓存Buffer Cache中尝试获取对应的块。当没能寻找到数据块时,就直接从磁盘上将数据块获取到Buffer Cache中,之后再进行写入等操作。

 

但是,并行操作的方式却有所不同。并行操作是多个Process进程在访问相同的一批数据,如果全部按照Buffer Cache,后磁盘的顺序进行操作,很容易造成数据块争用和等待。所以,通常的并行操作都是直接针对磁盘上的数据文件进行读写。那么,如果我们的数据分散度较好,就可以很大程度上避免争用现象。

 

 

另一方面,数据库存储结构越来越独立化。专门的磁盘阵列机的出现,使得数据库IO能力提高。将数据文件分散在多个磁盘上,进行分散的IO操作和CPU运行操作,是一个发展方向。

 

 

ü        特定SQL考虑使用并行

 

并行操作通常不是我们的本能选择,也不会是我们的本能选择。因为并行操作本身涉及到的范围很广,包括软硬件的协调、数据库参数的调整。可以说,并行操作是一种需要特定支持、且不断调试的工程。作为一般情况下,我们尽量不选择将其作为首要优化目标。

 

 

只有对于其他优化策略效果不好,或者根本就没有其他解决方案的时候,考虑进行并行化操作。通常这样情境下的SQL具有如下特点:

 

1、系统关键需求用例,没有回旋和妥协余地。通常是大作业或者报表操作,现有SQL处理方式难以满足用户需求;

2、SQL涉及数据表量巨大,响应时间不能接受;

3、对大数据量数据表或者索引的DDL操作;

 

这样类型的SQL在OLTP系统中是不常见的,OLTP系统的侧重点一般都是高并发、小事务和快速响应。Oracle并行操作是在OLAP系统中广泛应用。当系统中出现了类似的问题和场景,可以考虑使用并行操作来提高系统整体相应。

 

 

ü        主机存在资源盈余

 

 

通常情况下,生产环境的主机一般都不会做到满负荷应用。并行操作是强制性的获取到主机处理资源的一种手段,这样做的前提是主机还存在资源盈余。所以,在判断进行并行操作之前,要确定是否可能主机已经满负荷。

 

 

ü        SQL已经过优化调整

 

在各种调优层次级别中,从业务层面、SQL书写层面进行的调优是性价比最高的一种类型。一种业务思路的变化和优化,可以就消除了若干及其复杂连接扫描操作。所以,进行优化的首先是从SQL本身的业务角度进行优化调整。

 

SQL本身没有调优空间时,而且其他技术不能解决本身的海量数据操作时,可以考虑使用并行操作。

 

2、项目开发中并行操作规划

 

注意,笔者在这里使用到了规划planning。的确,经过上面的介绍,并行操作是一种需要高级别关注的优化方案。笔者认为,可以从下面几个方面做到规划:

 

ü        预先识别,密切关注分析

 

对一些关键用例中涉及到的关键SQL,开发团队中的开发DBA要做到事先心中有数。适时和开发团队设计团队进行沟通交流,提出有益的意见,衡量使用并行操作的必要性和可行性。原则还是一样,能利用串行满足需求,就慎用并行。

 

 

ü        集中规划,统一设置

 

并不是每个需求说需要并行化就进行并行化。我们说整个系统中,需要和能够进行并行化操作的场景是少数。开发DBA在接受到这样的需求之后,要根据投产环境的承受能力按照优先级进行实现。系统的并行承受能力不是无限的,尽可能满足更多的重要用例,获取更高的投入产出比是一个方向。

 

 

ü        保持监控,随时调整

 

优化方案不是一成不变的,因为需求是在不断的变化、数据也在不断的演变,根据一时理解的优化方案可能也有需要变化更新的时候。这就要求存在一种优化方案跟踪机制,定期监控方案并行操作的执行情况和效率。随时发现和解决问题。

 

3、结论

 

并行操作的确立需要慎重,是一个不断重复、推敲和衡量的过程。

这篇关于Oracle并行操作——浅议使用并行的时机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869452

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他