ORACLE并行SQL执行PARALLEL
执行多个SQL语句时可以通过配置并行执行来提高执行效率.
几个基本概念:
1). 并行度(Degree of parallelism):
单个操作所关联的并行执行服务器个数. 它有以下条件决定:
1. 在执行语句中的PARALLEL子句
2. 对于一个查询的对象,在创建或更改该对象时使用了PARALLEL关键字
3. PARALLEL hint
4. 有数据库决定的默认值
2). 并行执行服务器(Parallel Execution Servers)
当数据库实例启动后,数据库创建一个并行执行服务器池以供并行操作. 一个叫parallel execution coordinator的进程负责分配Parallel Execution Servers并协调把并行执行的结果返回给用户.
默认情况下Parallel Execution Servers处于开启状态,因为参数parallel_max_servers默认的大于0.
SQL> show parameter parallel_max_servers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_max_servers integer 10
配置并行执行:
可以通过ALTER SESSION子句来控制并行执行.
1). 关闭并行执行特性ALTER SESSION DISABLE PARALLEL DML|DDL|QUERY
执行该语句后,所有随后的DML, DDL 和查询操作都将是序列化,而不管该对象在创建时是否有指定了PARALLEL关键字, 也忽略执行语句中指定的PARALLEL关键字.
SQL> alter session disable parallel ddl;
Session altered.
2). 开启并行执行特性ALTER SESSION ENABLE PARALLEL DML|DDL|QUERY
执行该语句后,随后的包含PARALLEL关键字或hint的执行语句都将并行执行.
默认情况下,并行执行特性对DDL和查询语句是开启.
SQL> alter session enable parallel dml;
Session altered.
3). 强制并行执行SQL语句ALTER SESSION FORCE PARALLEL DML|DDL|QUERY
执行该语句可以强制执行并行操作.
SQL> ALTER SESSION FORCE PARALLEL DDL PARALLEL 5;在建表时指定PARALLEL执行
SQL> CREATE TABLE hr.admin_emp_dept
PARALLEL COMPRESS
AS SELECT * FROM hr.employees
WHERE department_id = 10;