码迷,mamicode.com
首页 > 数据库 > 详细

Oracle体系结构知识点的运用

时间:2015-04-08 00:47:07      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

体系结构方面的优化问题:

  1. 设数据库很大,访问量非常高,共享池很小:这样共享池里面就无法存储很多解析过得sql语句,导致很多硬解析,这样数据库就非常缓慢。这个时候要加大共享池。如果是自动管理,就加大SGA的大小。
  2. 设:某平时不经常访问的数据库的主机才4G内存,去开辟了3G的SGA,500m的PGA,由于OS操作系统内存不足,导致主机运行缓慢,我们要减少SGA大小。
  3. 如果由于数据缓存区过小而产生的大量物理读,则要增大SGA。
  4. 如果排序使用了临时表空间,就说明PGA过小,如果系统有额外的大量内存,可以考虑多分配一部分给PGA(一般是OLAP系统)
  5. 如果数据库有大量的更新操作,产生大量的日志导致日志切换频繁,在日志切换过程中,数据库会停滞运行,为了提高性能,需要加大日志文件的大小。
  6. 如果某个应用因为老是查出ORA-01555错误而无法把值给下一个模块使用,导致生产出现故障。需要检查为什么这个sql执行这么慢。优化的方法:加索引,清理历史数据,让表的记录小一点,或者增大undo_retention的值(这个值只是建议值,非强制),也可以增大undo表空间。

具体的sql优化:

  1. 构造环境 + 未优化(单车速度:40+秒
    sqlplus 
    drop table t purge;
    create table t (x int);
    alter system flush shared_pool;
    set timing on
    
    create or replace procedure proc1
    as 
    begin
        for i in 1..100000
        loop
            execute immediate
            ‘insert into t values(‘||i||’)’;
        commit;
        end loop;
    end;
    /
    exec proc1;
    col sql_text format a30
    set pagesize 1000
    select t.sql_text,t.sql_id,t.parse_calls,t.executions from v$sql t where sql_text like ‘%insert into t values%‘ and rownum<100;
  2. ##resetpool.sql:
    drop table t purge; create table t(x
    int); alter system flush shared_pool; set pagesize 1000 col sql_text format a30
  3. 绑定变量,摩托速度:8+秒
    create or replace procedure proc2
    as
    begin
            for i in 1..100000
            loop
                    execute immediate
                    insert into t values( :x ) using i;
                    commit;
            end loop;
    end;
    /
    select t.sql_text,t.sql_id,t.parse_calls,t.executions from v$sql t where sql_text like %insert into t values%‘;
  4. 静态改写,汽车速度:6+秒
    create or replace procedure proc3
    as
    begin
            for i in 1..100000
            loop
                    insert into t values( i );
                    commit;
            end loop;
    end;
    /
  5. 批量提交,动车速度:2秒
    create or replace procedure proc4
    as
    begin
            for i in 1..100000
            loop
                    insert into t values( i );
            end loop;
    commit;
    end;
    /
  6. 集合写法,飞机速度:.14秒
    insert into t select rownum from dual connect by level <=100000;
  7. 直接路径,火箭速度:.89秒,在10万的时候是.23所以需要量才能看得出来快了。
    create table t as select rownum x from dual connect by level <= 1000000;
  8. 并行设置,飞船速度:需要有多cpu:本机实测1.05秒比6性能差,一般在机器空闲而且性能强大时用。
    create table t nologging parallel 4 as select rownum x from dual connect by level <=1000000;

Oracle体系结构知识点的运用

标签:

原文地址:http://www.cnblogs.com/alexweng/p/4401082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!