最小单位的输入\输出

数据块由操作系统中的一个或多个块组成

数据库是表空间的基本单位 DB_BLOCK_SIZE

查看 Oracle 块的大小语句:

SQL> show parameter db_block_size

  

在早期的数据库中,Oracle 只支持一种数据块的大小。从 9i 版本支持了改变大小的设置。但也不是随便改动的,规定范围在 2KB 到 32KB 之间,必须是倍数增加的,也就是 2KB\4KB\8KB\16KB\32KB 五种大小。

需要注意的是,块大小的设置是在数据库创建时候设置的,一旦设置好是不可更改的。类似于我们磁盘的存储格式,FAT16、FAT32、NTFS.... ,要想改变存储格式只能数数据全部格式化掉。

数据块的结构

 

Header:数据块头,记录了一些控制信息,帮助 Oracle 定位这个块,块与块之间的串联信息。

Free Space:处于空闲状态的空间。

Data:已经写入数据的空间,数据存放的方式是自底网上,就像现实中的箱子。

Oracle 是如何管理存储的

High-Water Mark

 

对于一个新建立的表,表中包含很多数据块,water mark 原始指向表中的第一个数据块。 water mark 随着插入的数据“向前”移动。当把插入的数据删除掉一些,water mark 并不会“向后”移动。也就是 water mark 的位置表示历史的最高水位。 那么我们要想插入一些数据时,oralce 是按什么样的规则输选择插入位置呢?

 
 

Oracle 数据插入的时候,首先会先查找灰色部分的空间的,灰色部分表示就已经插入数据的块,但这些块并不是已经被完全占满了,有些或多或少的都会留下一些空间。如果插入一个很小的数据,灰色被占的数据块中可以完全插入的,就会被插在这一部分。

如果数据比较大,查找了所有被占用块都无法插入,那么将会选择“曾经”插入过数据的空白块进行插入,也就是上图浅灰色部分。

如果数据非常大,曾经插入数据的空白块都无法插入,那么只好动用从未被插入过数据的空白块进行插入。当然 water mark 也就会“向前”移动。

OK 下面就来具体分析,每个数据块,是否允许插入数据的规则。

 
 
 

pctfree:剩余空间的百分比小于等于此参数,停止插入数据

pctused:使用空间的百分比小于等于此参数,可以插入数据

freelist:可以插入数据的状态。

块头(数据块的头)不在百分比的范围内,当剩余空间大于20%的时候,那这个块就是纳入 freelist 中,当我要插入一条数据时,freelist 是会扫描这个块的,检查其它是否可以存放要插入的数据。当小于20%的时候,说明这个块已经满了,会从 freelist 中去掉,插入数据时不作为扫描的对象。

一个小于 20% 空闲的块会从 freelist 上摘除,那么一个块在什么情况下会被重新挂到 freelist 上呢?对于一个已经从 freelist 上摘除的块,可以能由于删除更新操作,其空间会得到释放,当占用空间小于 40% 时,也就是空闲空间大于 60% 时,这个块被有认为是空间的块又会被重现挂到 freelist 上。

最新文章

  1. js保留位和取整
  2. 编写高性能Web应用程序的10个技巧
  3. 算法最坏,平均和最佳情况(Worst, Average and Best Cases)-------geeksforgeeks 翻译
  4. hdu 2528 Area
  5. Mysql-学习笔记(==》函数的建立与使用 十)
  6. linux服务之drbd
  7. Python 学习教程
  8. swift基础--变量
  9. java.lang.SecurityException: Permission denied (missing INTERNET permission?) 解决
  10. LINUX HA:Pacemaker + Corosync初配成功
  11. 【转】C/C++ 内存对齐
  12. HDU 1969(二分法)
  13. Java用ZIP格式压缩和解压缩文件
  14. delete 和 delete [] 的真正区别
  15. tips:Jquery的attr和prop的区别
  16. PHP查看内存使用
  17. 016-插件使用-head
  18. Idea设置类注释模板
  19. Android: INSTALL_FAILED_UPDATE_INCOMPATIBLE错误解决措施
  20. Intellij debug模式使用

热门文章

  1. vue 运行脚手架报错
  2. Linux下SHA256校验
  3. python-日常用法小记
  4. (七)C语言之顺序结构
  5. 搞清楚MySQL事务隔离级别
  6. Web存储机制—sessionStorage,localStorage使用方法
  7. EBS 创建会计科目 小结
  8. Java-JVM 运行时内存结构(Run-Time Data Areas)
  9. For 循环 kotlin(10)
  10. Android——NativeActivity - C/C++ Apk开发