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

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

mhr18 2024-10-16 10:34 22 浏览 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等存储参数,以指定其中区的分配方式。可以创建非标志块表空间,以满足不同的存储空间需求。


写在最后的话

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

相关推荐

Java面试宝典之问答系列(java面试回答)

以下内容,由兆隆IT云学院就业部根据多年成功就业服务经验提供:1.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT...

ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?

如上图的数据容灾架构下,上层应用如果使用Druid连接池,应该如何配置,才能在数据库集群节点切换甚至主备数据中心站点切换的情况下,上层应用不需要变动(无需修改配置也无需重启);即数据库节点宕机/...

SpringBoot多数据源dynamic-datasource快速入门

一、简介dynamic-datasourc是一个基于SpringBoot的快速集成多数据源的启动器,其主要特性如下:支持数据源分组,适用于多种场景纯粹多库读写分离一主多从混合模式。支持...

SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!

项目简介及系统架构JeecgBoot是一款基于SpringBoot的开发平台,它采用前后端分离架构,集成的框架有SpringBoot2.x、SpringCloud、AntDesignof...

常见文件系统格式有哪些(文件系统类型有哪几种)

PART.01常见文件系统格式有哪些常见的文件系统格式有很多,通常根据使用场景(Windows、Linux、macOS、移动设备、U盘、硬盘等)有所不同。以下是一些主流和常见的文件系统格式及其特点:一...

Oracle MySQL Operator部署集群(oracle mysql group by)

以下是使用OracleMySQLOperator部署MySQL集群的完整流程及关键注意事项:一、部署前准备安装MySQLOperator通过Helm安装Operator到Ku...

LibreOffice加入&#34;转向Linux&#34;运动

LibreOffice项目正准备削减部分Windows支持,并鼓励用户切换到Linux系统。自Oracle放弃OpenOffice后,支持和指导LibreOffice开发的文档基金会对未来有着明确的观...

Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等

IT之家6月28日消息,科技媒体linuxiac昨日(6月27日)发布博文,报道称OracleLinux10正式发布,完全二进制兼容(binarycompatibility...

【mykit-data】 数据库同步工具(数据库同步工具 开源)

项目介绍支持插件化、可视化的数据异构中间件,支持的数据异构方式如下MySQL<——>MySQL(增量、全量)MySQL<——>Oracle(增量、全量)Oracle...

oracle关于xml的解析(oracle读取xml节点的属性值)

有时需要在存储过程中处理xml,oracle提供了相应的函数来进行处理,xmltype以及相关的函数。废话少说,上代码:selectxmltype(SIConfirmOutput).extract...

如何利用DBSync实现数据库同步(通过dblink同步数据库)

DBSync是一款通用型的数据库同步软件,能侦测数据表之间的差异,能实时同步差异数据,从而使双方始终保持一致。支持各种数据库,支持异构同步、增量同步,且提供永久免费版。本文介绍其功能特点及大致用法,供...

MYSQL存储引擎InnoDB(八十):InnoDB静态数据加密

InnoDB支持独立表空间、通用表空间、mysql系统表空间、重做日志和撤消日志的静态数据加密。从MySQL8.0.16开始,还支持为模式和通用表空间设置加密默认值,这允许DBA控制在这些模...

JDK高版本特性总结与ZGC实践(jdk高版本兼容低版本吗)

美团信息安全技术团队核心服务升级JDK17后,性能与稳定性大幅提升,机器成本降低了10%。高版本JDK与ZGC技术令人惊艳,且JavaAISDK最低支持JDK17。本文总结了JDK17的主要...

4 种 MySQL 同步 ES 方案,yyds!(两个mysql数据库自动同步的方法)

本文会先讲述数据同步的4种方案,并给出常用数据迁移工具,干货满满!不BB,上文章目录:1.前言在实际项目开发中,我们经常将MySQL作为业务数据库,ES作为查询数据库,用来实现读写分离,...

计算机Java培训课程包含哪些内容?其实就这六大块

不知不觉秋天已至,如果你还处于就业迷茫期,不如来学习Java。对于非科班小白来说,Java培训会更适合你。提前了解下计算机Java培训课程内容,会有助于你后续学习。下面,我就从六个部分为大家详细介绍...

取消回复欢迎 发表评论: