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

相关文章

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(