什么是内部碎片?什么是外部碎片?各种存储管理中都可能产生何种碎片?
要搞清楚内部碎片与外部碎片的区别首先要明白分页与分段
为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。
外部碎片:因为行程持续地被载入与置换,使得可用的记忆体空间被分割成许多不连续的区块。
虽然记忆体所剩空间总和足够让新行程执行,却因为空间不连续,导致程式无法载入执行。
内部碎片:发生在以固定长度分割区来进行配置的记忆体中当一个程式载入到固定大小的分
割区时,假如程式小于分割区,则剩余的空间将无法被使用,称为内部碎片。
利用聚集或分页可以消除外部碎片。
1.内部碎片:
当一个进程装入到固定大小的分区块(比如页)时,假如进程所需空间小于分区块,则分区块的剩余的空间将无法被系统使用,称为内部碎片。
2.外部碎片:
指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。
3.存储管理中都可能产生的碎片:
除了内部碎片和外部碎片,在“分页存储”中,可能产生“页内碎片”,页内碎片是由于进程的最后一页经常装不满一块而形成了不可利用的碎片。
扩展资料
在数据存储领域中,碎片(fragmentation)是指存储空间使用效率低下,结果导致功能、运行效率变低或二者兼而有之的现象。碎片化所造成的影响取决于具体的存储系统以及碎片化的种类。
大部分情况下,碎片化都会导致都会导致存储空间的浪费,此时“碎片”一词亦可指代闲置的空间本身。对于其他的一些系统来说(比如FAT文件系统),数据量一定的前提下,用于存储数据所占的存储空间是一定的,和碎片化的程度无关。
参考资料来源:百度百科-外部碎片
内部碎片_(在数据页内部)产生的碎片
外部碎片_(在数据页外部)产生的碎片
在这里,假设群集索引中的碎片会导致所有其他索引中产生碎片,因为群集索引(cluster index)被作为“群集关键字(cluster key)”与所有其他的在其上构造的非群集索引(non-clustered index)一起使用。我使用带有tablesresult子句的dbcc showcontig语句来查询产生的结果表,以列出所有包含内部碎片或者外部碎片的表的名字,其中内部碎片低于一个给定的可接受的扫描密度百分比,外部碎片大于一个给定的外部碎片百分比。
对于像Sybase这样的大型DBMS系统而言,作为OLTP(联机事务处理)应用的基石,它需要能每天24小时,每年365天不间断运行。由于其应用程序每天对数据库进行大量的插入、更新、删除等操作,在数据库的物理存储介质上产生了大量存储碎片,从而影响了存储的效率以及数据库应用运行的速度。是否可以像Windows操作系统的“碎片整理”程序一样,整理这些碎片,从而优化数据库存储,提高数据库的运行速度呢?答案是肯定的。本文将介绍Sybase数据库的碎片类型以及碎片整理方法。
碎片类型
由于Sybase是通过OAM页、分配单元和扩展页来管理数据的,所以对OLTP应用的Database Server会十分频繁地进行数据删除、插入和更新等操作,时间一长就会出现以下几种情况:
1. 页碎片
即本来可以存放在一个页上的数据却分散地存储在多个页上。如果这些页存储在不同的扩展单元上,Database Server就要访问多个扩展单元,因此降低了系统性能。
2. 扩展单元碎片
在堆表中,当删除数据链中间的记录行时,会出现空页。随着空页的累积,扩展单元的利用率也会下降,从而出现扩展单元碎片。带cluster index的table也有可能出现扩展单元碎片。
当有扩展单元碎片存在,会出现以下问题:
对表进行处理时,常常出现死锁;
利用较大的I/O操作或增加I/O缓冲区的大小也无法改变较慢的I/O速度;
行操作的争用。
3. 扩展单元遍历
带有cluster index的table会由于插入记录而导致页分裂,但当删除记录后,页会获得释放,从而形成跨几个扩展单元和分配单元的数据,而要访问该数据就必须遍历几个扩展单元和分配单元。这将导致访问/查询记录的时间大大延长,开始时数据库的性能虽然较高,但使用一段时间后性能就会下降等问题。
实际上,数据在存储空间上排列得越紧密有序,Database Server访问的速度就越快,消除碎片有助于提高系统的性能和更有效地利用数据存储空间。
碎片优化方法
处理碎片有多种方法,如重新定义table的填充因子,根据table的定义删除并重新创建索引、重建表等。
本文给出的方法是通过BCP实用程序将用户数据库的数据以文本形式导出,然后将用户数据库彻底清空、截断,再将文本数据导入到数据库,从而达到消除碎片的目的,具有通用性。
下面以Sun Solaris 7操作系统下的Sybase Adaptive Server Enterprise 11.5为例,说明整理数据库数据的具体方法。
1. 备份数据库
为防止在数据库碎片整理过程中出现不可预见的问题,有必要先备份数据库。
2. 创建bcp out脚本并导出数据
创建包含下列SQL语句的文件:
cre_bcp_out.sql
select “bcp” + name + “out ./” + name + “_out.txt -Udboname -Pdbopwd -Ssys_name -c”
from sysobjects where type = ‘U’
order by name
go
isql -Udboname -Pdbopwd -Ssystemname < cre_bcp_out. sql > b_out
编辑输出文件,去掉文件第一行和最后两行无关的字符:vi b_out
执行脚本,将数据库的数据导出到文本文件:sh b_out
3. 创建truncate table脚本并截断数据库
创建包含下列SQL语句的文件:
cre_trunc_out.sql
select “truncate table” + name from sysobjects where type = ‘U’
order by name
go
isql -Udboname -Pdbopwd -Ssystemname < cre_ trunc_out. sql > trunc_out. sql
编辑输出文件,去掉文件第一行和最后两行无关的字符,并在最后一行加入 go构成完整的SQL语句:vi trunc_out
执行以下语句,清空数据库的数据:
isql -Udboname -Pdbopwd < trunc_out. sql
4. 创建bcp in脚本并导入数据
创建包含下列SQL语句的文件:
cre_bcp_in. sql
select “bcp” + name + “in ./” + name + “_out.txt -Udboname -Pdbopwd -Ssys_name -c”from sysobjects where type = ‘U’
order by name
go
isql -Udboname -Pdbopwd -Ssystemname < cre_ bcp_in. sql > b_in
编辑输出文件,去掉文件第一行和最后两行无关的字符:vi b_in
从文本中导入数据:sh b_in
5. 更新数据库状态
Sybase不自动维护索引的统计信息,当用truncate table截断数据库时,索引并没有改变,所以必须用update statistics来确保索引的统计信息对应当前表数据的统计。
创建包含下列SQL语句的文件:
cre_upd_st. sql
select “update statistics” + name from sysobjects where type = “U” order by name
go
isql -Udboname -Pdbopasswd -Ssystemname < cre_upd_st. sql > upd_st. sql
编辑输出文件,去掉文件第一行和最后两行无关的字符,在最后一行加入 go构成完整的SQL语句:
vi upd_st. sql
更新数据库状态:
isql -Udboname -Pdbopasswd -Ssystemname < upd_st. sql
至此,基本上完成了数据库用户表的碎片整理工作。
小 结
在整理过程中,有以下两点需要注意:
1. Tempdb的大小
当Sybase执行bcp in脚本时,会占用导入数据2倍的tempdb空间,因此在执行前要仔细估计最大的table的大小,保证有足够的tempdb空间。当空间不够时,要考虑用分割table或删除陈旧数据的方法缩小table的大小,或者考虑增加tempdb的大小。
2. 数据库配置选项的设置
当数据库执行bcp in脚本时会产生大量的log,为保证bcp in进程不致因为log溢出而中断,应该设置database的选项“truncate log on chkpt”为“true”。
虽然Sybase数据库是自优化的,但只要数据库是动态的,数据库碎片现象就会存在。在OLTP应用的场合,随着数据的不断增大,系统变得越来越缓慢,并且经常出现死锁时,应该检查数据库的碎片,并且采用以上方法进行优化。
实际上,应该定期做数据库的碎片整理,保证数据库的物理存储经常处于最优状态,相对于增加硬件而言,这是一种更好的保持数据库性能的低成本的途径。
所谓“内部碎片”,是指系统已经分配给用户使用、用户自己没有用到的那部分存储空间;
所谓“外部碎片”,是指系统无法把它分配出去供用户使用的那部分存储空间。
对于教材而言,单一连续区存储管理、固定分区存储管理、分页式存储管理和请求页式存储管理都会出现内部碎片。只是前两种存储管理造成的内部碎片比较大,浪费较为严重;后两种页式存储管理,平均来说每个作业都会出现半页的内部碎片。教材中,只有可变分区存储管理会产生外部碎片。
什么是内碎片外碎片
内碎片即内部碎片,是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块;外部碎片指的是...
什么是内部碎片?什么是外部碎片?各种存储管理中都可能产生何种碎片?
当一个进程装入到固定大小的分区块(比如页)时,假如进程所需空间小于分区块,则分区块的剩余的空间将无法被系统使用,称为内部碎片。2.外部碎片:指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。3.存储管理中都可能产生的碎片:除了内部碎片和...
内部碎片外部碎片区别
内部碎片就是已经被分配出去,但是其内存空间却不被利用。内部碎片是处于区域内部或者页面内部的存储块,占有这些区域页面的进程并不会使用这些存储块。而在进程占有这块存储块时,系统将无法利用它,直到进程释放它,或者进程结束时,系统才有可能会利用这个存储块。内存碎片是因为在分配一个内存块后,使...
内部碎片和外部碎片有什么区别
1、产生的位置:内部碎片是位于一个操作系统分配的用于装载进程的内存区域或页面内部的存储块,而外部碎片是位于任何两个已分配区域或页面之间的空闲存储块。2、能否利用:内部碎片是已经被分配出去的,但由于某种原因无法被利用,而外部碎片尚未被分配,但由于太小无法被利用。3、解决方案:内部碎片的解决...
内部碎片和外部碎片有什么区别
1、产生原因:内部碎片的产生主要是由于内存分配算法的限制,导致内存分配不能精确地适应不同进程的内存需求。而外部碎片的产生主要是由于频繁的内存分配和回收操作,导致出现大量连续且小的内存块夹杂在已分配的内存块中间。2、碎片大小:内部碎片的大小通常较小,因为它是由于内存分配算法的限制而产生的。...
内部碎片和外部碎片的区别。(操作系统之内存管理)
其他回答 内部碎片是某一区域或某一页中,未被占据其位置的作业所使用的区域。直到作业完成,释放页或区域,这个空间才能被系统所利用。 whzjor | 发布于2012-05-08 举报| 评论 3 1 为您推荐: 计算机系统第四版答案 苹果系统怎么降级 i5和i7的区别有多大 ==和===的区别 内部碎片 外部碎片 伙伴...
什么是内存碎片?怎么解决碎片问题?
内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。只要借助一条VBScript脚本语句可以轻松实现内存碎片的整理。1、打开“记事本”程序键入“Mystring=Space(...
分段式存储管理为什么不回产生内部碎片
内部碎片就是为每个进程分布的内存空间之中所没有被使用到的内存碎片。通常出现在分页式存储管理之中。分页式是什么应该很好理解,就是把内存按照分为一页页大小相同的页面,然后再把这些页面分配给进程。因此,在分配给进程时可能会出现这样的情况:进程需要3MB,分给他4页,每页1MB,这样4>3,就会...
磁盘碎片外部碎片和内部碎片的介绍
而磁盘上的外部碎片(即平时所说的磁盘碎片,磁盘碎片清理工具只能清理磁盘上的外部碎片,清除不了磁盘上的内部碎片,除非改变文件系统的分配单位即簇的大小,使之是一个文件大小的整数倍。)实际上指的是一个文件占据那些簇是不连续的,就相当于文件被分割开来,分别存放在相互间断的几段簇上。文件被分...
外部碎片和内部碎片的区别
为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。【TSD、M】
詹徐惠复: 碎片:不同的分配方案要分别考虑这4个问题 (1) 含义: (2) 引起原因:分区式的区内碎片,分页式的页内碎片,外存分配的连续分配. (3) 解决方法:紧凑.什么时候用?分页式一般不谈紧凑 (4) 分类:1内碎片(内存中的)和外碎片(外存中) 2内碎片是页内碎片等已经分配给进程但不会被使用的空间. 5. 实例设计:尽量选用速度快价格可以接受的.EG:全用CACHE不用磁盘.
漳平市19844488811: 内部碎片和外部碎片的区别.(操作系统之内存管理) - ?
詹徐惠复: 就是文件通常都是很小的很小的东西但是很多 就像把文件放到硬盘里一样 排列很乱 很多文件并不是紧密相挨着的(可以这么理解) 整理就是把他们排序一下 以减小他们的占用空间(体积) 例如优化大师超级兔子的内存整理
漳平市19844488811: 请教什么是内碎片,什么又是外碎片呢? - ?
詹徐惠复: 固定分区分配产生外碎片,动态分区(分段分页)产生内碎片.根据磁盘的分区方式而定.
漳平市19844488811: 操作系统外碎片与内碎片的区别 - ?
詹徐惠复: 外部碎片,是由于大量信息由于先后写入、置换、删除而形成的空间碎片.为了便于理解,我们将信息比作货物,将存储空间比作仓库来举例子.假设,我们有编号为1、2、3、4、5、6的6间仓库库房,前天送来了一大宗货,依次装入了1、2、...
漳平市19844488811: 内存碎片是什么,和操作系统的mmu有什么关系 - ?
詹徐惠复: 内存碎片分为:内部碎片和外部碎片.内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域.只要借助一条VBScript脚本语句可以轻松实现内存碎片的整理.1、打开“记事本”程序键入“Mystring=Space(16000000)”.2、保存文件,选择为:“所有文件”,文件名框中输入扩展名txt改vbs,单击“保存”.3、双击执行该文件都可以快速进行内存碎片整理,尽管文件执行的时候没有任何提示,内存碎片被整过了.
漳平市19844488811: 存储管理中的“碎片”是指 - ?
詹徐惠复: 存储管理中的碎片是指内存中出现的一些零散的小空闲区域.
漳平市19844488811: 如何理解动态内存碎片(C语言)?
詹徐惠复: 内存碎片分为:内部碎片和外部碎片 【内部碎片】 内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间; 内部碎片是处于区域内部或页面内部的存储块.占有这些区域或页面的进程并不是用这个存储块.而在进程占有这呃存储块时,系统无法利用它.直到进程释放它,或进程结束时,系统才有可能利用这个存储块. 【外部碎片】 外部碎片指的是还没有被分配出去(不属于任何进程),但由于大小太小了无法分配给申请内存空间的新进程的内存空闲区域. 外部碎片是出于任何已分配区域或页面外部的空闲存储块.这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请.
漳平市19844488811: 碎片整理到底起到什么作用啊? - ?
詹徐惠复: 磁盘碎片整理的是外部碎片.简单来说,碎片主要有内部碎片和外部碎片.内部碎片就是磁盘是分簇管理的,比如一个簇空间是512K,那么一个256K的文件仍然需要分配1个簇.那么浪费的256K就是内部碎片.更先进的文件系统支持更小的簇...
漳平市19844488811: 什么是内部碎片?什么是外部碎片?各种存储管理中都可能产生何种碎片?” - ?
詹徐惠复: 就是在用了软件之后,没删除的文件.