1. Oracle 数据库中的并行执行
By Robin Ma
shadowfalao@gmail.com
http://www.validba.net
2. About Me
Email : shadowfalao@gmail.com
Blog : http://www.validba.net/
QQ:236749409
Over 5 years experience with Oracle DBA technology
Over 5 years experience with Linux/Unix technology and
Windows Server technology
Skilled for Oracle RAC , Data
Guard , Streams , Performance
Tuning , PL/SQL , RMAN ; DB2 ; MySQL ; Linux Shell
15. RAC 环境跨节点并行运行
执行期间查询gv$px_process查看并行进程分配情况,上述查询任
务被分配到两个节点并行运行。
SQL> select server_name,inst_id,sid,status from gv$px_process;
SERVER_N INST_ID SID STATUS
-------- ---------- ---------- ------------------
P019 2 542 I N USE
P015 2 544 I N USE
P021 2 545 I N USE
P031 2 546 I N USE
P028 2 548 I N USE
P018 2 551 I N USE
P022 2 554 I N USE
P027 2 555 I N USE
P010 2 587 I N USE
P024 2 590 I N USE
…………………………………………… -
P011 1 572 I N USE
P007 1 573 I N USE
P018 1 575 I N USE
P010 1 577 I N USE
P003 1 580 I N USE
PZ99 1 583 IN USE
P001 1 592 I N USE
P000 1 594 I N USE
P002 1 595 I N USE
P029 1 596 I N USE
SERVER_N INST_ID SID STATUS
-------- ---------- ---------- ------------------
P019 1 615 I N USE
PZ98 1 AVAILAB LE
22. 并行 DDL
并行 DDL 可能是管理大型数据库的 DBA 用的最多的一个工具了,大型数据库环境
中索引维护 (CREATE,REBUILD) 、数据迁移、分区维护等都能借助并行执行。
SQL> select count(*) from bigtable;
COUNT(*)
----------
28819968
比较一下在一个 2000 多万条数据的表上串行和并行索引的创建时间 .
SQL> create index idx_object_name on bigtable(object_name) tablespace users;
Elapsed: 00:03:46.61
SQL> create index idx_object_name on bigtable(object_name) tablespace users
parallel 4;
Elapsed: 00:02:15.12
23. 并行 DDL
两者相差 1 分 30s 左右。并行的 DDL 相对具有明显的优势,但并行需要多余资源
的支持,在一个十分繁忙 (OLTP 环境 ) 或者资源相对紧张的环境使用并行,不仅不
能提高效能而且会严重影响系统的性能。以下的 DDL 命令允许使用并行:
CREATE INDEX
ALTER INDEX REBULD
CREATE TABLE AS SELECT
ALTER TABLE MOVE
ALTER TABLE SPLIT PARTITION (10g and above)
ALTER INDEX SPLIT PARTITION (10g and above)
27. 并行恢复
并行恢复由系统控制 ,一般发生在实例恢复或者介质恢复的过程中。从 alert 中能
发现并行恢复的足迹。
比如在一个 data guard 环境 ,发现了日志并行恢复的信息,大批量日志恢复的环境
并行是必须的。
Media Recovery Start
Managed Standby Recovery not using Real Time Apply
parallel recovery started with 7 processes
启动了 7 个并行恢复进程。
RMAN 备份中通过 CONFIGURE 命令配置并行。
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
配置 4 通道 并行备份 。
32. DBMS_PARALLEL_EXECUTE 示例
3) 运行并行任务
SQL> set serveroutput on
SQL> set linesize 100
SQL> DECLARE
2 l_sql_update VARCHAR2(32000);
3 BEGIN
4 l_sql_update := 'UPDATE /*+ ROWID(dda) */ bigtable2 t SET t.owner=''SYS'' WHERE t.owner=''PUBLIC''
and rowid BETWEEN :start_id AND :end_id';
5 DBMS_PARALLEL_EXECUTE.run_task(task_name=>'parallel_test',
6 sql_stmt=>l_sql_update,
7 language_flag=>DBMS_SQL.NATIVE,
parallel_level=>8);
END;
8 9 10 /
PL/SQL procedure successfully completed
查询任务运行状态
33. DBMS_PARALLEL_EXECUTE 示例
SQL> col task_name format a40
SQL> SELECT task_name,
status
FROM user_parallel_execute_tasks; 2 3
TASK_NAME STATUS
---------------------------------------- -------------------
parallel_test FINISHED -- 任务已完成
SQL> SELECT status, COUNT(*)
FROM user_parallel_execute_chunks
WHERE task_name='parallel_test'
GROUP BY status
ORDER BY status; 2 3 4 5
STATUS COUNT(*)
-------------------- ----------
PROCESSED 646 -- 所有的 chunk 已全部处理