美文网首页
oracle最小的逻辑单元-block

oracle最小的逻辑单元-block

作者: 扫地专业高级研究生 | 来源:发表于2022-05-06 23:04 被阅读0次

数据库版本:oracle12c

为什么要称之为最小:一般来说,计算机的最小数据单元应该是一次磁盘io能够读到的数据,它应该是磁头一次读到的数据,不需要做旋转和移动,这是最快的,因为不产生机械运动。既然存在这样的最小,为什么oracle又存在一个最小。它在数据读取的逻辑意义是什么?屏蔽了什么物理意义?答案就是屏蔽了大部分的磁盘差异,因为一次磁盘读取并不是固定的,取决于硬件厂商,但有一个共同点就是,他们都是8的倍数,所以为了屏蔽这样的差异,oracle有自己最小的blocksize,一般默认的是8kb,也正好让每次磁盘读取都不浪费。这就是block的逻辑意义,屏蔽硬件并尽量不浪费磁盘读取的数据。

oracle中的block块:oracle中几乎所有的数据都是以块来存储的,包括索引,包括临时表数据,每次从磁盘读取都是以block为单位,所以block可以说是无处不在。所以block的大小在一定程度上可以决定oracle的性能。

block块并不是只能最小:block大小是一个可以供选择的,可以通过命令show parameter cache_size查看,一般支持2k,8k,16k,32k,64k集中不同的尺寸,在某些情况下,可以用2k,有些情况则可以用64k,看不同的场景。

block块内部数据结构:一个表的数据块,并不是完全用来存数据,他有头信息,所在表信息,行目录信息,行数据,以及冗余区。

调整block_size的原因:对于block_size来说,如果越大,那么一个block就可以存更多的数据,在做查询的时候就可以少读取很多块。同样在做插入的时候,一次申请一个大块,可以减少由于快速插入数据,导致需要频繁申请块空间而导致性能下降。在插入和查询上,oracle的块越大几乎都是最好的选择,那为什么oracle默认的不是64k的块大小,而是8k这个仅仅比2k大一点点的块大小。其中的原因有,如果一个块保留多条行数据,那如果多个会话都对这个块中的数据进行修改,必然引起竞争问题。另外一个问题就是,大块会占用更多的sga空间,特别是仅对少量数据进行处理的时候,也就是读出了很多的冗余数据。所以设置大块的情况一般都是在并发处理表不高的情况。

block的空闲比列:在建表的时候,会有一个参数pctfree,一般如果没有指定默认为10,表示一个block会保留百分之10的空闲空间。数据库储存资源紧张,为啥子还有空出百分之10这么多的空间,为什么不填满,这样我们读一个块能读到更多的数据,也就减少了读其他块的次数,为什么要有这个百分之10。这个是因为我们的数据并不是一层不变的,他可能时间久了因为某些操作瘦身了,还有可能因为某些原因变胖了。在更新某行数据且导致某行数据的大小变大了,那么这行数据就把后面的数据挤到空闲空间了,这样块还是那个块,行还是那一行,虽然变胖了也一样。但如果你那个pctfree太小,或者变得太胖了话,原来那个block已经没有空闲空间进行拓展了,这个时候这一行就必须搬家了,这就是oracle内部的行迁移,行迁移本身是要占性能的,因为他要读出来,还要重新写,所以为了避免这种情况,就留了一点余地,好让行数据自由发挥体重。当然如果确认数据基本大小不变,pctfree是可以设置成0的,特别是在一些临时场景,用完即删的那种,根本不给他发挥的时间。

block的上级:extend区是block的上级,他在逻辑上是有多个block组成的,他的拓展只针对tablespace级别,也就是由tablespace进行申请extend,由表申请block。从这个角度讲也可以看出,为什么我们大多数都是说block,不说extend,因为tablespace的拓展完全是不能通过表来感知的,而我们使用的最多就是表。至于extend他有什么特点,明天再说。

相关文章

  • oracle最小的逻辑单元-block

    数据库版本:oracle12c 为什么要称之为最小:一般来说,计算机的最小数据单元应该是一次磁盘io能够读到的数据...

  • 逻辑存储结构

    逻辑存储结构概述 按照由小到大的顺序,逻辑存储单元可以做如下划分: (1)块(Block)。 块是Oracle逻辑...

  • linux inode小记

    0. Sector & Block 硬盘最小单元:扇区(Sector)0.5K 文件最小单元:块(Block)4K...

  • 从晶体管到CPU

    晶体管是CPU中的最小组成元器件;晶体管的组合,可以形成基本逻辑单元(非门、与非门、或非门...);基本逻辑单元的...

  • FTL 解密

    # 名词介绍 * page SSD 存储芯片内写操作的最小单元。 * block SSD 存储芯片内擦除操作的最...

  • 面试必看:Hadoop源码2.X概述

    1 HDFS基本概念 数据块(Block) 128M 最小处理单元 冗余备份 名字节点(NameNode) 管...

  • iOS GCD

    1.1、线程、任务、队列 线程----程序执行任务的最小调度单元 任务----说白了就是一段代码,block中要执...

  • 事务是什么,有什么特性

    事务(Transaction):是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些 操...

  • 单元测试

    概念 对软件中最小可测试单元或基本组成单元进行检查和验证。一般情况下,单元指函数 目的 以分析单元的逻辑结构文基础...

  • 开始着手搭建(1/19)

    一、核心逻辑、核心顺序: 先表单、后流程、再菜单管理 a、对于流程设计: 核心逻辑是不是最小单元,比如一个页面,一...

网友评论

      本文标题:oracle最小的逻辑单元-block

      本文链接:https://www.haomeiwen.com/subject/jvzzyrtx.html