zoukankan      html  css  js  c++  java
  • oracle并行模式(Parallel)

    引自:https://blog.csdn.net/c2311156c/article/details/80660734

    一、 并行查询

    并行查询允许将一个sql select语句划分为多个较小的查询,每个部分的查询并发地运行,然后将各个部分的结果组合起来,提供最终的结果,多用于全表扫描,索引全扫描等,大表的扫描和连接、创建大的索引、分区索引扫描、大批量插入更新和删除
     
    1.    启用并行查询
    SQL> ALTER TABLE T1 PARALLEL;
    告知oracle,对T1启用parallel查询,但并行度要参照系统的资源负载状况来确定。
    利用hints提示,启用并行,同时也可以告知明确的并行度,否则oracle自行决定启用的并行度,这些提示只对该sql语句有效。
    SQL> select /*+ parallel(t1 8) */ count(*)from t1;
     
    SQL> select degree from user_tables where table_name='T1';
    DEGREE
    --------------------
      DEFAULT
     
    并行度为Default,其值由下面2个参数决定
    SQL> show parameter cpu
     
    NAME                                TYPE       VALUE
    ----------------------------------------------- ------------------------------
    cpu_count                           integer    2
    parallel_threads_per_cpu            integer    2
     
    cpu_count表示cpu数
    parallel_threads_per_cpu表示每个cpu允许的并行进程数
    default情况下,并行数为cpu_count*parallel_threads_per_cpu
     
    2.    取消并行设置
    SQL> alter table t1 noparallel;
    SQL> select degree from user_tables wheretable_name='T1';
     
    DEGREE
    ----------------------------------------
            1
     
    3.    数据字典视图
    v$px_session
    sid:各个并行会话的sid
    qcsid:query coordinator sid,查询协调器sid
     
    二、 并行dml
    并行dml包括insert,update,delete,merge,在pdml期间,oracle可以使用多个并行执行服务器来执行insert,update,delete,merge,多个会话同时执行,同时每个会话(并发进程)都有自己的undo段,都是独立的一个事务,这些事务要么由pdml协调器进程提交,要么都rollback。
    在一个有充足I/o带宽的多cpu主机中,对于大规模的dml,速度可能会有很大的提升,尤其是在大型的数据仓库环境中。
    并行dml需要显示的启用
    SQL> alter session enable parallel dml;
     
    Disable并行dml
    SQL> alter session disable parallel dml;
     
    三、 并行ddl
    并行ddl提供了dba使用全部机器资源的能力,常用的pddl有
    create table as select ……
    create index
    alter index rebuild
    alter table move
    alter table split
    在这些sql语句后面加上parallel子句

    SQL> alter table t1 move parallel;
    Table altered
    SQL> create index T1_IDX on T1 (OWNER,OBJECT_TYPE)
     2   tablespace SYSTEM
    3        parallel;
    4        ;




    1.  用途

    强行启用并行度来执行当前SQL。这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能。举例的话,就像电脑装了多核的CPU,但大多情况下都不会完全多核同时启用(2核以上的比较明显),使用parallel说明,就会多核同时工作,来提高效率。

    但本身启动这个功能,也是要消耗资源与性能的。所有,一般都会在返回记录数大于100万时使用,效果也会比较明显。

    2.  语法

    /*+parallel(table_short_name,cash_number)*/

    这个可以加到insert、delete、update、select的后面来使用(和rule的用法差不多,有机会再分享rule的用法)

    开启parallel功能的语句是:

    alter session enable parallel dml;

    这个语句是DML语句哦,如果在程序中用,用execute的方法打开。

    4.  Parallel也可以用于多表

    多表的话,就是在第一后面,加入其他的就可以了。具体写法如下:

    /*+parallel(t,10) (b,10)*/

    5.  小结

    关于执行效率,建议还是多按照index的方法来提高效果。Oracle有自带的explan road的方法,在执行之前,先看下执行计划路线,对写好的SQL tuned之后再执行。实在没办法了,再用parallel方法。Parallel比较邪恶,对开发者而言,不是好东西,会养成不好习惯,导致很多bad SQL不会暴漏,SQL Tuning的能力得不到提升。我有见过某些人create table后,从不create index或primary key,认为写SQL时加parallel就可以了。

  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/x-jingxin/p/10096194.html
Copyright © 2011-2022 走看看