zoukankan      html  css  js  c++  java
  • 表的表空间在users和在system下的区别

    在创建表的时候系统把表空间默认创建在users下,奇怪为什么不创建在system 下呢

    把非系统用户的表存放到系统表空间,至于为什么,原来系统对SYSTEM表空间的自动维护会占用CPU资源,

    如果将普通用户的表存放到系统表空间,效率会下降,下面是转载的测试案例,数据库(11.2.0.2.0 for linux 64bit)测试过程和结果如下:

    create table t_users(id number); --创建的是 默认的用户下
    create table t_system(id number); --把表创建到系统用户下
    select table_name,tablespace_name from user_tables;

    2.查看当前CPU消耗

    SQL> select STATISTIC#,NAME from v$statname where name='CPU used by this session';

    select * from v$mystat where STATISTIC#=16;

    SQL> set timing on
    SQL> begin
      2  for i in 1..100000 loop
      3  insert into t_users values(i);
      4  end loop;
      5  end;
      6  /
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:03.83
    SQL> select * from v$mystat where STATISTIC#=19;

     

     

     

    4.向T_SYSTEM表插入数据,查看CPU消耗

    SQL> begin
      2  for i in 1..100000 loop
      3  insert into t_system values(i);
      4  end loop;
      5  end;
      6  /
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:11.41
    SQL> select * from v$mystat where STATISTIC#=19;

    可见,对存放到非系统表空间的表做同样的INSERT操作,存放在USERS表空间的表只需要执行0秒20和141-120=21的CPU,而存放到SYSTEM表空间的表却要执行0秒23和143-141=2的CPU, 为什么会这样?请看下面两个参数。

     

     db_block_checking参数对block进行逻辑校验,数据库发生update,insert等涉及数据块发生改变的操作后,db_block_checking参数验证每个数据块内部或相关几个块逻辑的完整性,该参数有六个值:OFF,LOW,MEDIUM,FULL,TRUE,FALSE,这些参数含义如下:
    LOW:基本的数据块header checks
    MEDIUM:数据块内部的全面检测,(不包含index organized table blocks)
    FULL:对数据库中所有的块进行全面检测(包括index block)
    OFF: 禁用DB_BLOCK_CHECKING功能(SYSTEM tablespace除外,详见下文的隐含参数)
    true,false是为了向后兼容保留的,true=FULL,false=OFF)
    db_block_checksum参数对数据块进行物理校验,在block写入磁盘和读出磁盘时,oracle会对每个block生成一个校验码,并和block header中校验码进行比对,校验数据块的一致性.此外该参数也对log block执行同样的检测,此外11G中对log block的检测有所细化,该参数有五个值:OFF,FULL,TYPICAL,TRUE,FALSE,这些参数含义如下:
    OFF:禁用DB_BLOCK_CHECKSUM功能(SYSTEM tablespace除外,详见下文隐含参数)
    TYPICAL:数据块读出和写入时对数据块进行物理校验(默认值)
    FULL: 除了TYPEICAL的功能外,还可以对内存中每个BLOCK发生变化(insert,update)的前后进行校验,但这个功能并不能代替DB_BLOCK_CHECKING参数的功能.
    true,false是为了向后兼容保留的,true=FULL,false=OFF)
    无论db_block_checking和db_block_checksum这两个参数的值为何值,SYSTEM 表空间都会执行block checks.不受上述参数影响,跟隐含参数_db_always_check_system_ts有关,该参数默认为TRUE。

    学而不思则罔,思而不学则殆
  • 相关阅读:
    uniGUI试用笔记(九)uniGUI执行程序部署有3种形式1
    CxGrid导出Excel时清除颜色的设置
    delphi 安卓程序如何读取外部配置文件
    cxgrid动态显示行号
    为Delphi程序增加UAC功能(管理员身份运行exe)
    delphi debug release区别是什么?
    启动程序的同时传参给接收程序(XE8+WIN764)
    iOS Development和iOS Distribution有什么区别
    4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程)
    使用Xcode 7 beta免费真机调试iOS应用程序
  • 原文地址:https://www.cnblogs.com/linyu51/p/14025621.html
Copyright © 2011-2022 走看看