【赵渝强老师】崖山数据库的逻辑存储结构

从逻辑组成上来看,一个YashanDB数据库是由一个或者多个表空间等组成;一个表空间(tablespace)由一组段组成;一个段(segment)由一组区组成;一个区(extent)由一批数据库块组成;一个数据库块(block)对应一个或多个物理块。如下图所示。

视频讲解如下
【赵渝强老师】崖山数据库的逻辑存储结构

下面分别对这些逻辑单元进行介绍。

1、 Database(数据库)

Database是YashanDB中最大的逻辑单元,它是按照数据结构来组织、存储和管理数据的仓库。所有的表、索引、存储过程、触发器等都被包含在了YashanDB的数据库中。

2、 Tablespaces(表空间)

表空间(Tablespace)是数据库的逻辑划分,一个表空间只能属于一个数据库。表空间对应一个或多个数据文件,通常由相关的段组成。表空间的大小是它所对应的数据文件大小的总和,所有的数据库对象都存放在指定的表空间中。但主要存放的对象是表,所以称作表空间。

执行下面的语句可以查看YashanDB中的表空间信息。

sql 复制代码
$ yasql / as sysdba

SQL> select tablespace_name from dba_tablespaces;

# 输出的信息如下:
TABLESPACE_NAME                                                  
---------------------------------------------------------------- 
SYSTEM                                                          
SYSAUX                                                          
TEMP                                                            
SWAP                                                            
USERS                                                           
UNDO                                                            

6 rows fetched.

在YashanDB数据库中,有些表空间必须存在,而有些表空间可以没有。下面列举了YashanDB数据库中的表空间信息以及它们各自在作用。

  • SYSTEM 系统表空间

它用于存储整个数据库的数据字典信息。所有的PL/SQL程序结构,例如:存储过程、存储函数、触发器等都被保存在SYSTEM表空间中。因此,如果数据库中用户定义的程序结构很多,就必须保证SYSTEM表空间能够提供足够的空间。

  • SYSAUX 系统辅助表空间

它的主要作用就是减轻SYSTEM表空间的压力,将一些YashanDB数据库中的程序与工具信息存储在这里。另外,YashanDB数据库元信息也是存储在SYSAUX表空间中,例如:AWR快照信息库、统计信息、审计信息等。

  • UNDO 回滚表空间

也可以叫做还原表空间。在YashanDB数据库中,当某个事务对数据进行修改时,YashanDB会首先将数据的原始值保存到一个回滚段中。一个事务只能将它的回滚信息保存到一个回滚段中,而多个并行事物可以使用同一个回滚段。当撤销事务操作时,可以从回滚段中将原来的数据拷贝回来,从而恢复数据。

  • TEMP 临时表空间

它主要用于管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象。YashanDB数据库会自动清理临时表空间中的临时对象和数据。另外,临时表空间不会存储永久类型的对象,因此在执行数据库备份时,一般不会备份临时表空间中的数据。并且对临时数据文件的操作不产生YashanDB的重做日志(redo log),也不会生成回滚日志(undo log)。

  • USERS 用户表空间

一般用于存储用户的业务数据。在YashanDB数据库中,一个普通用户在创建表的时候,如果没有指定表空间,默认情况下,创建的表都是创建在USERS表空间上。

  • SWAP 交换表空间

数据库操作(例如order by,hash join,统计信息收集等)首先会通过数据库虚拟内存(通过VM_BUFFER_SIZE参数控制)缓存计算的中间结果,但如果虚拟内存不足时,需要通过将虚拟内存交换到SWAP表空间来释放内存,必要时再将内存从SWAP表空间换入。SWAP表空间是非持久化表空间,只用于数据库虚拟内存的换入换出,因此持久化对象(例如表、索引等)不能创建在SWAP表空间。SWAP表空间的空间不足时,可能会导致产生大量中间结果的操作失败,因此需要根据实际业务合理规划SWAP表空间大小或打开自动扩展。

3、 Segments(段)

一个段是分配空间时的一个逻辑结构,该逻辑结构可能是表、索引或其他对象存储的一个区域,它是数据库对象使用的空间集合。段可以有表段、索引段、回滚段、临时段和高速缓存段等,而最常用的段就是表段和索引段。下面的语句将查询YashanDB数据库中段的信息。

sql 复制代码
SQL> select owner,segment_name,segment_type from dba_segments 
     where segment_type ='TABLE' and rownum<5
     union
	 select owner,segment_name,segment_type from dba_segments 
     where segment_type ='INDEX' and rownum<5;
	 
# 输出的信息如下:
OWNER              SEGMENT_NAME             SEGMENT_TYPE          
------------------ ------------------------ --------------------- 
MDSYS              SPATIAL_REF_SYS          TABLE                
MDSYS              SPATIAL_REF_SYS_PKEY     INDEX                
SYS                I_OPTSTAT_OPR1           INDEX                
SYS                I_OPTSTAT_TASK1          INDEX                
SYS                I_OPTSTAT_TASK2          INDEX                
SYS                MON_MODS_ALL$            TABLE                
SYS                TABLE_PRIVILEGE_MAP$     TABLE                
SYS                YLS$PROPS                TABLE                

8 rows fetched

# 这里只显示了YashanDB数据库中部分段的信息。

4 、extents(区)

区是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。每一个段是由一个或多个区组成。当一个段中间所有使用的区空间已完全使用,YashanDB数据库为该段重新分配一个新的范围,即:分配一组新的区来存储段中的数据。

5、 Data Block(数据块)

数据块是YashanDB数据库管理的最小逻辑存储单位,它也是数据库使用的I/O最小单位, 即:一次I/O读写的数据量大小。数据块的大小由db_block_size参数确定。数据块是处理YashanDB数据库更新、查询或者插入数据时的最小单位。当用户从表中读取数据时,I/O操作将从数据库文件中以数据块为单位读取或者写入数据YashanDB数据库默认的数据块的大小为8 KB,即使只想检索4 KB的数据,也需要读取8 KB的数据量。通过下面的语句查看当前数据块设置的大小:

sql 复制代码
SQL> show parameter db_block_size

# 输出的信息如下:
NAME                 VALUE     
-------------------- --------- 
DB_BLOCK_SIZE        8192     

1 row fetched.
相关推荐
沐籽李1 小时前
从问答到执行:Biomni 如何重构生物医学研究工作流
数据库·agent·aidd·抗体设计·biomni
wangbing11251 小时前
MySQL的另类语法
数据库·mysql
超哥--1 小时前
B站视频内容智能分析系统(六):Text-to-SQL 结构化查询
数据库·sql·音视频
暗暗别做白日梦1 小时前
Redisson 和redis 实现延迟消息
数据库·redis·缓存
西凉的悲伤1 小时前
redis和数据库实现分布式锁
java·数据库·redis·分布式
zhougl9961 小时前
Database(数据库)和 Schema(模式)
数据库·oracle
专注API从业者1 小时前
告别手动翻页!基于淘宝商品接口 + Open Claw 实现自动化选品与实时监控(附完整 Python 代码)
大数据·运维·数据库·自动化
曹牧2 小时前
Oracle:xml转义
xml·数据库·oracle
湖南天硕国产SSD2 小时前
工业存储可靠性进阶:天硕工业固态硬盘动态温控与寿命优化技术实践
网络·数据库·算法·工业存储·天硕存储·工业固态硬盘