ITPUB??ì3
订阅ITPUB精粹播报,社区精彩内容不错过
ITPUB论坛 » Oracle数据库管理 » 什么时候,如何使用no logging?


您有 1 条公共消息
  • 来自: 公共消息 标题: ITPUB国庆假期数 ... 内容: 全新编排的Oracle数据库课程,第一线数据库工程师传授亲身经验,完全摆 ...

    标题: [FAQ] 什么时候,如何使用no logging?
    离线 maying
    中级会员



    精华贴数 0
    个人空间 0
    技术积分 1026 (2277)
    社区积分 0 (80724)
    注册日期 2002-8-27
    论坛徽章:0
          
          

    发表于 2004-7-6 11:51 
    什么时候,如何使用no logging?

    我在执行一句insert语句或者update语句的时候,因为数据量比较大,我能使用with no logging吗?


    __________________
    完美就是不完美,因为少了缺憾美……
    只看该作者    顶部
    离线 lucky_lau
    版主


    精华贴数 2
    个人空间 0
    技术积分 15880 (92)
    社区积分 6102 (353)
    注册日期 2002-1-5
    论坛徽章:14
    管理团队成员2010新春纪念徽章生肖徽章2007版:狗   
          

    发表于 2004-7-6 11:53 
    不能


    __________________
    只看该作者    顶部
    离线 coolbid
    老会员


    精华贴数 0
    个人空间 0
    技术积分 940 (2525)
    社区积分 56 (5981)
    注册日期 2002-3-28
    论坛徽章:1
    授权会员     
          

    发表于 2004-7-6 11:55 
    update不可以
    insert into ... values也不可以
    insert into select可以


    __________________
    I WILL BE BACK
    只看该作者    顶部
    离线 糖醋兔子
    斑竹


    精华贴数 0
    个人空间 0
    技术积分 450 (5367)
    社区积分 295 (2495)
    注册日期 2004-7-1
    论坛徽章:3
    管理团队2006纪念徽章会员2006贡献徽章数据库板块每日发贴之星   
          

    发表于 2004-7-6 12:01 
    insert ...select...
    可以

    先alter table nologging

    然后用insert/*+ append */ into select ......

    但是,你的table上如果有index,redo还是会很多的。
    PHP code:


    SQL
    create table test as select from all_objects where 1=2;



    Table created



    SQL
    insert into test  select from all_objects;



    已创建31011行。





    Statistics

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

           
    1805  recursive calls

           3490  db block gets

         167200  consistent gets

              0  physical reads

        3547480  redo size

            850  bytes sent via SQL
    *Net to client

            569  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              2  sorts 
    (memory)

              
    0  sorts (disk)

          
    31011  rows processed



    SQL
    insert /*+ append */ into test  select from all_objects;



    已创建31011行。





    Statistics

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

           
    1792  recursive calls

           1108  db block gets

         166790  consistent gets

              0  physical reads

         118536  redo size

            841  bytes sent via SQL
    *Net to client

            583  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              1  sorts 
    (memory)

              
    0  sorts (disk)

          
    31011  rows processed



    SQL
    alter table test nologging;



    表已更改。



    SQL
    insert /*+ append */ into test  select from all_objects;



    已创建31011行。





    Statistics

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

            
    213  recursive calls

             87  db block gets

         166074  consistent gets

              0  physical reads

            784  redo size

            843  bytes sent via SQL
    *Net to client

            583  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              6  sorts 
    (memory)

              
    0  sorts (disk)

          
    31011  rows 




    __________________
    那都是很好很好的 可是我偏不喜欢
    只看该作者    顶部
    离线 糖醋兔子
    斑竹


    精华贴数 0
    个人空间 0
    技术积分 450 (5367)
    社区积分 295 (2495)
    注册日期 2004-7-1
    论坛徽章:3
    管理团队2006纪念徽章会员2006贡献徽章数据库板块每日发贴之星   
          

    发表于 2004-7-6 12:11 
    再来看看有index的状况:
    PHP code:


    SQL
    create index ind_test on test (object_id);



    索引已创建。



    SQL
    insert /*+ append */ into test  select from all_objects;



    已创建31012行。





    Statistics

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

            
    263  recursive calls

           1631  db block gets

         166246  consistent gets

              0  physical reads

        2063232  redo size

            843  bytes sent via SQL
    *Net to client

            583  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              2  sorts 
    (memory)

              
    0  sorts (disk)

          
    31012  rows 




    __________________
    那都是很好很好的 可是我偏不喜欢
    只看该作者    顶部
    离线 maying
    中级会员



    精华贴数 0
    个人空间 0
    技术积分 1026 (2277)
    社区积分 0 (80724)
    注册日期 2002-8-27
    论坛徽章:0
          
          

    发表于 2004-7-6 14:54 


    QUOTE:
    最初由 coolbid 发布
    update不可以
    insert into ... values也不可以
    insert into select可以


    非常感谢。能解释一下为什么加了/* + append */后,redo size就明显减少了吗?


    __________________
    完美就是不完美,因为少了缺憾美……
    只看该作者    顶部
    离线 eygle
    天下有雪


    精华贴数 66
    个人空间 0
    技术积分 208184 (2)
    社区积分 6464 (332)
    注册日期 2001-10-8
    论坛徽章:85
    现任管理团队成员2007年度ITPUB杰出贡献年度精华徽章ITPUB元老ITPUB维基人2010数据库技术大会纪念徽章
    2009架构师大会纪念徽章参与2009年中国云计算大会纪念ITPUB北京2009年会纪念徽章八级虎吧徽章2010新春纪念徽章2010年世界杯参赛球队:希腊

    发表于 2004-7-12 19:38 


    QUOTE:
    最初由 糖醋兔子 发布
    insert ...select...
    可以
    PHP code:


    SQL
    create table test as select from all_objects where 1=2;



    Table created



    SQL
    insert into test  select from all_objects;



    已创建31011行。





    Statistics

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

           
    1805  recursive calls

           3490  db block gets

         167200  consistent gets

              0  physical reads

        3547480  redo size

            850  bytes sent via SQL
    *Net to client

            569  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              2  sorts 
    (memory)

              
    0  sorts (disk)

          
    31011  rows processed



    SQL
    insert /*+ append */ into test  select from all_objects;



    已创建31011行。





    Statistics

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

           
    1792  recursive calls

           1108  db block gets

         166790  consistent gets

              0  physical reads

         118536  redo size

            841  bytes sent via SQL
    *Net to client

            583  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              1  sorts 
    (memory)

              
    0  sorts (disk)

          
    31011  rows processed



    SQL
    alter table test nologging;



    表已更改。



    SQL
    insert /*+ append */ into test  select from all_objects;



    已创建31011行。





    Statistics

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

            
    213  recursive calls

             87  db block gets

         166074  consistent gets

              0  physical reads

            784  redo size

            843  bytes sent via SQL
    *Net to client

            583  bytes received via SQL
    *Net from client

              3  SQL
    *Net roundtrips to/from client

              6  sorts 
    (memory)

              
    0  sorts (disk)

          
    31011  rows 



    你这个测试结果可疑的很,我不能再现你的过程
    注意不要使用auto trace来查看redo size
    这个值是有偏差的.

    看看我的测试结果:

    你可以建立这样一个视图给所有用户用:
    PHP code:


    create 
    or replace view redo_size

    as

    select value 

      from v$mystat
    v$statname 

     where v$mystat
    .statistic# = v$statname.statistic# 

       
    and v$statname.name 'redo size';

    测试:
    PHP code:


    SQL
    create table test as select from dba_objects 

      2  where 1
    =0;



    Table created.



    SQLselect from redo_size;



         
    VALUE

    ----------

       
    2320828



    SQL
    insert into test select from dba_objects;



    10470 rows created.



    SQLselect from redo_size;



         
    VALUE

    ----------

       
    3408128



    SQL
    insert /*+ append */ into test select from dba_objects;



    10470 rows created.



    SQLselect from redo_size;



         
    VALUE

    ----------

       
    4491892



    SQL
    select (4491892 -3408128redo2,(3408128 -2320828redo1

      2  from dual
    ;



         
    REDO2           REDO1

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

       
    1083764           1087300



    .

    SQL>

    我的版本:
    PHP code:


    SQL
    select from v$version;



    BANNER

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

    Oracle9i Enterprise Edition Release 9.2.0.3.0 Production

    PL
    /SQL Release 9.2.0.3.0 Production

    CORE    9.2.0.3.0       Production

    TNS 
    for LinuxVersion 9.2.0.3.0 Production

    NLSRTL Version 9.2.0.3.0 
    Production

    .




    __________________
    只看该作者    顶部
    离线 eygle
    天下有雪


    精华贴数 66
    个人空间 0
    技术积分 208184 (2)
    社区积分 6464 (332)
    注册日期 2001-10-8
    论坛徽章:85
    现任管理团队成员2007年度ITPUB杰出贡献年度精华徽章ITPUB元老ITPUB维基人2010数据库技术大会纪念徽章
    2009架构师大会纪念徽章参与2009年中国云计算大会纪念ITPUB北京2009年会纪念徽章八级虎吧徽章2010新春纪念徽章2010年世界杯参赛球队:希腊

    发表于 2004-7-12 19:47 
    进一步的:
    PHP code:


    SQL
    alter table test nologging;



    Table altered.



    SQLselect from redo_size;



         
    VALUE

    ----------

       
    4494224



    SQL
    insert /*+ append */ into test select from dba_objects;



    10470 rows created.



    SQLselect from redo_size;



         
    VALUE

    ----------

       
    4495800



    SQL
    select (4491892 -3408128redo2,(3408128 -2320828redo1,(4495800 -4494224redo3 from dual;



         
    REDO2      REDO1      REDO3

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

       
    1083764    1087300       1576



    .




    __________________
    只看该作者    顶部
    离线 糖醋兔子
    斑竹


    精华贴数 0
    个人空间 0
    技术积分 450 (5367)
    社区积分 295 (2495)
    注册日期 2004-7-1
    论坛徽章:3
    管理团队2006纪念徽章会员2006贡献徽章数据库板块每日发贴之星   
          

    发表于 2004-7-12 20:25 
    恩,我同意你说的autotrace的结果有偏差。
    但是,我的结果还是这样啊

    我的os是win2000的,oracel版本:
    PHP code:


    SQL
    select from v$version;



    BANNER

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

    Oracle9i Enterprise Edition Release 9.2.0.1.0 Production

    PL
    /SQL Release 9.2.0.1.0 Production

    CORE    9.2.0.1.0       Production

    TNS 
    for 32-bit WindowsVersion 9.2.0.1.0 Production

    NLSRTL Version 9.2.0.1.0 
    P

    看看这个测试:
    PHP code:


    SQL
    drop table test;



    表已丢弃。



    SQL
    create table test as select from all_objects where 1=2;



    表已创建。



    SQL
    select value

      2  from v$mystat
    v$statname

      3  where v$mystat
    .statistic# = v$statname.statistic#

      
    4  and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    11830268

      

    SQL
    insert into test  select from all_objects;



    已创建31014行。



    SQL
    >  select value

      2   from v$mystat
    v$statname

      3   where v$mystat
    .statistic# = v$statname.statistic#

      
    4   and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    15384092



    SQL
    commit;



    提交完成。



    SQL
    >  select value

      2   from v$mystat
    v$statname

      3   where v$mystat
    .statistic# = v$statname.statistic#

      
    4   and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    15384176

      

    SQL
    insert /*+ append */ into test  select from all_o



    已创建31014行。



    SQL
    select value

      2  from v$mystat
    v$statname

      3  where v$mystat
    .statistic# = v$statname.statistic#

      
    4  and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    15503656



    SQL
    commit;



    提交完成。



    SQL
    select value

      2  from v$mystat
    v$statname

      3  where v$mystat
    .statistic# = v$statname.statistic#

      
    4  and v$statname.name 'redo size';



         
    VALUE

    ----------

      

    数字就不用算了吧,一眼就看出来了


    __________________
    那都是很好很好的 可是我偏不喜欢
    只看该作者    顶部
    离线 糖醋兔子
    斑竹


    精华贴数 0
    个人空间 0
    技术积分 450 (5367)
    社区积分 295 (2495)
    注册日期 2004-7-1
    论坛徽章:3
    管理团队2006纪念徽章会员2006贡献徽章数据库板块每日发贴之星   
          

    发表于 2004-7-12 20:35 
    oracle10g上的情况:
    PHP code:


    SQL
    select from v$version;



    BANNER

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

    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 Prod

    PL
    /SQL Release 10.1.0.2.0 Production

    CORE    10.1.0.2.0      Production

    TNS 
    for 32-bit WindowsVersion 10.1.0.2.0 Production

    NLSRTL Version 10.1.0.2.0 
    Production



    SQL
    drop table test;



    表已丢弃。



    SQL
    create table test as select from all_objects where 1=2;



    表已创建。



    SQL
    select value

      2  from v$mystat
    v$statname

      3  where v$mystat
    .statistic# = v$statname.statistic#

      
    4  and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    17849016

         

    SQL
    insert into test select from all_objects;



    已创建47827行。



    SQL
    commit;                     



    SQLselect value

      2  from v$mystat
    v$statname

      3  where v$mystat
    .statistic# = v$statname.statistic#

      
    4  and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    35428012

      

    SQL
    insert /*+ append */ into test select from all_objects;



    已创建47827行。



    SQL
    commit;



    提交完成。



    SQL
    select value

      2  from v$mystat
    v$statname

      3  where v$mystat
    .statistic# = v$statname.statistic#

      
    4  and v$statname.name 'redo size';



         
    VALUE

    ----------

      
    35705816&nb

    os也是win2000的。


    __________________
    那都是很好很好的 可是我偏不喜欢
    只看该作者    顶部
    相关内容


    CopyRight 1999-2006 itpub.net All Right Reserved.
    北京皓辰网域网络信息技术有限公司. 版权所有
    网站律师 隐私政策 知识产权声明
    广播电视节目制作经营许可证:编号(京)字第1149号
    京ICP证:060528号 联系我们

    北京市公安局海淀分局网监中心备案编号:1101082001