`
my_ora
  • 浏览: 28488 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle磁盘碎片处理

阅读更多
在数据库创建之后,磁盘的空间是连续的,但是随着对数据的DML操作,在数据库的数据块中就会出现一些磁盘碎片。磁盘碎片会影响磁盘I/O操作,浪费磁盘空间,就拿链化现象来说吧,通常链化行都会跨越不止一个数据块,所以当读取链化行时,所需要的磁盘I/O就需要读取不止一个数据块,从而增大了磁盘I/O操作,影响数据库性能。
对于数据库的磁盘碎片处理,可以总结为三个处理阶段:预防、监控、清理。

第一阶段:预防
对于磁盘碎片的预防阶段,主要是在对数据库、表空间或表的设计是所作的一些操作。对于表空间的设计,在设计时,如果可以预测表空间的段将会增大到多大的尺寸,那么最好使用同一的盘区分配,而不是使用自动的盘区分配。并且在确定数据库块大小的时候,将数据库块大小指定为操作系统块大小的倍数,这有利于磁盘的I/O操作,同时指定表空间的盘区大小为数据库块大小的倍数,这样在盘区中就可以存放刚好的整数个数据库块,而不会因为盘区剩余空间的大小不能放下一个数据库块而纠结。最好是使用ASSM来管理表空间,因为这可以减少管理员的工作,而且这也可以减少空闲列表的使用而带来的性能影响,比如空闲列表的争用。
而且,在指定表空间盘区大小的时候,如果可以的话,先预测一下段的大小,对于盘区过多的段,可以将盘区尺寸设计的大一点以适合于段,一个太多盘区的段的性能要比一个有适当盘区大小和盘区数量的段的性能要低。
除此之外,链化现象也会导致磁盘碎片,链化现象的出现是因为磁盘的数据块中没有足够的空间用以存储DML操作对表中行的更改,当在磁盘数据块中的空闲空间不足时,被更改的行就会链接到另外的数据块以存储信息,就这样,链化行就产生了。链化行会极大的降低数据库的性能,降低磁盘I/O性能,从未降低了对数据的查询性能,而且带了了磁盘碎片。要预防链化带来的磁盘碎片,那么,在设计表的时候,就应该正确的预测数据块的空闲空间,以适应数据块中的行的更改或增长,在默认情况下空闲空间是数据块的10%,但是,如果表的DML操作非常频繁,那么或许就需要更大的空闲空间了,但是如果是只读块,则需要更少的空闲空间。

第二阶段:监控
就算在磁盘碎片的预防阶段做的多么的好,我想谁也不能绝对的保证你的磁盘就不会出现或极少出现磁盘碎片吧,就像有些DBA所担忧的一样,谁也不想在梦中做着白马王子的时候,现实中的灾难却悄悄降临。
所以定时的监控是很有必要的,虽然我没有尝试过半夜接到客户投诉的电话,但是听起来那是一件糟糕的事情。
对表空间的碎片的监控可以用自由空间碎片索引值来显示,也就是通常所说的FSFI值:
FSFI=100*SQRT(max(extent)/sum (extents))*1/SQRT(SQRT(count(extents)))
通过查找就算FSFI值就可以知道碎片的产生。而且对于链化现象,可以通过查看statspack报表或awr报表的fetch by continued row的值,或者是通过查看v$sysstat的table fetch continued row的值,如果有链化行就会有值。
SQL:select tablespace_name,sqrt(max(blocks)/sum(blocks))*
(100/sqrt(sqrt(count(blocks)))) FSFI
from dba_free_space
group by tablespace_name order by 1;
--value值越小越好
select * from  v$sysstat where NAME = 'table fetch continued row';
统计出了数据库的FSFI值,就可以把它作为一个可比参数。在一个有着足够有效自由空间,且FSFI值超过30的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。



第三阶段:清理
如果在磁盘中出现了严重的磁盘碎片化现象,那么接下来的工作应该是处理磁盘碎片,从而挺高磁盘I/O性能和节省空间。
在有一天我发现我的磁盘出现了大量的磁盘碎片,但是当进一步查看是发现出现磁盘碎片的是其中的一张表。这时我就可以针对这一张表来处理磁盘碎片,首先我选择的方法是使用CTAS方法来创建一张表,原来的表是book,所以可以使
用CTAS先创建一张表book1:
Create table book1
As
Select * from book
Nologging;
使用nologging子句可以在创建book1是不产生日志信息,从而可以加快创建速度。创建好book1后接下来就是删除book表,删除之后再重名民book1为book:
Alter table rename book1 to book;
除了使用CTAS方法,可以用另外一种方法,就是使用expdp、impdp导入/导出表的方法,而且这样好像比使用CTAS方法要更快一点,但是必须保证在导出完表然后删除数据库中的表之后、导入表之前,导出文件是健康的。
但是在我的另外一次发现中,我发现磁盘碎片并不是在某个表的数据块上,而是在表空间中的很多数据文件的磁盘中都有挺多的磁盘碎片,所以这时就需要对整个表空间进行碎片处理,我使用的方法是使用expdp、impdp数据泵进行表空间的导出/导入。
此方法为四步骤:导出表空间、删除表空间、创建表空间、导入表空间
第一步:使用expdp将表空间导出:
Expdp bookinfo/password
datafile=dir1:tbs_book_01.dmp
logfile=dir2:tbs_book_exp_logfile_01.log
tablespaces=tbs_book
第二步:删除被导出的表空间
(如果表空间中存储了其他表空间的表分区,需
先将分区移动打其他表空间。而且不能删除默
认的表空间)
Drop tablespace tbs_book including
contentsand datafiles;
第三步:创建一个同名的表空间
Create tablespace tbs_book
Datafile ‘/u01/oradata/db1/tbs_book_01.
dbf’ size 45M autoextend on
next 5M maxsize 200M
Extent management local
Segment space management auto
Blocksize 8k;
第四步:导入表空间
Impdp bookinfo/password
datafile=dir1:tbs_book_01.dmp
logfile=dir2:tbs_book_imp_logfile_01.log
tablespaces=tbs_book
如果这一切对你来说都还不够,其实重建数据库也是一种方法,不过这将耗费大量的时间和系统性能,而且不会带来太多的性能改善,据说很有风险,但至少我没有试过,尽管是在实验环境上。


4、自由范围的碎片整理

(1)表空间的pctincrease值为非0
可以将表空间的缺省存储参数pctincrease改为非0。一般将其设为1,如:
alter tablespace temp
default storage(pctincrease 1);
这样SMON便会将自由范围自动合并。也可以手工合并自由范围:
alter tablespace temp coalesce;

5、段的碎片整理
我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典dba_segments,范围的信息可查看数据字典dba_extents。如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用Import/Export(输入/输出)工具来完成。

Export()命令有一个(压缩)标志,这个标志在读表时会引发Export确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数--等于全部所分配空间。若这个表关闭, 则使用Import()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:

exp user/password file=exp.dmp compress=Y grants=Y indexes=Y
tables=(table1,table2);

若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:
imp user/password file=exp.dmp commit=Y buffer=64000 full=Y

`这种方法可用于整个数据
分享到:
评论

相关推荐

    Oracle解决索引碎片功能.txt

    ### Oracle解决索引碎片功能详解 #### 索引碎片概念 在Oracle数据库中,索引碎片是指由于频繁的数据插入、删除操作导致索引结构变得不连续和分散的现象。这种现象会降低查询性能,增加数据库维护成本。因此,了解...

    ORACLE数据库碎片整理浅析.pdf

    索引碎片则涉及到索引条目在磁盘上的非连续存储,这可能影响到索引的查询性能。索引碎片的检测可以通过分析索引的叶块利用率、空闲空间和分支块的链接情况等。解决索引碎片的方法包括重建索引(如ALTER INDEX ...

    Oracle基于磁盘竞争的解决方案.pdf

    Oracle数据库在运行过程中可能会遇到磁盘竞争的问题,这主要源于磁盘I/O操作超过了硬件的物理限制,导致系统性能下降。磁盘竞争是由于多个进程同时请求同一个磁盘的I/O操作,使得某些进程需要等待,从而影响了整体的...

    Virtualbox 收缩虚拟硬盘空间的办法

    - **Defraggler**:一款优秀的磁盘碎片整理工具,可以有效地整理磁盘碎片,为后续的操作提供便利。 - **SDelete**:由Sysinternals出品的一款用于安全删除文件及释放磁盘空间的工具。 #### 二、步骤详解 ##### 1...

    oracle碎片整理

    ### Oracle 数据库碎片整理 #### 碎片的产生过程及其原因 在Oracle数据库中,随着数据的增删改查等操作,存储空间中的数据块(Blocks)可能会变得分散不连续,这种现象被称为碎片化(Fragmentation)。碎片化的...

    Oracle基础教程

    * 数据库实例(Instance):是 Oracle 数据库的核心组件,负责管理数据库的存储、查询和事务处理。 * 数据库文件(Database File):是 Oracle 数据库的存储单元,用于存储数据和索引。 * 表空间(Tablespace):是 ...

    Oracle高级详细资料

    本文将基于"Oracle高级详细资料"的标题和描述,深入探讨Oracle物理内存的分配、数据库碎片整理、回滚段的管理、系统使用经验和性能优化技术。 首先,Oracle物理内存的分配是数据库高效运行的基础。在Oracle 9i版本...

    oracle 内存管理

    本文将深入探讨Oracle 10g在Linux操作系统下的内存高级管理策略,包括系统全局区(SGA)和程序全局区(PGA)的优化,以及磁盘输入/输出(I/O)和磁盘碎片处理等关键因素。 ### 1. SGA与PGA优化 #### 1.1 SGA...

    ORACLE日常监控与性能问题处理脚本

    在Oracle数据库管理中,日常监控和性能问题处理是DBA(数据库管理员)的重要职责。"ORACLE日常监控与性能问题处理脚本"是一组实用工具,可以帮助DBA更有效地完成这些任务。这些脚本通常包括SQL查询、PL/SQL过程和...

    oracle IO调优

    #### 一、硬盘基础知识与Oracle磁盘性能问题定位 ##### 硬盘基础知识 硬盘作为存储设备的核心组成部分,在现代计算机系统中扮演着至关重要的角色。了解硬盘的基本工作原理对于理解Oracle数据库中的IO问题至关重要...

    oracle数据库的优化

    3. **避免动态空间管理**:预分配空间可以减少磁盘碎片和动态分配带来的开销。 **调整排序:** Oracle在处理排序操作时可能消耗大量资源。通过调整排序区大小、使用索引或并行查询等方式,可以优化排序性能。 **...

    oracle数据库文本文档

    Oracle还提供了过程化数据库选项和并行服务器选项,前者增强了数据库的程序化能力,后者则通过并行处理技术提高了大规模数据处理的能力。 #### 三、Oracle数据库体系结构 Oracle数据库体系结构主要由实例...

    oracle dba的官方教材3

    - **课程示例:HR 示例方案**:这通常是一个教学案例,用来帮助学习者理解和实践Oracle DB的各种功能,如创建表、查询数据、执行事务处理等。 #### 二、Oracle DB 的核心概念与工具 - **Oracle DB Server 核心组件...

    让Oracle跑得更快2:基于海量数据的数据库设计与.pdf

    然而,随着数据量的不断膨胀,如何优化Oracle数据库以适应海量数据的高效处理,成为了一项挑战性的任务。“让Oracle跑得更快2:基于海量数据的数据库设计与”这一主题,正是聚焦于解决这一问题,旨在通过合理的...

    Oracle 11g12c关键技术特性

    4. 自动空间管理:自动管理表空间中的空闲空间,减少了磁盘碎片和碎片整理的需求。 5. 自动存储管理(ASM):一种用于管理数据库文件的磁盘存储的机制。 在安全性方面: 1. 虚拟专用数据库(VPD):通过设置策略...

    浅谈Oracle 11g数据库性能调整和优化.pdf

    本文的关键词有性能调整和优化、配置优化、磁盘I/O优化、磁盘碎片调整等。 在数据库性能调整和优化中,需要考虑多方面的因素,包括数据库服务器的性能、数据库的配置、网络I/O情况、应用程序性能情况等。在配置...

    ORACLE_日常维护知识大全

    根据提供的文档内容,可以看出这是一份关于Oracle 10g数据库日常维护的手册。尽管文档中包含了一些非相关的网站链接,但我们可以从已有的结构和标题中提炼出一系列重要的Oracle数据库维护知识点。以下是对这份文档...

    oracle ASM

    - 定期执行ASM的维护操作,如磁盘检查、数据碎片整理等,以保持系统的高效运行。 通过以上内容的详细介绍,我们可以看出Oracle ASM不仅是一个强大的存储管理系统,而且还提供了丰富的特性来满足企业级应用对高可用...

    Oracle Performance Tuning Guide

    Oracle 数据库是业界广泛使用的数据库管理系统之一,其在处理大量数据及复杂查询方面表现卓越。随着业务需求的增长和技术的发展,优化Oracle数据库性能成为确保系统高效运行的关键因素之一。本文将根据《Oracle ...

    oracle高性能优化

    2. **表空间管理**:合理规划表空间的使用,尤其是临时表空间,以减少磁盘碎片。 3. **数据压缩**:启用Oracle的数据压缩功能可以在一定程度上降低存储成本,并加速数据读取速度。 #### 四、系统配置调优 1. **...

Global site tag (gtag.js) - Google Analytics