运用PARALLEL方式成倍提升Oracle数据分析效率
来源:互联网 发布:帝国cms投票系统 编辑:程序博客网 时间:2024/06/07 05:08
Oracle作为一种大型数据库,在我国已成为大型企事业单位(如公立医院)的主流数据库并占有了绝对的市场份额。这就意味着审计工作同Oracle的交集越来越多,同时这种数据库的使用也意味着远超SQL SERVER的海量数据信息,其数据分析效率成为严重制约审计工作进度的瓶颈。本文将介绍在Oracle中如何通过采用PARALLEL(并行)方式最大化调用计算机资源来成倍提高数据分析效率。
什么是PARALLEL
在Oracle中,对于一条执行语句,默认是用一个CPU进程进行串行执行(就好比我们一个审计项目从审计调查到最后出报告都只由一个人来一步一步执行,执行效率的低下是显而易见的)。而现在的CPU一般都拥有多核心多线程,这时我们就可以将一条执行语句交由这些多线程进行并行执行(就像一个审计项目成立了一个审计组,由各不同的人员分任务分别执行,最后汇总出报告)。这也就是Oracle的PARALLEL方式的基本原理。排除存储介质带宽等因素,理论上来说,调用了多少个CPU线程就可以缩短语句执行时间多少倍。以较为常见的单路至强处理E3-1230V3服务器为例,CPU总线程为8,因此如果采用PARALLEL调取8个线程执行查询语句,理论上会使执行时间缩短8倍。如果在双路甚至四路服务器上更会有几十倍的效率提升。
如何查看能够利用的并行进程数
如上所说,CPU的总线程决定了PARALLEL能调用的最大资源,因此,要知道计算机的总线程数才能确定能利用的最大资源数。一般来说计算机总线程数=CPU个数×每个CPU的物理核心数量×每个核心的线程数量。以上面提到的单路至强E3-1230V3 CPU为例,总线程数为=1(1个CPU)×4(4个物理核心)×2(每个核心2个线程)=8。如果用的Windows操作系统,查看计算机总线程数最简单的办法是查看“任务管理器-资源监视器-CPU”资源监视窗口个数,有几个CPU监视窗口就表示有几个线程。非Windows操作系统可以在Oracle命令提示符中输入Show Parameters CPU来查看CPU线程数。
如何使用PARALLEL执行查询
Oracle中PARALLEL的查询执行方式有三种。一是修改会话(Session)级别默认的并行度;二是修改表级别的并行度;三是采用Hint方式设置语句级别的并行度。因为Hint方式具有灵活度较高的优点,因此本文主要介绍通过Hint方式现实PARALLEL的查询执行。其查询执行语句格式为:
SELECT /*+PARALLEL(n)*/ * FROM table
其中的(n)为设置要调用的并行度数量。
PARALLEL的运用实例
下面以某医院的入院费用明细表inp_bill_detail(含有记录23704010行)为例,实测运用PARALLEL方式查询效率。
1.查看Oracle能利用的最大并行度:
SQL> show parameters cpuNAME TYPE VALUE------------------------------------ ----------- -------cpu_count integer 8parallel_threads_per_cpu integer 2resource_manager_cpu_allocation integer 8
结果显示CPU逻辑核心数为8,每个CPU的并行线程数为2(物理核心数为8/2=4核),这个8就是本计算机的总线程数也就是PARALLEL能利用的最大并行度。
2.PARALLEL效率测试。先测试在默认状态下对此表进行全表查询的计划用时:
SQL> EXPLAIN PLAN FOR 2 SELECT * FROM inp_bill_detail ;已解释。SQL> SELECT * FROM TABLE(dbms_xplan.display);PLAN_TABLE_OUTPUT---------------------------------------------------------------------Plan hash value: 1223321316-------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 23M| 4362M| 204K (2)| 00:40:54 || 1 | TABLE ACCESS FULL| INP_BILL_DETAIL | 23M| 4362M| 204K (2)| 00:40:54 |-------------------------------------------------------------------------------------
可以看到进行全表查询的预计执行时间为40分54秒。
3.将并行度设置为8,测试在此状态下进行全表查询的计划用时:
SQL> EXPLAIN PLAN FOR 2 SELECT /*+PARALLEL(8)*/ * FROM inp_bill_detail ;已解释。SQL> SELECT × FROM TABLE(dbms_xplan.display);PLAN_TABLE_OUTPUT---------------------------------------------------------------------Plan hash value: 2466333535---------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 23M| 4362M| 28341 (2)| 00:05:41 || 1 | PX COORDINATOR | | | | | || 2 | PX SEND QC (RANDOM)| :TQ10000 | 23M| 4362M| 28341 (2)| 00:05:41 || 3 | PX BLOCK ITERATOR | | 23M| 4362M| 28341 (2)| 00:05:41 || 4 | TABLE ACCESS FULL| INP_BILL_DETAIL | 23M| 4362M| 28341 (2)| 00:05:41 |---------------------------------------------------------------------Note----- - Degree of Parallelism is 8 because of hint
可以看到将并行度设置为8后,进行全表查询的预计执行时间大大缩短到5分41秒,效率提升近七倍。
值得注意的是,在实际使用中,计算机除了运行Oracle外,同时还在运行其他程序(如系统程序)。因此,用PARALLEL调用CPU线程值应设定为小于最大CPU线程的数值(笔者一般采用的值为:CPU线程总数-2)以避免将所有CPU资源强行分配给Oracle使用后导致系统无响应等情况发生。
- 运用PARALLEL方式成倍提升Oracle数据分析效率
- 运用PARALLEL方式成倍提升Oracle数据分析效率
- 提升数据库数据查询效率
- kettle 数据提取效率提升
- oracle 并行parallel操作,会大大提高sql执行效率
- Opencv中Mat数据访问方式效率对比分析
- Mongodb采用$in方式提升操作效率
- 巧用方式提升查询效率
- Oracle高级查询实例,提升效率
- sqlite插入数据效率提升解决方案
- 提升数据的查询效率----索引
- 大数据时代如何提升研发效率
- Oracle Parallel
- oracle parallel
- 在mysql中让表中的数据成倍增加
- 找到正确的方式才是提升效率的最佳方式
- 能成倍提高Eclipse编辑效率的快捷键
- list遍历方式效率分析
- 随着input里边值的变化而触发js事件
- ios 定位新功能----在程序中实现定位功能
- Solr 4.7.2 平台搭建(Solr发布到Tomcat6的详细配置)
- 按16进制打印显示一个字节数组的内容
- testng 失败自动截图
- 运用PARALLEL方式成倍提升Oracle数据分析效率
- POI操作Excel常用方法说明
- 国嵌-第四季第六课u-boot入门不能进入u-boot菜单(tiny6410)
- 静态顺序表
- LWIP内存池memp.c文件学习
- Hadoop开发遇到的问题
- Spring MVC 教程,快速入门,深入分析
- Adam学习8之数据获取
- JQuery中的id选择器含有特殊字符时,不能选中dom元素的解决方法