首页 > 数据库 >成为MySQL DBA后,再看ORACLE数据库(六、逻辑存储结构)

成为MySQL DBA后,再看ORACLE数据库(六、逻辑存储结构)

时间:2024-06-03 22:57:40浏览次数:30  
标签:1024 name DBA 空间 tablespace dba MySQL ORACLE

数据库的逻辑存储结构也可以叫做存储层次体系,ORACLE的存储层次体系按照层次从高到低分为:表空间(tablespace)、段(segment)、区(extent)、块(block)。熟悉数据库的逻辑存储结构可以帮助我们分析与定位数据库的空间容量问题。

一、段

段是表空间的主要组织结构。段就是占用存储空间的数据库对象,比如创建表时,会创建一个表段;创建索引时,会创建一个索引段;创建分区表时,会为每个分区创建一个段。此外还有回滚段、临时段等。通过查询dba_segments视图可以查看数据库中段的大小,进而知道表、索引等对象的大小。

 二、区

段由一个或多个区组成,区是文件中一个逻辑上连续分配的空间。在ORACLE中有“延迟段”的概念,即当你创建对象时,ORACLE不会为段分配一个新的区,而是当数据真正写入时,ORACLE才会为这个段分配第一个区,当初始的区不足以容纳新增数据时,ORACLE就会为它再分配一个区。这两个区在物理上不一定是连续的,但是在逻辑上是连续的。区的大小可能只是一个数据块,也可能大到几GB。

三、块

区进一步由块组成,块也是ORACLE中最小的空间分配单位,行数据就存储在块中。块也是磁盘IO的基本单位,ORACLE中常见的块有2kb、4kb、8kb、16kb。在ORACLE中,db_block_size参数指定了数据库的默认块大小,其值取决于操作系统,一般是8kb。此外,也可以在创建表空间时自定义数据块大小。

 四、表空间

表空间是一个容器,一个表空间中可能有多个段。前面说到的段、区、块都是不同层次的逻辑存储单位,从物理上看数据库的数据看是放在数据文件中,在ORACLE中通过表空间管理数据文件,一个表空间可由多个数据文件组成。可以看到在数据目录下,*.dbf文件就是表空间文件,有system01.dbf和sysaux01.dbf两个系统表空间,users01.dbf用户表空间,undotbs01.dbf回滚表空间,temp01.dbf临时表空间,这也是系统中默认创建的几个表空间。

在实际生产应用中,我们一般会额外创建表空间存放应用数据,并且在创建用户时指定该用户的默认表空间。一般常用的创建表空间的语句如下:

create tablespace app_data_tbs datafile '/u01/oracle/oradata/orcl/app_data_tbs01.dbf' size 8g autoextend on next 100m;
create tablespace app_idx_tbs datafile '/u02/oradata/tyzh/app_idx_tbs01.dbf' size 8g autoextend on next 100m;

该语句定义了表空间的大小,并且设置该表空间以100M的幅度自动增长。那么表空间最大可以增长到多少呢?这和表空间中数据文件的容量有关,通常ORACLE的物理文件最大只允许4194303个数据块(由操作系统决定),那么表空间数据文件的最大值为4194303×DB_BLOCK_SIZE/1024M,当DB_BLOCK_SIZE为8k时,这个表空间数据文件的最大值为32G。我们在数据库中创建一个33G的表空间,可以看到该语句报错超过了最大的block数量4194303。所以,当表空间达到最大值时,我们只能通过增加数据文件的方法对表空间进行扩容。

alter tablespace app_data_tbs add datafile '/u01/oracle/oradata/orcl/app_data_tbs02.dbf' size 1g  autoextend on next 100m;

查询表空间的使用信息可以通过dba_tablespaces、dba_data_files、dba_free_space等数据字典视图查询,以下是几个常用的查询表空间使用情况的脚本:

#查看表空间大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;
#查看表空间数据文件大小
select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
#查看表空间剩余容量
select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name
#查看表空间使用率
select total.tablespace_name,round(total.MB, 2) as Total_MB,round(total.MB - free.MB, 2) as Used_MB,round((1-free.MB / total.MB)* 100, 2) || '%' as Used_Pct
from (select tablespace_name, sum(bytes) /1024/1024 as MB from dba_free_space group by tablespace_name) free,(select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files group by tablespace_name) total where free.tablespace_name = total.tablespace_name order by used_pct desc;

 

标签:1024,name,DBA,空间,tablespace,dba,MySQL,ORACLE
From: https://www.cnblogs.com/coygfly/p/18229733

相关文章

  • MySQL——事务补充
    十一、RR和RC的本质区别select*from表名(lockinsharemode)#当不加共享锁时,说明此时进行的是快照读,加了共享锁则进行的是当前读;​当进行快照读的时候才会形成readview结构;​readview形成的时机不同,会影响事务的可见性,会造成RR和RC级别下事务可见性的不同;当RR......
  • 基于SSM+Jsp+Mysql的高校二手交易平台
    开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示前台首页用户注册用户登录个人中心商品信息管理员登录商品上架管理商品信息管理客服聊天管......
  • Oracle优化神技之临时表
    Oracle临时表在处理临时数据、会话数据隔离和复杂查询优化方面非常有用。其底层逻辑是通过Oracle特殊的临时表来减少I/O操作和日志开销,提高了数据库性能和查询效率。开发者可以根据具体需求和场景,合理使用临时表来简化数据处理逻辑和提高系统性能。早期开发人员在使用Oracle数据......
  • 【MySQL】MySQL Connect -- 详解
    一、Connector /C使用要使用 C 语言连接MySQL,需要使用MySQL 官网提供的库,可以去官网进行下载:MySQL::MySQLCommunityDownloads我们使用 C 接口库来进行连接,要正确使用,还需要做一些准备工作:保证 MySQL 服务有效。在官网上下载合适自己平台的 MySQLConnec......
  • 持续性学习-Day17(MySQL)
    1、初识MySQLJavaEE:企业级Java开发Web前段(页面展示,数据)后端(连接点:连接数据库JDBC;链接前端:控制,控制反转,给前台传数据)数据库(存数据)1.1数据库分类关系型数据库(SQL):MySQL、Oracle、SqlServer、DB2、SQLlite通过表和表、行和列之间的关系进行数据的存储非关系型数......
  • Oracle获取吞吐量和IOPS的脚本
     Oracle获取吞吐量和IOPS的脚本 数据底层存储要换盘,对新盘做IOPS压测。并花了点时间写了脚本获取数据库每秒的吞吐量和IOPS信息。可以将数据导成excel并绘制为折线图等统计图。  --获取IOPS(当前实例)selectto_char(t.begin_interval_time,'yyyy-mm-ddhh24:mi')......
  • Oracle RU和RUR(补丁)
    以前Oracle的周期是约5年省级一个大版本,在这个大版本上做小的升级(PSU与BP),在12c发布以后,oracle数据库产品的新版本发布改为每年一次。随着版本的变化,oracle的升级也发生了变化。12.2以后,主要是通过RU(ReleaseUpdates)与RUR(ReleaseUpdateRevisions)升级,那么什么是RU(ReleaseUpd......
  • 在MySQL中,你可以使用动态SQL和存储过程来根据元数据表查询多个表,并将结果集合并。以下
    DELIMITER$$CREATEPROCEDUREMergeDataFromTables()BEGIN--游标声明DECLAREdoneINTDEFAULTFALSE;DECLAREtbl_nameVARCHAR(255);DECLAREcurCURSORFORSELECT表明FROMtable_col;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRU......
  • kylinV10SP3安装MySQL5.7.44
    需要的安装包:mysql-community-common-5.7.44-1.el7.x86_64.rpmmysql-community-libs-5.7.44-1.el7.x86_64.rpmmysql-community-client-5.7.44-1.el7.x86_64.rpmmysql-community-server-5.7.44-1.el7.x86_64.rpm开始安装,安装顺序:common->libs->client->serverrpm-ivhmysq......
  • mysqlwirter
    DataXMysqlWriter1快速介绍MysqlWriter插件实现了写入数据到Mysql主库的目的表的功能。在底层实现上,MysqlWriter通过JDBC连接远程Mysql数据库,并执行相应的insertinto...或者(replaceinto...)的sql语句将数据写入Mysql,内部会分批次提交入库,需要数据库本......