关于oracle数据库,表空间,表级的logging属性与hint append

测试环境在归档模式下进行,因为对于redo的产生,个人觉得与是否归档无关.是否归档本质上就是是否需要将重做日志备份(归档日志文件,介质恢复时需要).


查看数据库归档情况和日志属性 更改归档模式需要重启 alter database archivelog;
SQL> select log_mode,force_logging from v$database a ;


LOG_MODE     FORCE_LOGGING
------------ ---------------
ARCHIVELOG   YES


查看表空间的属性
SQL> select a.tablespace_name,logging,force_logging from dba_tablespaces a where
     a.tablespace_name = 'TBS_DATA';


TABLESPACE_NAME                LOGGING   FORCE_LOGGING
------------------------------ --------- ---------------
TBS_DATA                       LOGGING   YES


SQL> set autotrace trace stat


注:以下测试篇幅问题,出掉了统计信息里的部分内容


创建测试表
drop table tb_test1;
drop table tb_test2;
create table tb_test1 (site_name varchar(10)) tablespace tbs_data;
create table tb_test2 (site_name varchar(10)) tablespace tbs_data nologging;
insert into tb_test1 values ('S11');
insert into tb_test2 values ('S11');
insert into tb_test1 values ('S22');
insert into tb_test2 values ('S22');


SQL> insert into tb_test1 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         56  db block gets
         31  consistent gets
       6568  redo size


SQL> insert into tb_test2 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         60  db block gets
         31  consistent gets
       6268  redo size
        
SQL> insert into tb_test1 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          3  db block gets
          1  consistent gets
        244  redo size


SQL> insert into tb_test2 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          3  db block gets
          1  consistent gets
          0  physical reads
        244  redo size


          


结论1:数据库强制归档,表空间强制归档,表级logging与nologging属性差异下,正常的insert的操作对 redo 的产生并没有太大的差异(反复执行脚本多次有几率出现nologging属性产生rode是logging属性的几倍)


删除表继续测试使用直接路径加载
drop table tb_test1;
drop table tb_test2;
create table tb_test1 (site_name varchar(10)) tablespace tbs_data;
create table tb_test2 (site_name varchar(10)) tablespace tbs_data nologging;
insert /*+append_values+*/into tb_test1 values ('S11');
insert /*+append_values+*/into tb_test2 values ('S11');
commit;
insert /*+append_values+*/into tb_test1 values ('S22');
insert /*+append_values+*/into tb_test2 values ('S22');


SQL> insert /*+append_values+*/into tb_test1 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         47  db block gets
         30  consistent gets
          0  physical reads
      13848  redo size


SQL> insert /*+append_values+*/into tb_test2 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         41  db block gets
         29  consistent gets
          0  physical reads
      13332  redo size


SQL> commit;


提交完成。


SQL> insert /*+append_values+*/into tb_test1 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          9  db block gets
          2  consistent gets
          0  physical reads
       8628  redo size


SQL> insert /*+append_values+*/into tb_test2 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          8  db block gets
          2  consistent gets
          0  physical reads
       8416  redo size


结论2:数据库强制归档,表空间强制归档,表级logging与nologging属性差异下,直接路径加载的操作对 redo 的产生并没有太大的差异(反复执行脚本多次有几率出现nologging属性产生rode是logging属性的几倍)






更改数据库以及表空间属性
SQL> alter database no force logging;


数据库已更改。


SQL> alter tablespace tbs_data no force logging;


表空间已更改。


SQL> insert into tb_test1 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         56  db block gets
         31  consistent gets
          0  physical reads
       6376  redo size


SQL> insert into tb_test2 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         60  db block gets
         31  consistent gets
          0  physical reads
       6268  redo size


SQL> insert into tb_test1 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          3  db block gets
          1  consistent gets
          0  physical reads
        244  redo size


SQL> insert into tb_test2 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          3  db block gets
          1  consistent gets
          0  physical reads
        244  redo size


结论3:数据库关闭强制归档,表空间关闭强制归档,表级logging与nologging,在正常的INSERT操作下无太大的差异




SQL> insert /*+append_values+*/into tb_test1 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         43  db block gets
         30  consistent gets
          0  physical reads
      13848  redo size


SQL> insert /*+append_values+*/into tb_test2 values ('S11');


已创建 1 行。




统计信息
----------------------------------------------------------
        136  recursive calls
         42  db block gets
         29  consistent gets
          0  physical reads
       5172  redo size


SQL> commit;


提交完成。


SQL> insert /*+append_values+*/into tb_test1 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          9  db block gets
          2  consistent gets
          0  physical reads
       8628  redo size


SQL> insert /*+append_values+*/into tb_test2 values ('S22');


已创建 1 行。




统计信息
----------------------------------------------------------
          0  recursive calls
          8  db block gets
          2  consistent gets
          0  physical reads
        196  redo size


SQL>
结论4:数据库关闭强制归档,表空间关闭强制归档,表级logging与nologging,在直接路径加载下 表级nologging属性下产生的redo大量的减少(以上为结果)




总结: 1.表空间级logging属性,只影响在该表空间建表时,默认的表logging属性.例如:tbs_data为nologing,在该表空间建表时,默认情况表的logging属性为no.修改表空间logging  alter tablespace tbs_data nologging;
      2.logging级别  数据库>表空间>表
        当数据库,表空间都关闭 force logging 时,同时表级的有nologing属性,此时对于insert操作使用hint append直接路径加载将相对的减少redo的产生.
        当数据库,表空间任意有一级别 force logging 开启时,覆盖了表级nologging属性,此时对insert操作使用hint append直接路径加载不但不会减少redo的产生,反而会产生更多的redo
        
        
       


      


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值