oracle数据库空间估算

如何计算存储空间,整理了一下

我们在设计一个数据库的时候除了考虑数据块的大小,可能还要和开发沟通,这个数据库要存储多少数据,那么这个数据库应该具备多大的容量来满足一个应用的存储呐?DBA就需要计算一下这个应用占用多大的存储空间

首先我们来看一下几个换算的单位:
1K=1024Bytes;
1M=1024K
1G=1024M
1T=1024G

而我们的表里一个字段能占用多大的空间呐?我们先看一下字段的类型:
1.        变成:number(),varchar2 (),long ,blob等都是变成 (单位都是Bytes)
2.        定长:date (7bytes) ,char()

根据经验:
1.对于变长字段的处理:
我们在估算一行所占用空间的时候只能是取最大值,比如x number(20),这个字段,我们不管插入x列里的内容是否真正的满足20个bytes,我们都按照20来计算;
2.对于定长字段的处理:
  这个就直接取实际长度就ok了;

具个例子来计算一下平均行占用的存储空间:

Create table test (x number(20),y varchar2(20),z date ,char(20));

那么这个表平均每行最大使用的空间为:
(20+20+7+20)=67 (Bytes)
  假设这个表里有20000000条数据,那么这个表所使用的净空间(pur_stroage)为:
(20+20+7+20)*20000000 (Bytes)=1278M

但是ORACLE在组织存储的时候是有空间结构的,oracle要把一部分空间分配给数据库作为结构存储(str_storage),不会把所有的空间都分配给我们用来数据存储,这么大的数据量我们要给多少真正的存储空间(real_stroage)?

我们可以用下边这个简单的公式来计算:
   real_stroage= str_storage+ pur_stroage

上边这个公式中,我们已知了pur_stroage 要求出real_stroage就需要知道str_storage,ok现在我们来了解一下每个块的存储形式下图是个block的结构图

_______________________________________________________________________
|                     |                                                                                                                     |
|  1fixed          |                                                                                                                     |
|   header        |                                                                                                                    |
|___________|                                                                                                                    |
|                       |                                                                                                                   |
| 2. variable      |                                                                                                                  |
| trans_header |             5- available_block                                                                         |
|___________ |                                                                                                                   |
|                       |                                                                                                                   |
|  3.table dir     |                                                                                                                   |
|                      |                                                                                                                    |
|___________|                                                                                                                     |
|                      |                                                                                                                     |
|  4.row dir      |                                                                                                                     |
|                      |                                                                                                                     |
|___________|___________________________________________________________|

1-4部分组成了一个数据块的块头(block_header)
5 是数据块的块身(block_body)

一个一个说吧:

1.        定长的数据块头 57bytes
2.        块中事务并发使用空间,这个值是有可能变化的,如果多个事务并发,那么这个块的大小会发生改变,一个事务是23*1 bytes,2个事务是23*2 bytes,依次类推,一般我们计算的似乎后按照23*1来计算
3.        使用块的表 4 bytes
4.        使用块的行 2 *n bytes 这个块的列使用情况在于有多少行如果有4行数据存储在这个块里那么n=4
5.        才是表和索引能使用的存储空间

那么是不是5里的空间我们能够完全使用呐?
非也,拿上边的例子来说吧,假设有一行数据里test.x里存储的数值是1,这个时候有一个语句来执行:
  Update test set x=100000000,而恰好这个时候此行数据所在的block满了怎么办?
Oracle为了避免这种情况的发生,引入了两个概念:
  PCTUSED和PCTFREE,这两个值相当于2个水位线,我们拿一个杯子来比喻数据块,那么PCTUSED控制这个杯子什么时候可以继续倒水;而PCTUSED表示什么时候这个杯子不能再倒水了

假设PCTUSED设置成了6,PCTFREE设置成了2 ,那么它就表示,当一个杯子达到了60%空的时候可以再继续使用,当杯子的水达到80%的时候就不能再倒水了,而这个值全部都记录在数据块的freelist列表里;

所以可见,5里的初次使用率最高也不会超过available_block*PCTFREE

str_storage=(fix_header+trans_header+table_dir+row_dir*N)*pctfree/10
             
   real_stroage= str_storage+ pur_stroage
                                =(fix_header+trans_header+table_dir+row_dir*N)*pctfree/10+(20+20+7+20)* N
               N=该表里的数据量

当然这个值所求出来的也是个近似的值;

oracle数据库空间估算相关推荐

  1. Oracle数据库空间管理

    创建表空间            create tablespace re_segs            datafile 'E:\Database\datashow.dbf'            ...

  2. oracle空间整理,ORACLE数据库空间整理心得

    最近由于单位数据库硬盘空间不足,整理的时候查了许多文章,也进行了测试,整理后得出一些经验供大家参考. 首先,在网上看到一篇文章,如何ShrinkUndo表空间,释放过度占用的空间,用上面的指令看了一下 ...

  3. 空间数据引擎oracle_GIS 与Oracle 数据库空间数据格式的转换

    近几十年来,由于社会应用需求的增长和多年研究工作的积累,地理信息系统(GIS)技术有了明显的进步,正朝着跨平台运行.分布式处理.开放式开发.网络化集成的方向发展.从空间数据管理角度看,GIS 已经从纯 ...

  4. 详解:Oracle 数据库空间表、自定义用户、权限管理、序列、同义词、索引

    一:数据库空间表 表空间是数据库逻辑结构的一个重要组件,可以存放各种应用对象,如表.索引.每一个表空间由一个或多个数据文件组成. 表空间分类: 1.永久性表空间 一般保存表.视图.过程和索引等的数据. ...

  5. Oracle数据库空间突然增大,oracle BUG 5890312导致表空间瞬间暴涨

    oracle BUG 5890312导致表空间瞬间暴涨 据悉,最近某些同行出现oracle数据库BUG(5890312),对业务造成影响.bug发作后,如果是在system表空间上,可能造成整个数据库 ...

  6. Oracle数据库空间突然增大,Oracle 表空间异常增长过快解决方法

    1.  首先用语句查询容量大于1G的数据段 select segment_name,sum(bytes)/1024/1024 from dba_segments group by segment_na ...

  7. oracle数据库空间预警,数据库系统预警机制

    author:skate time:2012/03/27 数据库系统预警机制 报警不但可以及时提示错误,还可以预防潜在的风险,大概应该有如下功能: 1. 错误数据报警 2. 性能数据报警 3. 数据库 ...

  8. Oracle数据库空间突然增大,Oracle数据库突然宕机,处理方案

    一.现象 数据库突然断掉,无法响应, . 二.分析 查看日志发现错误如下(日志路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_hrpd ...

  9. oracle 空间数据处理,Oracle数据库空间数据的处理

    Oracle数据库空间数据的处理 胡玮芳 [期刊名称]<电脑知识与技术> [年(卷),期]2004(000)008 [摘要]本文主要解释Oracle Spatial的核心概念,尤其是它在存 ...

最新文章

  1. 抢先体验 Windows PowerShell 2.0 全新技术
  2. 【数据结构与算法】之深入解析“迷宫中离入口最近的出口”的求解思路与算法示例
  3. 哎~~~又是RichTextBox
  4. hibernate3.2多表关联查询常见问题
  5. android 点击侧滑代码,代码分析Android实现侧滑菜单
  6. 山寨机来了:小米10至尊、透明版只要688
  7. VS2015+OpenGL配置方法
  8. c语言中通过键盘给一维数组赋值怎么_编程C语言进阶篇——构造类型:数组
  9. 决战EXCEL2010
  10. 实施运维企业面试题-5
  11. Mysql函数和存储过程
  12. Windows映像劫持调试程序
  13. 仓库装箱管理装箱发货,装箱扫描,装箱条码扫描系统成品装箱系统
  14. Lorenz混沌系统建模与电路仿真实现
  15. 大厂面试爱问的「调度算法」,20 张图一举拿下
  16. 锐浪报表数据源access_学习锐浪报表之MySQL连接字符串的实际操作步骤汇总
  17. 医惠护理系统服务器错误,医惠智能云随访系统
  18. 概率空间probability space 伯努利实验 n次伯努利实验
  19. 科罗拉多州立大学计算机科学,科罗拉多州立大学
  20. amazon alexa_如何建立您的第一个Amazon Alexa技能

热门文章

  1. springboot 使用idea打包 遇到问题
  2. java中单例的几种写法
  3. Django中自定义过滤器的使用
  4. MVC之排球比赛计分程序 ——(二)架构概要设计
  5. PHPstrom怎样设置浏览器
  6. 怎么在苹果Mac虚拟机上安装Win7
  7. 欧几里德投影(Euclidean projection)
  8. 拉里.埃里森_耶鲁大学演讲
  9. ubuntu18.04安装nextcloud以及相关配置
  10. apache站点优化——长连接