zoukankan      html  css  js  c++  java
  • oracle中block

    按资料说V$BH查看表来显示数据库里每个对象类型的数据缓冲区里数据块的数量.



    然后查询V$bh

    select
       owner, object_name                 
      from
       dba_objects o,
       v$bh        bh
    where
       o.object_id  = bh.objd
    and
       o.owner =MOBILEADC

    这一查找出 MOBILEADC 用户创建的对象 数据块的相关信息

     

    也可以查询表的数据快的信息

    select
       owner, object_name                 
      from
       dba_objects o,
       v$bh        bh
    where
       o.object_id  = bh.objd
    and
       o.object_name =’NN_APPLICATION’;

     

     

    v$BH中有个状态

    The possible values of X$BH.STATUS are:

            0, FREE, no valid block image
            1, XCUR, a current mode block, exclusive to this instance
            2, SCUR, a current mode block, shared with other instances
            3, CR,   a consistent read (stale) block image
            4, READ, buffer is reserved for a block being read from disk
            5, MREC, a block in media recovery mode
            6, IREC, a block in instance (crash) recovery mode

     

    可以查询表空间的快大小

    select tablespace_name,block_size from dba_tablespaces;

     

     

     

       在安装数据库的时候我们将db_block_size这个default block size设置成了8k,那么在安装以后Oracle是不允许我们修改默认块大小的。对于一个8196字节大小的数据块一般block overhead会占据其中100个左右的字节,那么剩下的8096字节的空间就用来存储我们的行数据库,如果我们插入1个字节的行数据,那么这个块是否会允许我们插入8096行呢?答案当然是否定的。其实排除pctfreemssm情况下的pctused等段级存储参数,一行的的开销最小也要11个字节左右,因此我们可以算一下8k大小的数据库其实最多可以存储8096/11=736行的数据。

    现在用实验来说明一下:
    SQL> drop table hellotab purge;

    表已删除。

    SQL> create table hellotab
      2  (name varchar2(1)) pctfree 0;
    ---
    这里我们创建了一个只有一列,并且pctfree0的表段,这也表示着,理论上我们这个段可以最大限度的插入数据。

    表已创建。

    SQL> show user;
    USER
    "SYS"
    SQL> desc dba_tablespaces;
     
    名称                                      是否为空? 类型
     ----------------------------------------- -------- ------------------------
     TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
     BLOCK_SIZE                                NOT NULL NUMBER
     INITIAL_EXTENT                                     NUMBER
     NEXT_EXTENT                                        NUMBER
     MIN_EXTENTS                               NOT NULL NUMBER
     MAX_EXTENTS                                        NUMBER
     PCT_INCREASE                                       NUMBER
     MIN_EXTLEN                                         NUMBER
     STATUS                                             VARCHAR2(9)
     CONTENTS                                           VARCHAR2(9)
     LOGGING                                            VARCHAR2(9)
     FORCE_LOGGING                                      VARCHAR2(3)
     EXTENT_MANAGEMENT                                  VARCHAR2(10)
     ALLOCATION_TYPE                                    VARCHAR2(9)
     PLUGGED_IN                                         VARCHAR2(3)
     SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)
     DEF_TAB_COMPRESSION                                VARCHAR2(8)
     RETENTION                                          VARCHAR2(11)
     BIGFILE                                            VARCHAR2(3)

    SQL> select tablespace_name,block_size from dba_tablespaces;

    TABLESPACE_NAME                BLOCK_SIZE
    ------------------------------ ----------
    SYSTEM                               8192
    UNDOTBS1                             8192
    SYSAUX                               8192
    TEMP                                 8192
    USERS                                8192
    EXAMPLE                              8192
    TEST                                 8192
    UNDO_SMALL                           8192
    RBTEST                               8192
    MYALAN                               2048
    可以看到我们的system表空间的大小是标准的8192个字节

    我们再来看看这个段理论上的最大行数
    SQL> select object_name,object_id from dba_objects where object_name='HELLOTAB';

    OBJECT_NAME                                                                                                               OBJECT_ID
    -------------------------------------------------------------------------------------------------------------------------------- ----------
    HELLOTAB                                                                                                                      56661

    SQL> col object_name for a30
    SQL> /

    OBJECT_NAME                     OBJECT_ID
    ------------------------------ ----------
    HELLOTAB                            56661

    SQL>select spare1 from tab$ where obj#=56661;

        SPARE1
    ----------
           736

    确实是736行。

    这个时候我们再查询一下,指定的表段中数据块中的最大达到行数。

    因为我们的hellotab表是空的,所以下面的查询应该返回NULL:
    SQL> select
    max(sys_op_rpb(rowid))from hellotab;

    MAX(SYS_OP_RPB(ROWID))
    ----------------------

    现在向hellotab中插入5000条记录
    SQL> begin
      2  for i in 1 .. 5000
      3  loop
      4     insert into hellotab values('A');
      5  end loop
      6  ;
      7  commit;
      8  end;
      9  /

    PL/SQL 过程已成功完成。


    SQL> select max(sys_op_rpb(rowid)) from hellotab;

    MAX(SYS_OP_RPB(ROWID))
    ----------------------
                       733

    可以看到块中最大的行数是733行。

    进一步通过rowid转换来确定:
    SQL> select file_number,block_id,count(*) row_numbers
      2  from
      3  (
      4  select dbms_rowid.rowid_relative_fno(rowid) file_number,
      5         dbms_rowid.rowid_block_number(rowid) block_id
      6  from hellotab
      7  )
      8  group by file_number,block_id;

    FILE_NUMBER   BLOCK_ID ROW_NUMBERS
    ----------- ---------- -----------
              1      62628         734
              1      62632         596
              1      62629         734
              1      62630         734
              1      62631         734
              1      62626         734
              1      62627         734

    已选择7行。

     

  • 相关阅读:
    GhostNet: More Features from Cheap Operations
    Distribution-Aware Coordinate Representation for Human Pose Estimation
    如何从零开始学习自动化
    selenium---博客园登录
    selenium---屏幕截图
    selenium---web页面定位toast
    selenium---JS修改属性处理日历控件
    selenium---cookie处理
    selenium---处理SSL证书错误问题
    selenium---JS处理滚动条
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9332155.html
Copyright © 2011-2022 走看看