接上文 Oracle 段区块 分配 (1)

六, oracle 的行迁移和行链接. (Row Chaining and Migrating)
   
上面提过了, oracle是允许把多个数据行放到同1个块中的。
     而且, oracle会尽量把同1个数据行的所有数据放到同1个块中, 这样避免读取1个数据行要访问2个或以上的块.

而oracle是怎么避免这个问题呢。1个关键就是pctfree 和 pctused 的设置

6.1 pctfree
    
这个参数在新建1个table/cluster的时候可以被指定。  默认是10%

假如 pctfree 的值是10%, 那么当1个block的剩余空间一但只剩下10%时, 这个block就不允许insert 新的数据行入来了。
      那么这个10% 空间是否就没用呢, 不是, 它用于预留给这个block 当前存在的数据行数据行因为update操作而造成的数据增长。

也就是说当1个block的剩余空间减少到pctfree的值时。 就不允许被insert 新的数据行了。但是里面的数据允许被update或delelte.

这样做的好处是避免因为update动作, 导致blocks的里面空间不够用. 当因为这种情况出现时, 那么其中一条或多条数据行的数据就在这个block里装不下了。

6.2 行迁移
        因为上面的出现的情况
         oracle就会把这个整个行移动另1个块(很可能不是物理连接的下1个块),而在原来那个block那个行原来位置写上1个指针。指向被转移到的那个新block的地址(编号)。 这个就是行迁移( Row chainnig)

这个情况下, 为了读取这个数据行。 就必须读取两个块。 性能下降了。
         所以行迁移的出现通常是因为pctfree过少。 被一次update动作挤暴..
         行迁移多了,就会导致数据表性能下降。

6.3 行链接

上文说过了, Oracle会尽最大努力把同1个数据所有行放如到1个块中/
      但是当1个数据行数据实在太大(大于块的容量), 这时就必需用2个或以上的block来存放这个数据行。

行链接同样会导致访问1个数据行而访问多个blocks

而行链接通常是因为blocksize大小不足导致的。 所以如果一张表的列很多很长, 建议把它放到blocksize 比较大的表空间中。

    
         6.4 查看行迁移和行链接.
 SELECT table_name,NUM_ROWS, --表中的记录数
BLOCKS, --表中数据所占的数据块数 //高水位线
EMPTY_BLOCKS, --表中的空块数
AVG_SPACE, --数据块中平均的使用空间
CHAIN_CNT, --表中行连接和行迁移的数量
AVG_ROW_LEN --每条记录的平均长度
FROM DBA_TABLES where table_name='EMP'

利用如上语句去查看 行迁移的或行链接的数量。
如果chain_cnt的值很大。   那么就要查看avg_row_len 平均长度。 如果行平均长度很小,远小于blocksize, 那么这个问题就很可能是行迁移导致的, 这时我们就要调整pctfree的大小。

如果avg_row_len的值很接近blocksize, 则可以判断肯定是发生了行链接了。 建议把表转移到blocksize较大的表空间。

6.5 pctused
     
那么是否block的剩余空间一旦触发pctfree,就永远不能被Insert新数据行呢。
       这时pctused 的作用就出来了, 假如pctused设置为40%

当这个block里面的数据被delete 或update造成了数据减少, 当数据减少到40%时, 这时pctfree的限制被接触。又能被insert新的数据了,直至重新触发pctfree.

但是在段的管理模式是自动管理模式(强烈推荐的模式)下,设置这个参数是没意义的.所以oracle会自动管理,所以大部分情况请忽略掉这个参数吧.

Oracle 段区块 分配 (2)相关推荐

  1. Oracle 段区块 分配 (1)

    这篇文章是参考甲骨论老相老师的教学视频             http://v.youku.com/v_show/id_XNDAwMzYzODI0.html             所做的学习笔记 ...

  2. 【体系结构】Oracle段区块的个人理解

    1.  段区块是 Oracle 数据库的逻辑上的概念.块属于区,区属于段 2.  Oracle 在创建表时,会分配一个段来装这个表.可以理解为一个表就是一个段. 3.  第 2 点说的不够准确.实际上 ...

  3. mysql表空间段区块如何理解_Oracle表空间、段、区和块简述

    在Oracle学习过程中,存储结构,表段区块可能是每个初学者都要涉及到的概念.表空间.段.分区和数据块分别表示了Oracle进行数据存储的不同层次和结构.了解清楚这几个结构,有助于我们奠定一个稳固的学 ...

  4. oracle一个区有几个块,Oracle段(segment) 区(extent) 块(block)

    Data blocks ,Extents,Segment     这就是他们之间的逻辑结构.    先看Data blocks(也叫逻辑块,oracle块,页)吧,oracle存储数据都是在这些数据块 ...

  5. Oracle PCTfree assm,Oracle 段空间管理方式与PCTFREE和PCTUSED的概念

    Oracle 段空间管理方式与PCTFREE和PCTUSED的概念 SQL> create table test11 (ID number(10),score number(10,1),name ...

  6. Oracle9i突破内存限制,9i Oracle的内存分配和使用

    Oracle的内存分配和使用: Oracle数据库在系统占用的内存分为两个部分:SGA和PGA.如何设置和规划Oracle的内存分配一直以来是一个广为争论的话题. 在Oracle9i之前,PGA的内存 ...

  7. oracle用户常用权限,Oracle用户权限分配的具体方法【常用财务软件使用教程】

    Oracle用户权限分配的具体方法 这里我们将介绍Oracle用户权限分配和Oracel从服务器导出数据的方法,希望能对大家有所帮助. 对于Oracle用户权限分配,很多人觉得不是很困难,但是要做好O ...

  8. Oracle学习之段区块初步概念

    段:一张表可以视为一个段 区:Oracle 给段分配空间的最小单位,表建好后,Oracle就会给表分配物理上连续的空间,叫做区 块:Oracle IO的最小单位,buffer cache中缓存的是db ...

  9. oracle段管理方式设为自动,oracle自动段管理ASSM笔记

    CREATE TABLESPACE demo DATAFILE 'J:\app\wufan\oradata\orcl\demo01.dbf' SIZE 50M EXTENT MANAGEMENT LO ...

最新文章

  1. fprintf()中的stderr解析
  2. 预习一下计算机网络分类,计算机网络实验预习报告1
  3. “科研女神”颜宁当选美国科学院外籍院士
  4. 函数计算自动化运维实战2 -- 事件触发 eip 自动转移
  5. 基于socket网络编程技术实现TCP和UDP的流程详解及实例
  6. 个人控件/对象命名规范(慢慢更新)
  7. 动手学PaddlePaddle(5):迁移学习
  8. phalcon使用registerNamespaces注册第三方类库文件
  9. 顺风车订单已结束仍在录音 嘀嗒出行回应录音机制
  10. 科大讯飞发布第三季度业绩报告:扣非净利润同比减少近9成
  11. 俄罗斯方块,消消乐源码下载
  12. luarocks - 介绍
  13. qqxml图片代码_分享三款高级qqxml消息卡片代码
  14. 怎么将PDF文件分成若干个小文件呢
  15. SWING中模拟键盘输入例子
  16. 学习OpenCV——grabcut
  17. 不让粘贴的数字在excel中以科学计数法形式显示
  18. php 银行卡归属,银行卡归属地查询
  19. 易代账总显示没开启打印服务器,为什么易代账一直打不开,显示一直处于唤醒状态...
  20. sql 无法启动错误代码0x7e

热门文章

  1. 01两数之和(哈希表)
  2. DRF—Mixin拓展类、视图集
  3. django中序列化器字段参数、关联字段
  4. 用Go语言建立一个简单的区块链part3:持久化和命令行接口
  5. (43)内存装载驱动
  6. 2020-11-22(操作系统——页面置换算法)
  7. 006 技能数组分析和代码编写
  8. 进程线程002 等待链表 调度链表
  9. Microsoft RTF栈溢出漏洞(CVE-2010-3333)漏洞分析
  10. 2021春季每日一题 【week2 未完结】