Oracle笔记 之 并行(parallel)操作(DQL,DML,DDL)
数据库的默认并行度
本例的测试环境:
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)相关推荐
- java连接mysql执行ddl_dljd_(007_009)_jdbc执行DQL/DML/DDL语句
packageedu.aeon.jdbc;importjava.sql.Connection;importjava.sql.Driver;importjava.sql.DriverManager;im ...
- mysql操作语句类型DQL\DML\DDL\DCL
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE ...
- 数据库SQL语言类型(DQL.DML.DDL.DCL)
1.SQL语言 SQL(Structure Query Language)语言是数据库的核心语言. SQL是一个标准的数据库语言, 是面向集合的描述性非过程化语言. 它功能强,效率高,简单易学易维护. ...
- oracle并行parallel update两张表_Oracle与并行性 parallel
Oracle与并行性 并行化操作能力是巨型数据库(Very Large Database,简称VLDB)最重要的特性之一.带有多个CPU的数据库服务器,也被称作SMP,目前是大多数数据库服务器的标准配 ...
- 《Java8实战》读书笔记06:Parallel Stream 并行流
<Java8实战>读书笔记06:Parallel Stream 并行流 第7章 并行数据处理与性能 7.1 并行流 7.1.1 将顺序流转换为并行流 7.1.2 测量流性能 7.1.3 正 ...
- 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·005【表的CRUD操作(DML语句)】
文章目录 一.表的CRUD操作(DML语句) 1.insert语句 2.update语句 3.delete语句 二.其他注意点 1.MySQL查询区分大小写的方式 2.truncate语句与delet ...
- Oracle中的并行
Oracle中的并行 (一)Oracle中的并行 首先,Oracle会创建一个进程用于协调并行服务进程之间的信息传递,这个协调进程将需要操作的数据集(例如表的数据块)分割成很多部分,称为并行处理单元, ...
- oracle笔记一(sql语句方面)
oracle笔记一(sql语句方面) 一.sql语句 --================================================ 1.增加主键 alter table ...
- oracle使用hint启用并行,oracle hint 和 并行
--------HINT--------------------- 1.给优化器多出一种选择 种类: 单表 多表 子查询 整个SQL语句 2.HINT 指定表名不能带上所在SCHEMA名 如果有别名应 ...
最新文章
- 1282. Game Tree
- 云开发新能力,支持 HTTP 调用 API
- 20140625 程序 进程 线程 物理存储器
- signature=c0b9be9cdeb0a9e14dbbc8edc1d4c0e5,NRZ-PM-QPSK 16
- simulink和psim仿真结果不同_在HFSS进行AC耦合电容仿真优化怎么做?
- 网络拓扑结构与静态特征
- android 漩涡动画,使用P5.js构造漩涡动画特效
- Kotlin入门(11)江湖绝技之特殊函数
- win7发现不了无线网络_Win7笔记本怎么设置wifi热点 Win7笔记本设置wifi热点方法【详解】...
- MySql 5.7.26(MySQL8)安装教程
- Scikit-Learn (1.Sklearn提供的常用数据集 - 自带的小数据集)
- 小区停车管理系统(SQL,JDBC)
- 速腾(RoboSense)16线激光雷达调试出点云图(Ubuntu1804和windows系统都已经显示点云),包含各种遇见的坑【避坑指南】{[driver][socket]Rslidar poll}
- 关于左连接查询出现排序问题
- 7-8 哈利·波特的考试 (25 分)(Floyd算法)
- Runtime Error! R6025-pure virtual function call 问题怎么解决
- 广西百强正菱集团涉非法吸存 当地银监局介入摸底银行贷款 柳州公安通告正菱集团涉非法集资
- 云计算基础架构 (二)redis群集
- java:下拉列表框组件
- 倍思和绿联扩展坞哪个好_Macbook用什么扩展坞好?贝尔金对比绿联,国产更胜一筹...