作为影响数据库性能的一个因素,数据库表空间碎片,应当引起DBA的重视,及时发现并整理碎片是DBA基本维护内容,以提高数据库性能。

Oracle数据库表空间、段、区、块简述

表空间(tablesapce)

表空间是数据库中的基本逻辑结构,一组数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。

段(segment)

段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,一个表空间可以有多个段。

表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件(段可以跨数据文件)。从dba_segments视图中,可以比较清楚看清数据段的结构。

常用的段可以分为以下四种:

数据段(Data Segment)

索引段(Index Segment)

回滚段(Rollback Segment)

临时段(Temporary Segment)

区间(Extent)

在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。区不可以跨数据文件。视图dba_extents(或者all_extents、user_extents)查看分区结构和存储构成。

数据块(Block)

Oracle最基本的存储单位,Oracle的操作都是以块为基本单位,一个区间可以包含多个块。块的大小在建立数据库时候指定,可以查看DB_BLOCK_SIZE参数,根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小。

理想的情况是在表空间中有一个大的空闲区段(extent)。表空间中的空闲空间越多,就越有可能遇到碎片问题。free extent的大小也非常重要。如果有很多小区段(对于下一个区段大小太小),但是空闲空间的总字节数很大,那么可能需要考虑碎片整理。

表空间碎片的产生

一个段包含多个区的情况是普遍存在的,没有任何措施可以保证这些区是相邻存储的。当要满足一个空间分配要求时,数据库不再合并相邻的free space(除非别无选择),而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。

表空间碎片的影响

1)导致系统性能减弱

当要满足一个空间要求时,数据库将首先查找当前最大的free space,而 " 最大 " 自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态;

2)浪费大量的表空间

尽管有一部分自由范围(如表空间的pctincrease为非0)将会被SMON(系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。

查看表空间碎片的方法

1)由空间碎片是由几部分组成,如范围数量、最大范围等,我们可用 FSFI--Free Space Fragmentation Index (自由空间碎片索引)值来体现。

FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents)))

FSFI的最大可能值为100(一个理想的单文件表空间)。随着范围的增加,FSFI值缓慢下降,而随着最大范围尺寸的减少, FSFI值会迅速下降。数字越小,表空间碎片较多,当小于30%的时候说明碎片程度严重,就需要做碎片整理了。

select a.tablespace_name,

sqrt(max(a.blocks) sum(a.blocks)) *

(100 / sqrt(sqrt(count(a.blocks)))) FSFI

from dba_free_space a, dba_tablespaces b

where a.tablespace_name = b.tablespace_name

and b.contents not in ('TEMPORARY', 'UNDO')

group by a.tablespace_name

order by 2;

2)dba_free_space 显示的是有free空间的tablespace,如果一个tablespace的free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。如果一个tablespace有好几条记录,说明表空间存在碎片,当采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理。

SELECT a.tablespace_name, COUNT (1) 碎片量

FROM dba_free_space a, dba_tablespaces b

WHERE a.tablespace_name = b.tablespace_name

AND b.contents NOT IN ('TEMPORARY', 'UNDO', 'SYSAUX')

GROUP BY a.tablespace_name

HAVING COUNT (1) > 20

ORDER BY 2;

表空间的碎片整理

1)表空间的 pctincrease 值为非 0

对于ASSM管理的表空间,一般都是由smon(系统监控)进程自动整理,前提是表空间的pctincrease值为非0,可以将表空间的缺省存储参数pctincrease改为非0,一般将其设为1。如修改test表空间的pctincrease属性:alter tablespace test default storage(pctincrease 1); 这样就可以自动整理表空间级别的碎片整理了。

2)手工合并自由范围:

如果对于字典管理的表空间,可以用下面的命令进行整理:

sql> alter tablespace collesce;

oracle 表空间 碎片,Oracle表空间碎片整理相关推荐

  1. oracle+怎么清理碎片,oracle 收缩表、清理碎片,释放空间

    可以用来收缩段,消除空间碎片的方法有两种: 1.alter table table_name move 需要注意: 1)move操作会锁表.(如果是很小的表,可以在线做.如果是大表一定要注意,会长时间 ...

  2. oracle sysaux表空间不足,sysaux 表空间不足问题处理

    sysaux 表空间不足问题处理 一现场,备份库alter 日志出现错误 ORA-1688: unable to extend table SYS.WRH$_SQLSTAT partition WRH ...

  3. Oracle 数据库、实例、表空间、用户、数据库对象

    Oracle是一种数据库管理系统,是一种关系型的数据库管理系统.通常情况了我们称的"数据库",包含了物理数据.数据库管理系统.内存.操作系统进程的组合体,就是指这里所说的数据库管理 ...

  4. oracle创建表不在对应表空间,oracle创建表空间

    创建表空间参数详解 语法描述: CREATE [UNDO]  TABLESPACE tablespace_name [DATAFILE datefile_spec1 [,datefile_spec2] ...

  5. Oracle 创建表空间,创建表、数据增删改

    Oracle 创建表空间,创建表.数据增删改 创建表空间 创建用户 用户授权 表的创建.修改与删除 创建表 数据类型 创建表的同时指定表空间 修改表 删除表 数据增删改 插入数据 修改数据 删除数据 ...

  6. oracle创建本地表空间,本地管理表空间——大家继续讨论!

    本地管理表空间 Locally Managed Tablespace 一.概述 1.理解本地管理表空间的由来 2.理解什么是字典管理表空间及工作原理 3.理解本地管理表空间的优势(为什么要使用本地管理 ...

  7. oracle如何收缩表空间文件,ORACLE 收缩表空间的数据文件

    方法一: 在实际的应用中经常会遇到TRUNCATE或者DELETE表中的数据后发现表空间并没有将空间进行释放,磁盘空间被告占用感觉空间白白被浪费掉了. 通过下面的SQL语句查看表空间总大小及实用大小, ...

  8. oracle表空间 设置,oracle表空间的设置与管理(代码实例)

    1.创建大小为50mb的永久表空间test,禁止自动扩展数据文件 create tablespace test logging datafile 'e:\orc\test01.dbf' size 50 ...

  9. mysql 表空间收缩_mysql表碎片清理和表空间收缩

    mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式) OPTIMIZETABLE [tablename],当然这种方式只 ...

最新文章

  1. 进入Xcode4,选择菜单“Product”-“Profile”,快捷键Command+I 监测内存泄露
  2. 实时获取vuex更新的新数据_三网运营商大数据实时截流,网站手机号获取
  3. [转]一个典型的软件项目的WBS评析
  4. numpy基本矩阵操作
  5. Scapy学习笔记一
  6. ExtJS入门之一 类与继承
  7. [半翻] 设计面向DDD的微服务
  8. Taro+react开发(75):taro简介
  9. Unity3d—做一个年月日选择器(Scroll Rect拖动效果优化)— 无限滚动 + 锁定元素...
  10. mysql bundle 安装_阿里云服务器下安装MySQL (Bundle压缩包 安装)
  11. 2010计算机知识点总结,2010年全国职称计算机考试:知识点笔记第一章
  12. 7、STC12C5A60S2核心芯片说明文档
  13. file上传代码 ios_自己动手写一个 iOS 网络请求库(四)——快速文件上传
  14. 盘点一道窗口函数的数据分析面试题
  15. 天气预报接口_JMeter 接口自动化测试篇 26
  16. 需要了解的常用Webpack插件配置-loader加载器
  17. MFC之CMFCColorBar 在添加后控件显示为灰色解决方案
  18. 【SCIR笔记】ACL2020表格预训练工作速览
  19. 中国科学技术大学计算机研究生在哪个校区,中国科学技术大学有几个校区及校区地址 哪个校区最好...
  20. android 获取sn序列号

热门文章

  1. restful get不传参数404_flask-restful编写上传图片api
  2. exe文件解包_如何获取别人微信小程序的源文件?
  3. java求数组和值_用java编写数组求和,array[]和ArrayList()?
  4. MogDB/openGauss 手动部署(非OM工具)单机、主备、主备级联架构
  5. MySQL 开源工具集合
  6. 资源放送丨《Oracle 12C~19C统计信息的最佳实践》PPT视频
  7. 实践GoF的23的设计模式:SOLID原则(下)
  8. 支撑1300+矿井监控,华为云数据库助力打造智能矿山
  9. 图像处理中提取中间特征是干什么_PyTorch提取中间层特征?
  10. sizeof 在C语言的作用,union 与sizeof的作用??