zoukankan      html  css  js  c++  java
  • day12_oracle hint——oracle hint例子

    一、nologging 使用【强制操作不记录 联机日志,加快操作速度】



    (1) 【一些临时使用的表,比如:操作某些表的某几条记录,表比较小,不想备份整表,做个表的复本!如果操作完毕了,不满意,再从复本表中取回数据!】

    set timing on【打开操作执行时间】

    SQL> alter system flush shared_pool;

    SQL> alter system flush buffer_cache;

    create table test as select * from all_objects;

    Table created.

    Elapsed: 00:00:05.93


     create table test2 nologging as select * from all_objects;
     

    Table created.

    Elapsed: 00:00:02.70


    select TABLE_NAME,LOGGING,OWNER from all_tables where TABLE_NAME in ('TEST','TEST2');
    【校验是否记录日志,如果logging空的话,表可能是分区表、临时表、索引组织表】



    (2) 【一些日志表,不重要的表】

    set timing on【打开操作执行时间】

     
    insert into test select * from all_objects;


    49309 rows created.

    Elapsed: 00:00:05.28



    insert into test2 select * from all_objects;

    49310 rows created.

    Elapsed: 00:00:18.40

    (3)【某一些数据不重要,这个表本身还是要记录日志的】

    set timing on【打开操作执行时间】

    SQL> truncate table test;

    SQL> truncate table test2;

    SQL> drop table test;

    SQL> drop table test2;

    SQL> alter system flush shared_pool;

    SQL> alter system flush buffer_cache;

    SQL> create table test as select * from all_objects;

    SQL> create table test2 as select * from all_objects;

    set timing on【打开操作执行时间】


    SQL> insert into test select * from test;

    49310 rows created.

    Elapsed: 00:00:01.29

    SQL> insert /*+ NOLOGGING */ into test2 select * from test2;

    49309 rows created.

    Elapsed: 00:00:00.30


    二、 append 
    【在使用了append选项以后,insert数据会直接加到表的最上面,是在表的高水位上分配空间,而不会在表的空闲块中插入数据。使用append会增加数据插入的速度。】

    set timing on【打开操作执行时间】

    SQL> truncate table test;

    SQL> truncate table test2;

    SQL> drop table test;

    SQL> drop table test2;

    SQL> alter system flush shared_pool;

    SQL> alter system flush buffer_cache;

    SQL> create table test as select * from all_objects;

    SQL> create table test2 as select * from all_objects;

    set timing on

    SQL> insert into test select * from test;

    49309 rows created.

    Elapsed: 00:00:00.55

    SQL> insert /*+append*/ into test2 select * from test2;

    49310 rows created.

    Elapsed: 00:00:00.19



    三、整合

    set timing on【打开操作执行时间】

    SQL> truncate table test;

    SQL> truncate table test2;

    SQL> drop table test;

    SQL> drop table test2;

    SQL> alter system flush shared_pool;

    SQL> alter system flush buffer_cache;

    SQL> create table test as select * from all_objects;

    SQL> create table test2 as select * from all_objects;



    SQL> insert into test select * from test;

    49309 rows created.

    Elapsed: 00:00:00.41
    SQL> insert /*+ append*/ into test2 nologging  select * from test2;

    49310 rows created.

    Elapsed: 00:00:00.12





    -------------------------------------------------------------------------

    四、parallel 【开启并行,提高速度,占用CPU资源,慎用】


    可以在写SQL时用hint 强制来使用并行。

    HINT 提示修改
    parallel(table,4) 并行度为4 
    parallel(table)  如果使用parallel 但未指定并行度,则DOP要通过初始化参数CPU_count 和Parallel_THREADS_PER_CPU计算得到, 

    并行度为4的程序,最多可以分配或创建9个并行执行服务器来满足这个事务操作,所以并行操作速度有很大提高,但对CPU占用比较多 

    并行操作增加了事务操作的性能,但会连续的记录重做日志,并且造成瓶颈,所以可以使用nologging 模式来避免瓶颈 
    sql> alter  table  table_name  NOLOGGING; 
    sql> select /*+ parallel(table,4)*/ count(*) from table;



    并行处理服务器(Parallel Execution Servers)
    并行处理服务器默认是开启的。因为PARALLEL_MAX_SERVERS参数的默认值是大于0的;

    在SESSION级别修改并行处理
    1 关闭并行处理
    ALTER SESSION DISABLE PARALLEL DML|DDL|QUERY;
    如,关闭DDL的并行处理
    ALTER SESSION DISABLE PARALLEL DDL;
    2 开启并行处理
    ALTER SESSION ENABLE PARALLEL DML|DDL|QUERY;
    如,开启DML的并行处理
    ALTER SESSION ENABLE PARALLEL DML;

    SQL语句强制并行处理
    ALTER SESSION FORCE PARALLEL DML|DDL|QUERY;

    如:强制并行DDL,并行度为5
    ALTER SESSION FORCE PARALLEL DDL PARALLEL 5;
    注:强制并行处理的优先级比SQL语句中HINT的优先级要低





  • 相关阅读:
    国家电网 ERP系统
    小亚通SaaS ERP & 小鹅通 Education
    CRM User(Customer) Employee
    Docker ERP CRM
    OA、CRM、ERP之间的区别和联系是什么?
    基于jfinal开发的12306抢票软件
    15款优质Spring开源项目 脚手架
    Echart 跨域 Data Demo
    区块链+金融,带你直击实践应用中的需求和痛点
    thinkphp 5.0报错pcntl_signal() has been disabled for security reasons问题解决
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/6b9af7bef1da5d9e549a1f2f7613fa90.html
Copyright © 2011-2022 走看看