百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle 逻辑结构篇 之逻辑结构(四)数据块和段空间管理

sinye56 2024-10-09 19:53 8 浏览 0 评论

五、数据块

块是 Oracle 数据库执行输入/输出(I/O) 的最小单位,相应地,操作系统执行输入/出(I/O) 的最小单位为一个操作系统块的大小。假定某用户执行“SELECT* FROM emp WHEREempno=7788”只会返回 100Byte 的数据,而数据块尺寸为 2KB,那么 Oracle 会在数据文件上读取多少数据到数据高速缓存呢?因为 Oracle 数据库输入/输出的最小单位是块,所以一次读取的数据是一个数据块,即读取是 2 KB 的数据。

在 Oracle9i 之前,同一个数据库的所有表空间必须具有相同的数据块尺寸;而从Oracle9i 开始,不同表空间可以具有不同的数据块尺寸。

(一)、多重数据块支持

Oracle9i 支持创建具有多种块大小的数据库。此功能在下列情况下非常有用:? 将表空间从联机事务处理(OLTP) 数据库传送到企业数据仓库时。使用 Oracle9i,可方便地在具有不同块大小的数据库之间传送数据。? 要求能够在具有相应块大小的表空间中定位对象以最大限度地提高 I/O 性能时使用 Oracle9i,除了标准的块大小外,还可以指定最多四种非标准的块大小,如果想使用非标准大小的块,必须在初始化参数文件中,为每个非标准块大小配置子高速缓存。也可以在实例运行过程中配置子高速缓存,可以创建具有其中任意块大小的表空间。如果创建的表空间是非标准块大小,那么在建立表空间时使用 BLOCKSIZE 选项定义表空间所使用的非标准块尺寸。

(二)、标准块与非标准块大小

1.标准块大小

在 SYSTEM 表空间以及任何临时表空间中使用的块大小为标准块大小,除非进行指定,表空间的缺省块大小为标准块。数据块尺寸是由初始化参数 DB_BLOCK_SIZE 指明,其尺寸应该设置为操作系统(OS)块尺寸的整数倍,所以一个数据块由一个或多个操作系统块组,并且该参数的取值一般为 2KB、4KB、8KB、16KB、32KB 等。

通常,将 DB_BLOCK_SIZE 设置为 4 KB 或 8 KB。如果没有指定,则使用缺省数据块小,缺省数据块大小取决于所用的操作系统,在创建数据库后将不能更改标准块大小,如果想更改标准块大小,只能重新创建数据库。使用 DB_CACHE_SIZE 参数指定标准块大小缓冲区的高速缓存大小。DB_CACHE_SIZE 最小值为一个粒组(granule),默认为 48MB.粒组大小由 SGA 来决定,如果 SGA<128MB,一个 granule 则是 4MB,如果 SGA>128MB,一个 granule 则 是 16MB。

2.非标准块大小

从 Oracle 9i 开始,除可以使用标准块大小外,还可以使用非标准块大小,取值范围是2KB、4KB、8KB、16KB、32KB。如果希望使用非标准块,必须在数据库缓冲区为数据库使用的各种块大小指定高速缓存大小。即如果要在数据库中使用多种块大小,则必须设置DB_CACHE_SIZE 和至少一个 DB_nK_CACHE_SIZE 参数。每个参数为相应的块大小指定了缓冲区高速缓存大小。如下所示:

DB_2K_CACHE_SIZE 为 2KB 的块指定数据库高速缓存大小

DB_4K_CACHE_SIZE 为 4KB 的块指定数据库高速缓存大小

DB_8K_CACHE_SIZE 为 8KB 的块指定数据库高速缓存大小

DB_16K_CACHE_SIZE 为 16KB 的块指定数据库高速缓存大小

DB_32K_CACHE_SIZE 为 32KB 的块指定数据库高速缓存大小

如果 nK 是标准块大小,则不能指定的大小,DB_nK_CACHE_SIZE 参数的缺省值为零。如果存在块大小为 nKB 的联机表空间,则不要将此参数设置为零。最小可以设一个 granule。

(三)、创建非标准块表空间

可创建标准块大小的表空间,也可以创建非标准块大小表空间,使用 BLOCKSIZE 子句为表空间指定非标准块大小,要指定该子句,必须设置 DB_CACHE_SIZE 和至少一个DB_nK_CACHE_SIZE 参数,在该子句中指定的整数必须与某个 DB_nK_CACHE_SIZE 参数中的 对应。

【实例4-1】创建一个 2K 块大小的表空间 mytbs2k,并验证。

1)以 sys 用户登录
CONN / AS SYSDBA已连接
2)设置初始化参数 DB_2K_CACHE_SIZE, 重新启动使参数设置生效
SQL> ALTER SYSTEM SET DB_2k_CACHE_SIZE=16M SCOPE=SPFILE;
系统已更改。
SQL> SHUTDOWN
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUPORACLE 
例程已经启动。
Total System Global Area 47258064 bytes
Fixed Size 453072 bytes
Variable Size 29360128 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
3)创建表空间
CREATE TABLESPACE mytbs2kDATAFILE 'd:\oracle\oradata\db01\mytbs2k_1.dbf' SIZE 10MBLOCKSIZE 2K;
表空间已创建。
4)验证
SQL> SELECT tablespace_name,block_sizeFROM dba_tablespacesWHERE tablespace_name='MYTBS2K';
TABLESPACE_NAME BLOCK_SIZE
------------------------------ ----------
MYTBS2K 2048

执行上述命令后,创建名为 mytbs2k 的表空间,表空间中块的大小为 2KB,查DBA_TABLESPACES 数据字典视图,可以看新建表空间的块大小为 2K。

多种块大小使用要注意:

  • ? 分区对象的所有分区必须位于具有相同块大小的表空间中。
  • ? 所有临时表空间必须采用标准块大小,包括用作缺省临时表空间的永久表空间。
  • ? 按索引组织的表溢出和外部 LOB 段可以存储在块大小与基表不同的表空间中。

(四)、数据块的存储参数

当建立数据对象(表、索引、簇)时,通过指定合理的块空间使用参数可以提高块访问性能和并发性,使用参数可用来控制对数据段和索引段空间的使用。参数分为:控制并性的参数和控制空间使用的参数两类。

1.控制并发性的参数

INITRANS 和 MAXTRANS:指定初始的和最大的事务槽(Transaction slot)数,这些事务槽在索引块或者数据块内创建。事务槽用来存储在某一时间点对块进行更改的事务处理的有关信息。一个事务只占用一个事务槽。

INITRANS:保证最低级别的并发性。对于数据段和索引段,INITRANS 的缺省值分别为 1 和 2,以保证最低级别的并发性。例如,设置 INITRANS 的值为 3,那么初始阶段可以有 3 个事务同时访问一个数据块。如果需要,也可以从块空闲空间内分配更多事务槽,以允许更多的事务处理并发修改块内的行。

MAXTRANS:缺省值为 255,它用于设置可更改数据块或者索引块的并发事务处理数的限制。例如 MAXTRANS 的值设为 10 时,访问同一数据块的事务数超过 3 之后,需要为新事务分配新的事务槽,并且最大并发事务个数为 10。

2.控制数据空间使用的参数

PCTFREE:对于数据段而言,此参数用于指定每个数据块中保留空间所占的百分比,当更新块内的行需要更多空间,就会使用保留空间。PCTFREE 的缺省值为 10%。

PCTUSED:对于数据段而言,此参数表示 Oracle 服务器为表内每个数据块所保留的已用空间的最低百分比。如果一个块的已用空间低于 PCTUSED,则将该块放回到空闲列表中。加入段的空闲列表的块可以用于重新插入数据。缺省情况下,每个段在创建时都有一个空列表。通过设置存储子句的 FREELISTS 参数,可以创建有更多空闲列表的段。

PCTUSED 的缺省值为 40%。PCTFREE 和 PCTUSED 都按可用数据空间百分比来计算,可用数据空间是从整个块大小减去块头空间后剩余的块空间。

六、段空间的管理

可以使用两种方法来管理数据块:

  • ? 自动段空间管理
  • ? 手动管理

(一)、手动数据块管理

在以前的 Oracle 版本中,这是唯一可用的方法。而且默认的块管理方式为手动管理。手动数据块管理允许手动配置数据块使用参数,例如:PCTFREE 参数,PCTUSED 参数FREELIST 参数。

下面过程介绍对于 PCTFREE=20 且 PCTUSED=40 的数据段如何管理块内的空间(如图 10-5 所示):

当向块中插入行时,块的空闲空间在减少,直到块内的空闲空间等于或者小于 20%,此时行所占用的块内可用数据空间达到 80% (100 – PCTFREE) 或者更多后,此后则无法在该块内插入数据。

剩余的 20% 可在行大小增长时使用。例如,更新初始为 NULL 的列并分配一个值。样,更新后的块使用率可能超过 80%。

如果由于更新,删除了块内的行或者行大小减少,块使用率可能跌至 80% 以下。但是,仍然无法向块中插入,直到块使用率跌至 PCTUSED(在本例中为 40%) 以下,则该块可用于重新插入。

(二)、段空间自动管理

段空间管理方式可以采用自动段空间管理的方式,它是一种在数据库段内管理空闲空间的方法。自动段空间管理使用位图完成对段内空闲和已用空间的跟踪(与使用空闲列表相对)。位图段包含一个位图,它描述了与段中的可用空间相关的每个块的状态。该位图包含在单独的一组块中,这些块称为“位图块”,插入新行时,服务器就会在该位图中搜索是否具有足够空间的块,有则插入数据。当块中的可用空间数量发生变化时,位图中就会反映出它的新状态。使用自动段空间管理更方便、空间使用率更高,并且改进了并发 INSERT 操作性能。但是不能用于包含 LOB 的表空间。管理方便表现在 PCTUSED、FREELISTS、FREELIST GROUPS 均是自动管理的。所有对象都可以更有效地使用空间,尤其是行大小变化很大的对象。

但要注意:

  • ? 自动段空间管理仅能在表空间级别启用,用于在本地管理的表空间
  • ? 创建表空间后,这些配置将应用于在该表空间中创建的所有段

自 动 段 空 间 管 理 是 通 过 CREATE TABLESPACE 命 令 的 SEGMENT SPACEMANGEMENT AUTO 子句指定的,此后不能更改这些段。如果定义了 PCTUSED、FREELIST和 FREELISTGROUPS,则将其全部忽略。

因为自动段空间管理仅能在表空间级别启用,且只用于在本地管理的表空间,所以只需要创建本地管理的表空间进行指定即可。以下例子创建了一个自动段空间管理表空间。

【实例4-2】设置自动段空间管理

1)管理员方式登录
CONN /AS SYSDBA
2)创建表空间并设置自动段空间管理
SQL> CREATE TABLESPACE mytbs10DATAFILE 'D:/oracle/oradata/db01/mytbs10.dbf' SIZE 5MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 64KSEGMENT SPACE MANAGEMENT AUTO;

只要是创建在 mytbs10 表空间中所有段都是采用自动段空间管理。可以用位图管理的段为:表、索引、按索引组织的表(IOT) 以及 LOB。

(三)、查询存储信息

可以通过以下视图查询表空间、数据文件、段和空闲区与已用区之间的关系等信息:

  • DBA_EXTENTS
  • DBA_SEGMENTS
  • DBA_TABLESPACES
  • DBA_DATA_FILES
  • DBA_FREE_SPACE

【实例 4-3】通过 DBA_SEGMENTS 视图,查看段的区和块的数目。

1)以管理员方式登录
CONN / AS SYSDBA
已连接。
2)查询分配给 EMP 段的区和块的数目。
SQL> SELECT segment_name,extents,blocks,bytesFROM dba_segmentsWHERE owner = 'SCOTT' AND segment_name='EMP';
SEGMENT_NAME EXTENTS BLOCKS BYTES
--------------------------------------------
EMP 1 8 65536

以上查询结果可以看出,SCOTT 模式中 EMP 段,包含了一个区,总大小是 8 个数据块(65536Byte)。

【实例 4-4】使用 DBA_EXTENTS 视图。

1)以管理员方式登录
CONN / AS SYSDBA
2)检查给定段的区的信息
SQL> SELECT extent_id,file_id,block_id,blocksFROM dba_extentsWHERE owner = 'SCOTT' AND segment_name='EMP';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 1 50465 8

该实例查询出 EMP 段包含的区号,文件号,块号和块数。

【实例 4-5】使用 DBA_FREE_SPACE 视图。

1)以管理员方式登录
CONN / AS SYSDBA
2)查询所有表空间的自由空间
SQL> SELECT tablespace_name, count(*),max(blocks), sum(blocks)FROM dba_free_spaceGROUP BY tablespace_name;
TABLESPACE_NAME COUNT(*) MAX(BLOCKS) SUM(BLOCKS)
------------------------------ ---------- ----------- -----------
CWMLITE 2 1328 1360
DRSYS 1 1320 1320
EXAMPLE 1 64 64
INDX 1 3192 3192
MYTBS10 1 632 632
ODM 1 1360 1360
SYSTEM 1 176 176
TOOLS 1 504 504
UNDOTBS1 5 24552 25128
USERS 1 3192 3192
XDB 1 24 24

可见,SYSTEM 表空间的可用空闲空间为 176 个数据块。

七、小结

Oracle 为数据对象所分配的存储空间被称为段,段有多种类型,常见的是表段、还原段、索引段和临时段。存储空间的分配是以区为单位进行的,区由连续的数据块组成。通过指定pctfree、pctused 等参数,来控制其中块存储空间管理方式;通过指定 initial、next、pctincrease等存储参数,以指定其中区的分配方式。可以创建非标志块表空间,以满足不同的存储空间需求。


写在最后的话

感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流、转发和关注,感谢!

相关推荐

一个不错的软件版本命名规范!

之前写了一篇如何自动生成版本号的文章,《让你的C程序,自动打印版本信息》初衷是让自己的程序在运行时自动打印与版本相关的信息,避免测试时因为版本信息不确定导致的一些功能对应不上去的问题,当时留了一个坑,...

国产操作系统迎来发展风口 公务领域更能培育起Linux生态

谷歌和微软在俄罗斯市场的一番套路猛如虎,就让我们深刻地意识到了,只有自己的东西才能靠得住。也由此,国内操作系统发展迎来了发展风口。我就看到有朋友就秀出了他们单位采购的纯国产的主机,一款华为的主机,纯国...

5个大有“前途”的Linux桌面发行版本

ZD至顶网CIO与应用频道08月27日专栏:Linux无处不在。你的服务器里,你的电话、汽车、手表、烤面包机、冰箱……和台式机里都有Linux的身影。虽然在桌面上见到Linux的用户比在自动调温...

Linux 常用应用软件大全

编译自:https://www.fossmint.com/most-used-linux-applications/作者:MartinsD.Okoi译者:HankChow对于许多应用程序...

Linux 4.1 系列的最大版本 4.1.18 LTS发布,带来大量修改

(LCTT译注:这是一则过期的消息,但是为了披露更新内容,还是发布出来给大家参考)著名的内核维护者GregKroah-Hartman貌似正在度假中,因为SashaLevin2016年2月16日的...

Linux发行版需要杀软吗?卡巴斯基推出免费KVRT病毒扫描清理工具

IT之家6月4日消息,你认为使用Linux发行版,需要杀毒软件吗?或许很多用户认为Linux发行版偏小众,因此受到黑客攻击的风险也相对较小,不过卡巴斯基并不这么认为,近期推出了适用于...

适合开发人员的 5款 Linux 发行版

什么是Linux?Linux是基于Unix的操作系统。由LinusTorvalds开发于1991年首次发布其内核。因为Linux是开源软件,其发行版由不同组织发布,因此不同的发行版具有不同的风格...

VMware Workstation 17.0 Pro 发布:新增 TPM 2.0 完美兼容Win11

IT之家11月18日消息,VMwareWorkstation17.0Pro现已发布,它带来了许多新特性,例如微软Windows11硬性要求:虚拟可信平台模块(TPM)2.0。...

你是否需要一个容器专用的Linux发行版本?

单单使用容器是不够的,提供商们认为你需要一个容器专用的Linux发行版本。我们可以让容器在不同的操作系统上运行,不同的操作系统都有自己的虚拟化服务,如:SolarisZones、BSDJails、...

Tizen 3.0版本发布 采用Linux 4.1内核

2015-09-2111:31:39作者:马荣【中关村在线软件资讯】9月21日消息:尽管三星靠着Android系统设备在移动市场赚钱,但是仍然没有忘记自家的Tizen开发。现在Tizen3.0版...

欧拉操作系统演进:应用累计超130万套 支持鲲鹏、英特尔、飞腾等芯片

21世纪经济报道记者倪雨晴深圳报道4月15日,在欧拉开发者大会(openEulerDeveloperDay2022)的主论坛上,欧拉首个数字基础设施全场景长周期版openEuler22.03...

Papyros:以Material Design为灵感的Linux发行版本

项目团队并不希望只是采用传统的桌面主题,而是致敬谷歌Android系统的MaterialDesign设计语言想要打造出某些不同以往足够吸引用户的Linux发行版本,自然该版本还在不断的更新和改进中,...

比特网早报:全国空间计量技术委员会成立,银河麒麟操作系统上架微信Linux4.0.0版本

2024年11月6日消息,昨夜今晨,科技圈都发生了哪些大事?行业大咖抛出了哪些新的观点?比特网为您带来值得关注的科技资讯:全国空间计量技术委员会在北京成立近日,经市场监管总局批准,全国空间计量技术委员...

2024年最稳定的5个Linux发行版,赶紧收藏!

Linux是最流行的免费开源平台之一。Linux已被广泛使用,因为它安全、可扩展和灵活。Linux发行版收集开源代码,对其进行编译,并将其组合成一个可以轻松启动和安装的操作系统。它们还提供不同的...

彰显Linux生态繁华,Ubuntu、Fedora等四发行版同时发布新版本

上周对于开源社区来说是忙碌的一周。EndeavourOS和TrueNASScale于周二(4月16日)发布,Fedora于周三(4月17日)发布,Ubuntu于周四(4月18日)发布。四个新版本中都...

取消回复欢迎 发表评论: