什么是内部碎片?什么是外部碎片?各种存储管理中都可能产生何种碎片?

来源:百度知道 编辑:UC知道 时间:2024/06/21 23:42:15

内部碎片_(在数据页内部)产生的碎片
外部碎片_(在数据页外部)产生的碎片
在这里,假设群集索引中的碎片会导致所有其他索引中产生碎片,因为群集索引(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速度;

行操作的争