数据库的默认并行度

本例的测试环境:
os:Windows 10 专业版
plsql:Version 14.0.1.1965
Oracle:Version 11.2.0.4.0

单实例数据库的并行度 = parallel_threads_per_cpu x cpu_count
RAC的并行度 = parallel_threads_per_cpu x cpu_count x instance_count

查看数据库的默认并行度(plsql命令窗口):
#查看并行度参数

SQL> show parameter parallel;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fast_start_parallel_rollback         string      LOW
parallel_adaptive_multi_user         boolean     TRUE
parallel_automatic_tuning            boolean     FALSE
parallel_degree_limit                string      CPU
parallel_degree_policy               string      MANUAL
parallel_execution_message_size      integer     16384
parallel_force_local                 boolean     FALSE
parallel_instance_group              string
parallel_io_cap_enabled              boolean     FALSE
parallel_max_servers                 integer     160
parallel_min_percent                 integer     0
parallel_min_servers                 integer     0
parallel_min_time_threshold          string      AUTO
parallel_server                      boolean     FALSE
parallel_server_instances            integer     1
parallel_servers_target              integer     64
#每个逻辑核心的并行度为2
parallel_threads_per_cpu             integer     2
recovery_parallelism                 integer     0

#查看CPU参数

SQL> show parameter cpu;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
#数据量服务器的逻辑核心数为4
cpu_count                            integer     4
parallel_threads_per_cpu             integer     2
resource_manager_cpu_allocation      integer     4

#查看实例参数

SQL> show parameter instance;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
active_instance_count                integer
cluster_database_instances           integer     1
instance_groups                      string
instance_name                        string      master
instance_number                      integer     0
instance_type                        string      RDBMS
open_links_per_instance              integer     4
parallel_instance_group              string
parallel_server_instances            integer     1

测试数据库的默认并行度=8。
#查看表的单实例并行度参数

SQL>  select table_name,degree from user_tables;TABLE_NAME                     DEGREE
------------------------------ --------------------
DIM_COMM_DATE                           1
DIM_COMM_REGION                         1
DIM_COMM_TIME                           1
INF_RUNLOG                              1
MAP_REGION_FJ2COMM                      1
TMP_SHOP                                1

parallel DQL(query)

简要说明

实现方式

可以通过三种方式实现数据的并行查询,分别是hist方式,session方式和object方式。
hist方式允许用户在每次查询时决定是否使用并行查询和如何使用并行度。
session方式允许用户在单个session决定是否使用并行查询和设置默认并行度。
object方式允许用户决定在某个表是否使用并行查询和设置默认并行度。

优先级

hist方式 > session方式 > object方式

注意事项

1,并行查询是以消耗服务器资源为代价获取较快的查询效率,所以请在系统的CPU较多 , IO负载不高,内存够大的时候考虑使用。
2,并行查询主要争对对大批量数据的查询,在olap模式下使用比较多,在oltp模式下请谨慎使用。
3,使用前请查看数据库的默认并行参数,确保设置合适的并行度(经测试,当设置的并行度超过数据库的默认并行度是,无法起到提升查询效率的作用)。

Hist方式

语法:
Select /+parallel(tablename/nickname, n)/ from tablename;
注意:如果使用别名且查询条件中使用别名时,请务必在hist语句中使用表别名。
示例:
#对表ods_fjyw_etl_salelist 启动 并行度4,对表dim_fjyw_etl_shop 启动并行度4进行关联查询

#并行查询
select /*+parallel(m,4)(s,4)*/sum(qty), sum(salevalue), sum(discvalue)from ods_fjyw_etl_salelist m, dim_fjyw_etl_shop swhere m.shopid = s.id;
#并行语句代价Plan Hash Value  : 3423504441 ----------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                  | Rows     | Bytes     | Cost  | Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                       |        1 |        25 | 13588 | 00:02:44 |
|   1 |   SORT AGGREGATE               |                       |        1 |        25 |       |          |
|   2 |    PX COORDINATOR              |                       |          |           |       |          |
|   3 |     PX SEND QC (RANDOM)        | :TQ10001              |        1 |        25 |       |          |
|   4 |      SORT AGGREGATE            |                       |        1 |        25 |       |          |
| * 5 |       HASH JOIN                |                       | 24487727 | 612193175 | 13588 | 00:02:44 |
|   6 |        BUFFER SORT             |                       |          |           |       |          |
|   7 |         PX RECEIVE             |                       |     6289 |     44023 |     6 | 00:00:01 |
|   8 |          PX SEND BROADCAST     | :TQ10000              |     6289 |     44023 |     6 | 00:00:01 |
|   9 |           INDEX FAST FULL SCAN | PK_FJYW_SHOP_ID       |     6289 |     44023 |     6 | 00:00:01 |
|  10 |        PX BLOCK ITERATOR       |                       | 24487727 | 440779086 | 13565 | 00:02:43 |
|  11 |         TABLE ACCESS FULL      | ODS_FJYW_ETL_SALELIST | 24487727 | 440779086 | 13565 | 00:02:43 |
----------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
------------------------------------------
* 5 - access("M"."SHOPID"="S"."ID")
#并行查询耗时
#耗时有波动
# 7000万+数据,耗时 1.784s

#不开启并行查询

select sum(qty), sum(salevalue), sum(discvalue)from ods_fjyw_etl_salelist m, dim_fjyw_etl_shop swhere m.shopid = s.id;
# 语句代价Plan Hash Value  : 3511703330 ----------------------------------------------------------------------------------------------------
| Id  | Operation                | Name                  | Rows     | Bytes     | Cost  | Time     |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |                       |        1 |        25 | 48941 | 00:09:48 |
|   1 |   SORT AGGREGATE         |                       |        1 |        25 |       |          |
| * 2 |    HASH JOIN             |                       | 24487727 | 612193175 | 48941 | 00:09:48 |
|   3 |     INDEX FAST FULL SCAN | PK_FJYW_SHOP_ID       |     6289 |     44023 |     6 | 00:00:01 |
|   4 |     TABLE ACCESS FULL    | ODS_FJYW_ETL_SALELIST | 24487727 | 440779086 | 48869 | 00:09:47 |
----------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
------------------------------------------
* 2 - access("M"."SHOPID"="S"."ID")
#查询耗时
#耗时有波动
# 7000万+数据,耗时 5.216s

Session方式

语法:
alter session force parallel query parallel n;
注意:这里的n是线程当前查询的并行度的上限。
示例:
#当前线程启动并行度8,对表ods_fjyw_etl_salelis和dim_fjyw_etl_shop进行关联查询

alter session force parallel query parallel 8;
select sum(qty), sum(salevalue), sum(discvalue)from ods_fjyw_etl_salelist m, dim_fjyw_etl_shop swhere m.shopid = s.id;
#查询耗时
#耗时有波动
# 7000万+数据,耗时 2.198s

Object方式

语法:
alter table tablename parallel n;
注意:这里的n是表的默认并行度。
示例:
#对表ods_fjyw_etl_salelis和dim_fjyw_etl_shop进行关联查询

#查询表的默认并行度并修改并行度为4
select table_name,degree from user_tables;
alter table ods_fjyw_etl_salelist parallel 4;
alter table dim_fjyw_etl_shop parallel 4;
select table_name,degree from user_tables;
alter session force parallel query parallel 8;
#查询数据
select sum(qty), sum(salevalue), sum(discvalue)from ods_fjyw_etl_salelist m, dim_fjyw_etl_shop swhere m.shopid = s.id;
#查询耗时
#耗时有波动
# 7000万+数据,耗时 2.158s

parallel DML(insert,update,delete,merge)

简要说明

实现方式

可以通过三种方式实现数据的并行操作,分别是hist方式,session方式和object方式。
hist方式允许用户在每次操作时决定是否使用并行和如何使用并行度。
session方式允许用户在单个session决定是否使用并行操作和设置默认并行度。
object方式允许用户决定在某个表是否使用并行操作和设置默认并行度。

优先级

hist方式 > session方式 > object方式

Hist方式

语法:
update:
update /*+ PARALLEL(tablename,4) / tablename set column1 = column1 + 1;
insert:
insert /
+ PARALLEL(tablename1,4) /
into tablename1
select /
+ PARALLEL(tablename2,4) /
*
from tablename2;
delete:
delete /
+ PARALLEL (tablename, 4) */
from tablename;
merge:
merge into tablename1 t1
using (select * from tablename2) t2
on (t1.column1 = t2.column1)
when matched then
update set t1.column2 = t2.column2
when not matched then
insert (t1.column1, t1.column2) values (t2.column1, t2.column2);

session方式

语法:
alter session force parallel DML parallel n;

object方式

同 DQL object方式相同,如果已经设置无须重复设置。
语法:
alter table tablename parallel n;

parallel DDL

简要说明

实现方式

可以通过两种方式实现对象的并行操作,分别是hist方式,session方式。
hist方式允许用户在每次操作时决定是否使用并行和如何使用并行度。
session方式允许用户在单个session决定是否使用并行操作和设置默认并行度。
根据是否是分区表有不同操作:
非分区表有如下操作:
create index;
create table;
alter index … rebuild;
分区表
create index;
create table;
alter index … rebuild;
alter table… [move|split|coalesce] partition;
alter index … [rebuild |split] partition;

优先级

hist方式 > session方式

Hist方式

语法(以非分区表为例):
create index indexname on tablename(column1) parallel 8;
create table tabalename parallel 8 as select * from tablename1;
alter index indexname rebuild parallel 8;

session方式

语法:
alter session force parallel DDL parallel n;

Oracle笔记 之 并行(parallel)操作(DQL,DML,DDL)相关推荐

  1. java连接mysql执行ddl_dljd_(007_009)_jdbc执行DQL/DML/DDL语句

    packageedu.aeon.jdbc;importjava.sql.Connection;importjava.sql.Driver;importjava.sql.DriverManager;im ...

  2. mysql操作语句类型DQL\DML\DDL\DCL

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE ...

  3. 数据库SQL语言类型(DQL.DML.DDL.DCL)

    1.SQL语言 SQL(Structure Query Language)语言是数据库的核心语言. SQL是一个标准的数据库语言, 是面向集合的描述性非过程化语言. 它功能强,效率高,简单易学易维护. ...

  4. oracle并行parallel update两张表_Oracle与并行性 parallel

    Oracle与并行性 并行化操作能力是巨型数据库(Very Large Database,简称VLDB)最重要的特性之一.带有多个CPU的数据库服务器,也被称作SMP,目前是大多数数据库服务器的标准配 ...

  5. 《Java8实战》读书笔记06:Parallel Stream 并行流

    <Java8实战>读书笔记06:Parallel Stream 并行流 第7章 并行数据处理与性能 7.1 并行流 7.1.1 将顺序流转换为并行流 7.1.2 测量流性能 7.1.3 正 ...

  6. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·005【表的CRUD操作(DML语句)】

    文章目录 一.表的CRUD操作(DML语句) 1.insert语句 2.update语句 3.delete语句 二.其他注意点 1.MySQL查询区分大小写的方式 2.truncate语句与delet ...

  7. Oracle中的并行

    Oracle中的并行 (一)Oracle中的并行 首先,Oracle会创建一个进程用于协调并行服务进程之间的信息传递,这个协调进程将需要操作的数据集(例如表的数据块)分割成很多部分,称为并行处理单元, ...

  8. oracle笔记一(sql语句方面)

    oracle笔记一(sql语句方面) 一.sql语句 --================================================ 1.增加主键    alter table ...

  9. oracle使用hint启用并行,oracle hint 和 并行

    --------HINT--------------------- 1.给优化器多出一种选择 种类: 单表 多表 子查询 整个SQL语句 2.HINT 指定表名不能带上所在SCHEMA名 如果有别名应 ...

最新文章

  1. 1282. Game Tree
  2. 云开发新能力,支持 HTTP 调用 API
  3. 20140625 程序 进程 线程 物理存储器
  4. signature=c0b9be9cdeb0a9e14dbbc8edc1d4c0e5,NRZ-PM-QPSK 16
  5. simulink和psim仿真结果不同_在HFSS进行AC耦合电容仿真优化怎么做?
  6. 网络拓扑结构与静态特征
  7. android 漩涡动画,使用P5.js构造漩涡动画特效
  8. Kotlin入门(11)江湖绝技之特殊函数
  9. win7发现不了无线网络_Win7笔记本怎么设置wifi热点 Win7笔记本设置wifi热点方法【详解】...
  10. MySql 5.7.26(MySQL8)安装教程
  11. Scikit-Learn (1.Sklearn提供的常用数据集 - 自带的小数据集)
  12. 小区停车管理系统(SQL,JDBC)
  13. 速腾(RoboSense)16线激光雷达调试出点云图(Ubuntu1804和windows系统都已经显示点云),包含各种遇见的坑【避坑指南】{[driver][socket]Rslidar poll}
  14. 关于左连接查询出现排序问题
  15. 7-8 哈利·波特的考试 (25 分)(Floyd算法)
  16. Runtime Error! R6025-pure virtual function call 问题怎么解决
  17. 广西百强正菱集团涉非法吸存 当地银监局介入摸底银行贷款 柳州公安通告正菱集团涉非法集资
  18. 云计算基础架构 (二)redis群集
  19. java:下拉列表框组件
  20. 倍思和绿联扩展坞哪个好_Macbook用什么扩展坞好?贝尔金对比绿联,国产更胜一筹...

热门文章

  1. 代码随想录--哈希表--三数相加题型
  2. 【ACWing】1191. 家谱树
  3. 非常经典的像素画系列教程
  4. 虚拟机VMware安装苹果MacOS系统无法联网的解决方法 虚拟机MacOS无法联网解决
  5. 为什么在耐压测试前进行绝缘测试?
  6. “中本聪岛”加密乌托邦
  7. 安卓手机老是提示内存不足如何解决
  8. java mysql 插入 乱码_java插入mysql乱码
  9. ssh默认端口修改 Centos 6.6 正式版_32位
  10. 分布式服务框架:原理与实践