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使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符