CN1609850A - 调整数据库大小的系统和方法 - Google Patents

调整数据库大小的系统和方法 Download PDF

Info

Publication number
CN1609850A
CN1609850A CNA2004100474362A CN200410047436A CN1609850A CN 1609850 A CN1609850 A CN 1609850A CN A2004100474362 A CNA2004100474362 A CN A2004100474362A CN 200410047436 A CN200410047436 A CN 200410047436A CN 1609850 A CN1609850 A CN 1609850A
Authority
CN
China
Prior art keywords
page
leaf
file
dirty
blank
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2004100474362A
Other languages
English (en)
Other versions
CN100445990C (zh
Inventor
S·J·白利
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN1609850A publication Critical patent/CN1609850A/zh
Application granted granted Critical
Publication of CN100445990C publication Critical patent/CN100445990C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation

Abstract

收缩数据库文件通过操作文件中的页,使得所有空页驻留在文件末端来完成。来自文件末端的非空页写入文件始端的空页中。重复这一进程正确的次数,其结果是令所有空页都驻留在文件末端。一旦达到这一结果,截断文件使得被所有空且可废弃的页消耗的空间归还给文件系统。截断文件牵涉从文件末端反向遍历文件直到找到第一个非空页。文件在最后一个非空页之后被截断。

Description

调整数据库大小的系统和方法
技术领域
本发明一般涉及数据库,尤其涉及自动重新调整数据库文件的大小。
发明背景
数据库和数据库产品今天被普遍使用。数据库能够储存对象,诸如记录、表和索引。在数据库上执行的各类操作,如删除对象,能够在数据库中产生空闲空间(存储)。这种空闲空间通常发布于整个数据库文件中,并因此无法简单地从数据库文件中移除。这种空闲存储对数据库来说是有问题的,尤其是对移动数据库产品来说。移动数据库产品通常用在具有有限存储和/或速度的小型便携式设备上。因此,对存储的有效使用是众多移动数据库产品的目的。
当前对更有效地使用该空闲内存的尝试包括一种被称为压缩(compacting)的技术。压缩数据库通常牵涉创建新数据库,然后将所有对象从源数据库复制到新数据库。压缩的效果是不仅从数据库文件中移除了空页,也重新整理了数据库的碎片。有碎片的数据库是具有许多非空页,且这些非空页仅部分满的数据库。通常,压缩不会自动启动(如,按时间表或者响应一些非用户生成触发),因为压缩的进程既是处理器密集的又是盘密集的,并且因此通常在执行该进程时令数据库无法服务一或者,至少将数据库减速到用户能感到性能上的显著影响的程度。
渴望一种用于调整数据库大小的技术,适合于无论用户当前在干什么都能够自动启动,能够在用户相对察觉不到的背景下执行,并相对简单且有效,使其能够在具有有限速度和/或存储器的产品上实现。
发明概述
本发明提供了一种用于自动减小数据库大小的机制。该机制应称为“数据库自动收缩(autoshrink)”,它提供了自动调整数据库文件大小的能力。这一自动收缩技术能够在多用户环境中运行。该技术采用相对较少的处理器时间和存储器,因此令它尤其适合于具有有限存储器的电子设备,如手持式设备和/或移动数据库产品。通常,该自动收缩技术在文件内移动页,使所有的空页或未分配页彼此相连地位于文件的末端。然后截断空白且可废弃的页。被截断的页可被数据库文件系统所利用。将截断的页返回给数据库文件系统能够增加文件系统空间。
为了执行本发明的自动收缩进程,从文件的最后一页开始遍历数据库文件,并向文件的第一页前进。当遇到一页,如果它为空,则指示它为跳过,或者如果它为非空,则指示它为脏。将跳过的页加上脏页的总和与文件中空页的总数相比较。如果该总和小于所述文件中空页的总数,则遍历继续至文件中的下一页。如果该总和大于或等于所述空页的总数,则将脏页的内容写入尚未遍历的文件的空页,并且将每一脏页和每一跳过的页标记为未分配。然后将未分配页从文件中截断。
用于实现该方法的示例系统包括包含页的存储器文件、控制器、分配指示器和截断器。控制器从文件的最后一页开始文件遍历,向文件的第一页前进。对于每一遇到的页,如果该页为空,控制器将遇到的页指示为跳过,如果它非空,则指示为脏。控制器将跳过的页加上脏页的总和与所述文件中的空页的总数相比较。如果该总和小于空页的总数,遍历进程以遍历顺序继续至文件中的下一页。如果该总和大于或等于空页的总数,则将脏页的内容写入尚未遍历的文件的空页中。分配指示器指示每一脏页和每一跳过的页为未分配。截断器然后从文件截断未分配的页。
附图的简要描述
结合附图阅读以下描述,可以清楚本发明的特征和优点,附图中:
图1所示是依照本发明一个实施例的包含存储页的示例数据库文件;
图2所示是依照本发明一个示例性实施例的数据库文件,显示了标识为将要写入空页的页;
图3所示是依照本发明一个示例实施例的数据库文件,显示了标记为被跳过的页和标记为脏的页;
图4所示是依照本发明一个示例实施例的在自动收缩进程完成时的数据库文件;
图5所示是依照本发明一个示例实施例的用于将逻辑ID映射到物理地址的示例映射表;
图6是依照本发明一个示例实施例的用于执行自动收缩的进程的示例流程图;
图7是依照本发明一个示例实施例的用于调整数据库文件大小的系统的结构图;以及
图8所示是适于在其中实现依照本发明一个示例实施例的调整存储大小的方法和系统的计算系统环境的示例。
具体实施方式
依照本发明的数据库自动收缩提供了自动调整数据库文件大小的能力。一般,自动收缩技术在文件中移动页,使得所有空页彼此相连地位于文件的一端。然后截断空页。截断的页于是可被数据库文件系统所使用。因为数据库文件被截断,返回给文件系统的空间现在可用于其它应用(如,它释放了盘空间)。
图1所示是包含9页存储的数据库文件。图1呈现的是数据库自动收缩对据库文件所具有的效果示例。如图1所示,页2、4、6和8为空,页1、3、5、7和9非空(灰色阴影)。所述空页、非空页的布置以及数量都是示例性的。空页是包含数据库用户不感兴趣的信息的页-例如不含数据的页,或者被数据库管理系统解除分配的页。因此,空页可以被丢弃或被另一实体(如,另一用户)使用。非空页是包含数据库用户感兴趣的内容的页。图1所示的文件包含4个空页和5个非空页。尽管图1的文件中页的总数是9,但只有5页是想要的。丢弃4个空页能够将文件的大小减小到5页。
在一个示例实施例中,非空页被从文件的一端复制到更靠近文件的另一端的空页。例如,非空页7和9(靠近文件的右端)的内容可以移动到空页2和4(更靠近文件的左端)。结果是一些不需要的页的邻近的块驻留在数据库文件的末端,并且文件可以被截断。图2中的数据库文件说明了页7和9被标识为将要写入空页的页。在将页从文件的一端写入文件的另一端之前,先标识出将要写的页。如图2所示,页7和9已标识为将要写入空页的页,由灰色条纹来表示。标识出了页7和9后,它们即被写入文件另一端的空页中。页7和9写入页2和4中,如图2中虚箭头所表示。如图2所示,页7写入页4,页9写入页2。这一模式是示例性的。例如,页7可以写入页2,页9可以写入页4。只要维护了页的位置,页7和9的内容就是可检取的,与内容所驻留的实际页无关。页的位置通过使用逻辑标识符(ID)来维护。逻辑ID以及使用逻辑ID的页维护在下文有更详细的描述。
通过从将要复制的页驻留的文件末端(图2中的右端)开始,向另一端反向遍历文件,选择页7和9作为复制到空页的页。在这一示例中,进程从页9开始,并向页1进行。在每一遇到的页,确定该页为空或非空。可以通过任一合适的方法,如通过分析页头等等,来实现确定页为空或非空。在遍历中,当遇到页,如果它是空页,则标记为跳过,如果它是非空页,则标记为脏。
图3是表示标记为跳过的页6和8以及标记为脏的页7和9的文件的说明。在该示例中,从页9开始遍历,并向页1继续进行,页9非空,并标记为脏,页8为空,并标记为跳过,页7非空,并标记为脏,页6为空,并标记为跳过。遍历进程在这一点上暂停,并将页7和页9写入页2和页4、在一个实施例中,遍历进程继续进行直到跳过的页和脏页的总和大于或等于文件中空页的数量。这在数学上可以表示为:
∑(跳过的页+脏页)≥文件中空页的#。           (1)
对遇到的每一页,计算等式(1),如果脏页和跳过的页的总和小于文件中空页的数量,则遍历进程以遍历顺序继续进行到下一页。如果脏页和跳过的页的总和大于或等于文件中空页的数量,则遍历进程停止,并将脏页写入包含在尚未遍历的文件部分中的空页。参考图3,文件中空页的总数是4。从页9开始,它非空,并因此标记为脏。总和现在等于1,小于4,因此遍历进程继续进行到页8。页8为空,并因此标记为跳过。总和现在等于2,因此遍历进程继续进行到页7。页7非空,并因此标记为脏。总和现在等于3,因此遍历进程继续进行到6。页6为空,并因此标记为跳过。总和现在等于4,因此遍历进程停止。现在将页7和9的内容写入尚未遍历的文件部分中的空页中。页1到5尚未遍历。页2和4是尚未遍历的文件部分的空页。因此,将页7和9的内容写入页2和4。
图4说明了自动收缩进程完成时的数据库文件。空页和脏页被移除。剩余的页非空。页1、3和5包含与自动收缩进程开始之前的相同的内容。先前的空页2和4现在包含来自位于文件其它地方的非空页的内容。
在一个示例实施例中,为配置并控制自动收缩进程方面提供了各类控制。这些控制可以在任何适当的时间提供,例如,当打开数据库时。这些控制包括空页门限、最大执行时间限制以及重试间隔。这些控制可以个别使用或组合使用。
空页门限是以文件中空页总数的百分比表示的值。可以使用空页门限来开始自动收缩进程。例如,可以将文件中空页的百分比与空页门限相比较。当该文件中的空页百分比超过空页门限时,则开始自动收缩进程。因此,如果空页门限设为零,则当第一个空页存在时就开始自动收缩进程。如果空页门限设为100%,则永远不会开始自动收缩进程(因为为使空页百分比等于100,整个数据库必须不包含任何数据)。
最大执行时间限制限制了自动收缩进程能够执行的时间。在一个实施例中,最大执行时间限制用毫秒来表示。通过限制自动收缩进程的执行时间,能够保存系统的CPU周期数。将最大执行时间限制设定为无穷大,使自动收缩进程能够运行至完成,由此从数据库文件中移除了所有的空页。如果最大执行时间限制设为零与无穷大之间的一个值,当自动收缩进程执行的时间多于指定的时间时,则自动收缩进程将按照它在执行过程中能够移除的空页的数量来收缩文件,然后停止执行。由此,最大执行时间限制提供了逐渐减小数据库文件大小的能力,而不会在很长一端时间内阻碍系统。
重试间隔是自动收缩进程在进程执行以后能够重新开始(如重新启动)之前所经过的时间的值。重试间隔是在重新再次开始自动收缩进程之前需要等待的时间。例如,重试间隔可以用来配置每隔多久尝试收缩空页百分比超过空页门限的数据库。如果最大执行时间限制未限制(如,设为无穷大),则重试间隔时间不会产生效果。当最大执行时间限制未限制时,自动收缩进程会运行到完成,并从文件中移除所有的空页,由此免除了重试自动收缩的需要。
以下是三种控制,即空页门限、最大执行时间限制和重试间隔如何使用的示例。在事务被提交并清洗到盘之后,即判断空页百分比是否超过用户提供的空页门限。如果超过了空页门限,则自动收缩进程执行并持续最大执行时间限制。如果自动收缩进程由于超过了最大执行时间限制而终止,并且空页数仍然超过空页门限,则自动收缩进程将在自动收缩重试间隔过去之后尝试再次收缩数据库。
如上所述,当将非空页写入空页时,维护页的位置。典型的数据库产品使用页标识符来表示文件中页的物理地址。例如,典型的数据库产品按照页从数据库文件始端的逻辑偏移来标识每一页。然而,这一方法令在数据库中将页从一个地方移动到另一个变为较困难,因为必须更新对页的每一个引用来反映页的新位置。
如此,在本发明的一个示例实施例中,数据库文件中的页由逻辑页标识符(ID)来标识。在数据库中,使用逻辑ID来访问并跟踪页。逻辑页ID被映射到物理页地址一即,页在文件中的偏移。这一映射可以通过任一合适的方法来实现。在一个示例实施例中,逻辑页ID到物理地址的映射通过映射表来实现。图5是用于将逻辑ID 54映射到物理地址56的示例映射表500的说明。映射表500可以作为一组页储存在数据库文件中。每一映射表500包括将逻辑页ID 54映射到存储器的相应页的物理页地址56(也称为位置)的条目52。当对页进行访问时,页是通过其逻辑地址来标识的,并使用映射表500来将逻辑地址转换为物理地址;这一进程与虚拟地址系统使用地址转换表来将虚拟地址映射到物理地址的方式相类似。当页的物理位置改变(如,当数据清洗到数据库),更新映射表500中其相应的条目。对于该条目,被移动的页的逻辑页ID 54未改变,但该页将要被移往的物理地址被输入到映射表500中条目52的物理地址部分中。当使用逻辑页ID来标识页时,减少了将页从数据库的一个地方移动到另一个地方的管理负荷,并且因此,使用逻辑页ID支持经常牵涉将许多页从文件的末端向始端移动的自动收缩进程。
结合图3参考以上示例,当页7的内容写入页4时,与该内容相关联的逻辑ID未改变。更新与该逻辑ID相关联的物理位置来反映新位置。因此,与页7的内容相关联的逻辑页ID保持不变,并且与该逻辑ID相关联的物理地址从页7的位置变为页4的位置。数据库系统通过逻辑页ID来访问页。在一个示例实施例中,为逻辑页ID分配特定值来标识该逻辑ID引用的页的类型。例如,逻辑页ID的一个特定范围可能指映射表页,而另一范围可能指数据页(如,包含诸如索引和记录的数据库内容的页)。
如上所述,依照本发明的实施例的自动收缩进程牵涉将非空页的内容写入空页。在这一进程中,一些页会变为空闲,而另一些会变为已使用。使用分配指示器来提供页的分配状态。分配指示器指示逻辑ID和物理页的状态(可用或不可用、空闲或已使用)。可以使用任一合适的用于指示状态的方法。在一个示例实施例中,使用位图来指示逻辑ID的分配状态。逻辑ID分配位图包含对映射表(如,映射表500)中的每一条目的一个位。在一个示例实施例中,位设为1,指示相应的条目已分配(不可用)。位设为0,指示相应的条目为空闲(可用)。在自动收缩进程中,可通过搜索值为零的位图来定位一个可用的页。为指示该找到的页现在已分配,将相应的位图条目改为1。当脏页的内容写入空页时,将该脏页的物理ID标记为已分配(也称已使用,或不可用),将并且先前空页的ID标记为未分配(也称空闲或可用)。
在一个示例实施例中,逻辑ID分配位图作为一组页储存在数据库文件中。在另一实施例中,当打开数据库时对位图进行初始化。可以通过清点映射表中所有页条目来完成初始化。如果页条目包含页的有效物理地址,则将与该页条目相应的页ID标记为已分配。一旦扫描了所有的条目,则位图即指示页ID的当前分配状态。
这一分配位图可以储存在数据库文件中。例如,如果数据库文件的最大尺寸是232字节(4千兆字节),并且数据库页尺寸是4096字节,则结果是最多220个逻辑页ID。因此可以使用131,072字节来实现逻辑页ID分配位图。使用分配位图使逻辑页ID能够被释放和/或分配,而不需要修改或读维护页。这通过允许多重事务在同一时间在数据库中分配和释放页ID来提高了并发性。使用分配位图也为分配和释放逻辑页ID提供了一种健壮的机制,因为位图和页条目都包含在数据库文件中。
一旦将位图读入内存中,或者通过扫描页条目来计算出,即可以通过对位图中的位计数直到遇到与要分配/释放的页相应的位来完成页的分配和释放。要释放逻辑页ID,只需将位从1改为0。要分配逻辑页ID,只需将位从0改为1。
上述用于分配和释放逻辑页ID的位图型机制同样也可以应用到分配和释放物理页地址中。在这一情况下,位图对于数据库文件中的每一物理页地址具有一个位。在一个示例实施例中,位设为1指示该物理页地址已分配。位设为0指示该物理页地址为空闲。当脏页写入空页时分配物理页地址。这里描述的调整存储大小提供了有效地找到一个空/未使用页的物理页地址的能力。在一个示例实施例中,该物理地址分配位图储存在数据库文件中。然而在另一实施例中,当打开数据库时,通过扫描数据库页来计算物理地址分配位图。如果计算位图,则可以在计算逻辑页ID位图的同时计算物理页地址位图,因为扫描了同一组页。释放物理页地址的技术与上述释放逻辑页ID的技术一样。分配物理页地址的技术与分配逻辑页ID的技术几乎一样。不同之处在于如果存在的物理页地址非空闲,则扩大数据库文件并且添加到数据库文件的新物理页地址在地址位图中被标记为空闲物理页地址。
图6是执行自动收缩的进程的示例流程图。在步骤60确定文件中页的总数。在步骤62确定文件中空页的总数。该总数可以通过任一合适的方法来确定。适当地确定文件中空页总数的示例包括扫描文件和/或扫描分配指示器(如位图)。在另一实施例中,页总数和空页总数由数据库系统提供给进程。在步骤64确定空页对页总数的百分比。可以使用任一代表该百分比的合适的值,如可以通过用空页总数除以页总数并将商乘以100来确定该值。在数学上可用PCV来表示,百分比值:
Figure A20041004743600141
在步骤66,确定PCV是否大于或等于空页门限。步骤66是任选的一即,可能未设定空页门限。如果未设定空页门限,则进程从步骤64直接继续进行到步骤68。如果设定了空页门限,并且PCV小于空页门限,则进程在步骤74等待大于或等于重试间隔值的时间之后继续进行到步骤60。如果重试间隔值设为零,则进程直接继续进行到步骤60。如果重试间隔值设为无穷大,则进程永不继续进行到步骤60。可以理解,图6描述的步骤60和62的顺序是示例性的,任一顺序都是合适的。即,步骤60可以在步骤62之前出现,步骤62可以在步骤60之前出现,或者步骤60和62可以同时出现。
在步骤68,遍历的起点位于文件的最后一页。尽管步骤68描述走到文件末端的最后一页,然而遍历可以在文件的任一端开始。例如,参考图3,遍历可以在页9开始向页1继续进行,或者遍历可以从页1开始向页9继续进行。在第一个遍历示例中(从右到左),空页驻留在右边,在后一遍历示例中(从左到右),空页驻留在左边。在步骤70,遍历进程从文件一端的页开始。同样在步骤70,当遇到页时,如果该页为空,则将其标记为跳过,如果非空,则将其标记为脏。在将遇到的页标记为脏或者跳过之后,在步骤78将跳过的页和脏页的累计总和与空页数相比较。如果该总和小于空页数,则遍历进程在步骤76继续进行到遍历中的下一页,并且遍历进程在步骤70继续。如果脏页和跳过的页的总和大于或等于空页数,则在步骤80将脏页写入空页。脏页写入尚未遍历的文件部分的空页中。在步骤82将脏页和跳过的页标记为未分配。如上所述,可以通过位图来实现分配状态。在步骤82截断未分配页(脏页和跳过的页)。在步骤86重置空页和跳过的页的数量,使得下一次执行步骤78时,例如,用来计算跳过的页和脏页的数量的计数器没有残留的值。
在图6描述的进程中的任一时刻,如果经过了最大执行时间,进程跳至步骤80并如上所述地继续进行。因此,这一自动收缩进程提供了逐渐收缩数据库文件同时保存CPU周期的能力。
以下表1提供的是伪代码形式的调整数据库中文件大小的示例进程。以下伪代码说明了用于实现上述技术的若干种机制。该伪代码说明了跟踪数据库中空页和非空页的机制,用于确定多少页将要移动到文件的一端来将空页和脏页移到文件的另一端,并用于截断空页和脏页。
                                  表1
class PageCollection{// used to query if a page is empty or non-empty// this function takes the byte offset of the page within the file//bool IsPageEmpty(ULONG cbPageOffset);// get the total number of pages//ULONG GetTotalPageCount(void);// set the total number of pages in the database file//void SetTotalPageCount(ULONG cPages);// get the total number of empty pages//ULONG GetEmptyPageCount(void);}void ShrinkDatabase(PageCollection& pageCollection,// which pages are empty vs.non-emptyBOOL fAutoShrink)         // is this shrink because of an auto-shrink?{// locals//ULONG cEmptySkipped=0;ULONG cMarked=0;// get the total number of pages in the file// assume cTotalPages is always>0//ULONG cTotalPages=pageCollection.GetTotalPageCount();// get the number of empty pages in the file//
    ULONG cEmptyPages=pageCollection.GetEmptyPageCount();// is this an auto-thrink,as opposed to a forced shrink?//if(TRUE==fAutoShrink){// exceeding empty page threshold(knob 1)//if((cEmptyPages*100)/cTotalPages>KNOB1_VALUE){// we don′t need to auto-shrink//return;}}// compute the physical offset of the last page in the file//ULONG cbPageOffset=(cTotalPages-1)*PAGESIZE;// loop until we reach the beginning of the file//while(cbPageOffset>0){// This is used to determine if enough pages have been// dirtied in order to commence flushing,all// or most of the empty pages end up at the end of the file.// This is achieved by writing dirty pages by filling// the empty pages at the front of the file.//if(cEmptySkipped+cMarked>=cEmptyPages){// we are done marking pages//break;}// if we are doing an auto-shrink?//if(TRUE==fAutoShrink){// have we exceeded the maximum execution time limit// this is described by knob 2 above}               ∷// determine if the page at this offset is empty?//if(true==pageCollection.IsPageEmpty(cbPageOffset)){// mark this page as dirty.This function is essentially// causes tbe non-empty page stored at this offset// in the file to be marked as dirty.//.The next part of this process flushes dirty// pages.That mechanism is related to// buffer pool and transaction concepts// that are deacribed in this document.//MarkPageAsDirty(cbPageOffset);// increment number of pages marked//cMarked++;
        }// otherwise...//else{// increment number of empty pages skipped//cEmptySkipped++;}// move to the previous page in the file//cbPageOffset-=PAGESIZE;}// Flush the dirty pages// note that this happens even if the maximum execution time limit// has been exceeded.This insures that progress is made toward// shrinking the file even if one didn′t dirty as many pages as one// would have liked in order to shrink the entire file.//FlushDirtyPages();// truncate the empty pages from the end of the file//TruncateEmptyPages();// is this an auto-shrink,as opposed to a forced shrink?//if(TRUE==fAutoShrink){// find out the total page count now//cTotalPages=pageCollection.GetTotalPageCount();// find out how many empty pages there are now//cEmptyPages=pageCollection.GetEmptyPageCount();// if the empty page threshold still exceeds the threshold// specified by knob 1?then schedule another//if ((cEmptyPages* 100)/cTotalPages>KNOB1_VALUE){// schedule another shrink attempt using the retry interval// specified by knob3//ScheduleShrinkAttempt(knob3);}}}void TruncateEmptyPages(PageCollection& pageCollection)//empty vs.non-empty pages{// count of how many pages will be truncated//ULONG cTruncated=0;// get the total page count// it′assumed that there is more than one page in the file//
}
图7是用于调整数据库文件大小的示例系统的结构图。在一个示例实施例中,系统用来调整数据库的存储大小,并在此语境中描述。该系统包括系统存储器96、分配指示器94、控制器92以及截断器90。系统存储器96包括组织成文件的存储器页。系统存储器96可包括任一存储器类型,如半导体存储器、磁存储器(如盘)、光存储器或其组合。通常且较佳地,系统存储器96包括具有永久储存数据的能力的永久存储器。因此,在普通操作条件下,写入永久存储器的数据为可用,直到该数据被特别地移除和/或重写。
分配指示器94完成指示上述脏页和跳过的页的逻辑ID和物理地址的分配状态的功能。如果遇到的页(在文件的遍历过程中)为空,则分配指示器指示该遇到的页为跳过。当遇到的页非空,则分配指示器指示该遇到的页为脏。分配指示器94也在截断之前指示每一脏页和每一跳过的页为未分配,如上所述。在一个示例实施例中,页分配指示器94包括用于指示上述分配状态的位图。
控制器92完成许多与上述调整存储大小相关联的功能。控制器92在文件的一端的最后一页开始遍历进程,并向文件另一端的第一页继续该遍历进程。控制器92确定跳过的页加上脏页的总和是否大于或等于文件中空页的总数,并且如果该总和小于文件中空页的总数,则以遍历顺序在文件中的下一页继续遍历进程。如果该总和大于或等于空页总数,则控制器将脏页的内容写入尚未遍历的文件的空页。截断器90如上所述从文件截断未分配页。
适宜计算系统环境的总述
图8所示是能够实现调整存储器大小的方法和系统的合适计算系统环境100的示例。计算系统环境100仅是合适计算系统环境的一个示例,并非意味着对用于动态并个别控制显示元素的方法和系统的使用范围或功能的限制。也不应将该计算环境100解释为关于示例操作环境100中说明的任一组件或其组合具有任何依赖或需求。
调整存储大小的方法和系统可操作于许多其它通用或专用计算系统环境或配置中。众所周知的适合与用于动态并个别控制显示元素的方法和系统使用的计算系统、环境和/或配置的示例包括但不限于,个人计算机、服务器计算机、手持式或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费类电子产品、网络PC、小型机、大型机、包括以上系统或设备的分布式计算环境等等。
调整存储器大小的方法和系统可能在计算机可执行指令的普通语境下描述,如由计算机执行的程序模块。通常,程序模块包括例程、程序、对象、组件、数据结构等等,完成特定的任务或实现特定的抽象数据类型。调整存储器大小的方法和系统也可以在由通过通信网络或其它数据传输媒质连接的远程处理设备完成任务的分布式计算环境中实践。在分布式计算环境中,程序模块和其它数据可以位于包括存储器存储设备的本地和远程计算机存储媒质中。
参考图8,用于实现调整存储大小的方法和系统的示例系统包括以计算机110形式的通用计算设备。计算机110的组件可以包括但不限于,处理单元120、系统存储器130以及将包括系统存储器130的各种系统组件耦合到处理单元120的系统总线121。系统总线121可以是若干总线结构类型中的任一种,包括存储器总线或存储器控制器、外围总线以及使用任一各类总线结构的本地总线。作为示例而非局限,这类结构包括工业标准体系结构(ISA)总线、微通道结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线以及外设部件互连(PCI)总线(也称为Mezzanine总线)。
计算机110通常包括各种计算机可读媒质。计算机可读媒质可以是任意计算机110可访问的可用媒质,包括易失和非易失媒质、可移动和不可移动媒质。作为示例而非局限,计算机可读媒质可以包括计算机存储媒质和通信媒质。计算机存储媒质包括在任何用于储存如计算机可读指令、数据结构、程序模块或其它数据的信息的方法或技术中实现的易失和非易失、可移动和不可移动媒质。计算机存储媒质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或其它任何可以用来储存所需要的信息并可由计算机110访问的媒质。通信媒质通常包含计算机可读指令、数据结构、程序模块或其它在如载波或其它传输机制的已调制数字信号中的数据,并包括任意信息传送媒质。术语“已调制数字信号”指其一个或多个特性以某种方式设定或改变来对信号中的信息进行编码的信号。作为示例但非局限,通信媒质包括有线媒质如有线网络或直接连线连接以及无线媒质如声学、RF、红外或其它无线媒质。可以理解,任何这些媒质的组合也包括在计算机可读媒质的范围内。
系统存储器130包括以易失和/非易失存储器形式的计算机存储媒质,如ROM 131和RAM 132。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,通常储存在ROM 131中。RAM 132通常包含处理单元120立即可访问并且/或者当前正在操作的数据和/或程序模块。作为示例但非局限,图8说明了操作系统134、应用程序135、其它程序模块136以及程序数据137。
计算机110也可以包括可移动/不可移动、易失/非易失计算机存储媒质。仅作为示例,图8说明了对不可移动、非易失磁媒质进行读写的硬盘驱动器141、对可移动、非易失磁盘152进行读写的磁盘驱动器151以及对可移动、非易失光盘156如CD-ROM、CDRW或其它光媒质进行读写的光盘驱动器155。其它可用在示例操作环境的可移动/不可移动、易失/非易失计算机存储媒质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器141通常通过不可移动存储器接口如接口140连接到系统总线121,并且磁盘驱动器151和光盘驱动器155通常通过可移动存储器接口,如接口150连接到系统总线121。
以上讨论的并在图8中说明的驱动器及其相关计算机存储媒质为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图15中,说明硬盘141储存操作系统144、应用程序145、其它程序模块146以及程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136以及程序数据137相同,也可以与它们不同。这里对操作系统144、应用程序145、其它程序模块146以及程序数据147给予不同的数字,来说明至少它们是不同的副本。用户可以通过输入设备如键盘162和指向设备161,通常称为鼠标、轨迹球或触摸板向计算机110输入命令和信息。其它输入设备(未示出)可以包括麦克风、操纵杆、游戏板、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线121的用户输入接口160连接到处理单元120,但也可以通过其它接口和总线结构来连接,如并行端口、游戏端口或通用串行总线(USB)。监视器191或其它类型的显示设备也通过接口,如视频接口190连接到系统总线121。除监视器之外,计算机也可以包括其它外围输出设备,如扬声器197和打印机196,通过输出外围接口190连接。
计算机110可以运行在使用到一个或多个远程计算机,如远程计算机180的逻辑连接的网络化环境中。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公用网络节点,通常包括许多或所有以上描述的与计算机110相关的元件,尽管在图8中仅说明了存储器存储设备181。所描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、企业内部互联网以及因特网。
当用在LAN网络环境中时,计算机110通过网络接口或适配器170连接到LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或其它装置,用于通过WAN 173,如因特网建立通信。调制解调器172可以是内置的或外置的,可以通过用户输入接口160或其它合适的机制连接到系统总线121。在网络化环境中,所描述的与计算机110相关的程序模块或其部分可以储存在远程存储器存储设备上。作为示例但非局限,图8说明了远程应用程序185驻留在存储器设备181上。可以理解,这里示出的网络连接是示例性的,可以使用在计算机之间建立通信链路的其它装置。
从个人计算机和因特网的集中的观点,已经开发并且正在开发各种分布式计算框架。个人和商业用户同样地拥有用于应用和计算设备的无缝共同操作并且web激活的接口,使得计算活动越来越面向web浏览器和网络。
例如,MICROSOFT的.NET平台包括服务器、构件服务如基于web的数据存储以及可下载设备软件。通常来说,.NET平台提供(1)令整个范围的计算设备共同工作并在所有设备上自动更新并同步化用户信息的能力,(2)提高的web站点交互能力,通过大量使用XML而不是HTML来实现,(3)从用于各种应用,如电子邮件,或软件,如Office.NET的管理的中央起点到用户的具有产品和服务的定制访问和传送的特点的在线服务,(4)中央化数据存储,将增加信息访问以及用户和设备间的信息同步的效率和简易性,(5)整合各种通信媒质,如电子邮件、传真和电话的能力,(6)对开发员来说,创建可重复使用模块的能力,借此提高生产力并降低编程错误数,以及(7)还有其它跨平台综合特性。
这里的示例性实施例是结合驻留在计算设备上的软件描述的,也可以通过操作系统、应用程序接口(API)或协处理器和请求对象之间的“中间人”对象来实现调整存储器大小的方法和系统的一个或多个部分,使服务可以由所有.NET的语言和服务,以及在其它分布式计算框架中完成、支持或访问。
这里描述的调整存储大小的方法可以以由计算机实现的进程和用于实践这些进程的系统的形式来实施。这里描述的调整存储大小的方法也可以以配备在有形媒质,如软盘、只读存储器(ROM)、CD-ROM、硬盘、高密度盘或其它任何计算机可读存储媒质中的计算机程序代码的形式来实施,其中,当计算机程序代码装载到计算机并由其执行时,该计算机变为用于实践本发明的系统。这里描述的调整存储大小的方法也可以以计算机程序代码的形式来实施,如储存在存储媒质中、装载到计算机并由其执行、或者通过一些传输媒质,如电线或电缆、通过光纤或通过电磁辐射来传输的程序代码,其中,当该计算机程序代码装载到计算机并由其执行时,该计算机变为可实践本发明的系统。当在通用处理器上实现时,计算机程序代码段配置处理器来创建特定逻辑电路。
这里描述的各种技术可以结合硬件或软件,或者,如果合适的话,两者的组合来实现。这样,本发明的方法和装置或其特定方面或部分,可以采用配备在有形媒质,如软盘、CD-ROM、硬盘或其它任何机器可读存储媒质中的程序代码(即,指令)的形式,其中,当程序代码装载到机器,如计算机,并由其执行时,该机器变为用于实践本发明的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常包括处理器、处理器可读的存储媒质(包括易失和非易失存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。可能使用本发明的信号处理服务,如通过使用数据处理API或其类似物的一个或多个程序优选地在高级程序语言或面向对象编程语言中实现,来与计算机通信。然而,如果需要,程序可以在汇编语言或机器语言中实现。无论如何,语言可以是已编译或已解释的语言,并且与硬件实现组合。
本发明的方法和装置也可以通过以通过一些传输媒质,如通过电线或电缆、通过光纤或通过其它任何传输形式来发送的程序代码的形式实施的通信来实践,其中,当程序代码被机器,如EPROM、门阵列、可编程逻辑设备、客户端计算机、视频记录器或其类似物、或具有如以上示例实施例中描述的信号处理能力的接收机器接收、装载并执行时,该机器变为可实践本发明的装置。当在通用处理器上实现时,程序代码与处理器组合来提供可操作来调用本发明的函数的独特装置。另外,与本发明结合使用的任一存储技术可以不变地为硬件和软件的组合。
本发明的实施例是结合各种示图的较佳实施例来描述的,可以理解,也可以使用其它类似的实施例,或者在不偏离本发明的情况下对所描述的实施例作出修改或添加,来完成相同的功能。此外,必需强调,可以考虑各种计算机平台,包括手持式操作系统或其它应用指定操作系统,尤其是在大量无线网络化设备继续增加的情况下。因此,本发明不应局限于任一单个实施例,而应根据后附权利要求书的宽度和范围来解释。

Claims (17)

1.一种调整文件大小的方法,其特征在于,所述方法包括:
(a)在所述文件的最后一页开始所述文件的遍历,并向所述文件的第一页前进;
(b)如果遇到的页为空,则指示所述遇到的页为跳过;
(c)如果所述遇到的页非空,则指示所述遇到的页为脏;
(d)将所述跳过的页加上所述脏页的总和与所述文件中空页的总数相比较;
如果所述总和小于所述空页总数,则遍历所述文件至下一页并执行行动(b)、(c)和(d);
如果所述总和大于或等于所述空页的总数:
将所述脏页的内容写入尚未遍历的所述文件的空页;以及
指示所述每一脏页和所述每一跳过的页为未分配;以及
从所述文件截断所述未分配页。
2.如权利要求1所述的方法,其特征在于,它还包括:
确定所述文件的空页对所述文件的总页数的百分比是否大于或等于空页门限;
如果所述百分比大于或等于所述空页门限,开始所述文件的所述遍历。
3.如权利要求1所述的方法,其特征在于:
从最靠近所述文件的所述最后一页的脏页开始向所述文件的所述第一页前进,将所述脏页写入所述空页。
4.如权利要求1所述的方法,其特征在于,它还包括:
确定从开始所述遍历以来是否经过了最大执行时间;以及
如果经过了所述最大执行时间,则近似立即开始以下所述行动:
将所述脏页的内容写入尚未遍历的所述文件的空页中;
指示所述每一脏页和所述每一跳过的页为未分配;以及
从所述文件截断所述未分配页。
5.如权利要求1所述的方法,其特征在于,它还包括:
生成用于指示每一脏页和每一跳过的页的分配状态的位图;以及
依照所述将每一脏页和每一跳过的页指示为未分配的行动来更新所述位图。
6.如权利要求1所述的方法,其特征在于,它还包括:
确定所述文件中的总页数;
确定所述文件中空页的数量;
确定所述空页对所述总页数的百分比;
将所述百分比的值与空页门限值比较;
如果所述百分比值大于或等于所述空页门限:
在所述文件的最后一页开始所述文件的遍历,并向所述文件的第一页前进;
(a)如果遇到的页为空,则指示所述遇到的页为跳过;
(b)如果遇到的页非空,则指示所述遇到的页为脏;
(c)将跳过的页加上脏页的总和与所述空页数量相比较;
如果所述总和小于所述空页数量,则遍历所述文件至下一页并执行行动(a)、(b)和(c);以及
如果所述总和大于或等于所述空页数量:
将所述脏页的内容写入尚未遍历的所述文件的空页;以及
指示每一脏页和每一跳过的页为未分配。
7.一种调整文件大小的方法,所述方法包括:
确定所述文件中的总页数;
确定所述文件中空页的数量;
确定空页对所述总页数的百分比;
将所述百分比的值与空页门限值相比较;
如果所述百分比值大于或等于所述空页门限:
在所述文件的最后一页开始所述文件的遍历,并向所述文件的第一页前进;
(a)如果遇到的页为空,则指示所述遇到的页为跳过;
(b)如果遇到的页非空,则指示所述遇到的页为脏;
(c)将跳过的页加上脏页的总和与所述空页数相比较;
如果所述总和小于所述空页数,则遍历所述文件至下一页,并执行行动(a)、(b)和(c);
如果所述总和大于或等于所述空页数:
将所述脏页的内容写入尚未遍历的所述文件的空页中;以及
指示每一脏页和每一跳过的页为未分配;以及
从所述文件截断所述未分配页。
8.一种以指示计算机处理器调整内存大小的计算机程序代码进行编码的计算机可读媒质,所述程序代码包括:
开始代码段,用于引发所述计算机处理器(a)在所述文件的最后一页开始所述内存的文件的遍历,并向所述文件的第一页前进;
指示跳过代码段,用于引发所述计算机处理器(b)如果遇到的页为空,指示所述遇到的页为跳过;
指示脏代码段,用于引发所述计算机处理器(c)如果遇到的页非空,指示所述遇到的页为脏;
比较代码段,用于引发所述计算机处理器(d)将跳过的页加上脏页的总和与所述文件中空页的总数相比较;
下一页代码段,用于引发所述计算机处理器:如果所述总和小于所述空页总数,遍历所述文件至下一页并执行行动(b)、(c)和(d);
总和大于代码段,用于引发所述计算机处理器:如果所述总和大于或等于所述空页总数:
将所述脏页的内容写入尚未遍历的所述文件的空页;以及
指示每一脏页和每一跳过的页为未分配;以及
截断代码段,用于引发所述计算机处理器从所述文件截断所述未分配页。
9.如权利要求8所述的计算机可读媒质,其特征在于,它还包括:
百分比代码段,用于引发所述计算机处理器确定所述文件的空页对所述文件的页总数的百分比是否大于或等于空页门限;
条件开始代码段,用于引发所述计算机处理器:如果所述百分比大于或等于所述空页门限,则开始所述文件的所述遍历。
10.如权利要求8所述的计算机可读媒质,其特征在于:
将脏页写入所述空页从最靠近所述文件的最后一页的脏页开始,并向所述文件的第一页前进。
11.如权利要求8所述的计算机可读媒质,其特征在于,它还包括:
确定最大时间代码段,用于引发所述计算机处理器确定自开始所述遍历以来是否经过了最大执行时间;以及
条件开始代码段,用于引发所述计算机处理器:如果经过了所述最大执行时间,则近似立即开始以下所述行动:
将所述脏页的内容写入尚未遍历的所述文件的空页中;
指示每一脏页和每一跳过的页为未分配;以及
从所述文件截断所述未分配页。
12.如权利要求8所述的计算机可读媒质,其特征在于,它还包括:
生成位图代码段,用于引发所述计算机处理器生成用于指示每一脏页和每一跳过的页的分配状态的位图;以及
更新位图代码段,用于引发所述计算机处理器依照指示每一脏页和每一跳过的页为未分配的所述行动来更新所述位图。
13.一种调整内存大小的系统,所述系统包括:
包含页的内存文件;
用于从所述文件的最后一页开始所述文件的遍历并向所述文件的第一页前进的控制器,并且对于所述遍历中遇到的每一页,所述控制器执行行动包括:
如果遇到的页为空,指示所述遇到的页为跳过;
如果遇到的页非空,指示所述遇到的页为脏;
将跳过的页加上脏页的总和与所述文件中空页的总数相比较;
如果所述总和小于所述空页总数,以遍历顺序在所述文件中的下一页继续所述遍历;以及
如果所述总和大于或等于所述空页总数,将所述脏页的内容写入尚
未遍历的所述文件的空页;
用于指示每一脏页和每一跳过的页为未分配的分配指示器;以及
用于从所述文件截断所述未分配页的截断器。
14.如权利要求13所述的系统,其特征在于,所述控制器还:
确定所述文件的空页对所述文件的总页数的百分比是否大于或等于空页门限;
如果所述百分比大于或等于所述空页门限,则开始所述文件的所述遍历。
15.如权利要求13所述的系统,其特征在于:
从最靠近所述文件的所述最后一页的脏页开始并向所述文件的所述第一页前进,将脏页写入所述空页。
16.如权利要求13所述的系统,其特征在于,所述控制器还:
确定自开始所述遍历以来是否经过了最大执行时间;以及
如果经过了所述最大执行时间,则近似立即开始:
将所述脏页的内容写入尚未遍历的所述文件的空页;
指示每一脏页和每一跳过的页为未分配;以及
从所述文件截断所述未分配页。
17.如权利要求13所述的系统,其特征在于:
所述分配指示器包括用于指示每一脏页和每一跳过的页的分配状态的位图;以及
所述控制器依照指示每一脏页和每一跳过的页为未分配的所述行动来更新所述位图。
CNB2004100474362A 2003-05-30 2004-05-28 调整数据库大小的系统和方法 Active CN100445990C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/448,847 2003-05-30
US10/448,847 US7296043B2 (en) 2003-05-30 2003-05-30 Memory file size adjustment

Publications (2)

Publication Number Publication Date
CN1609850A true CN1609850A (zh) 2005-04-27
CN100445990C CN100445990C (zh) 2008-12-24

Family

ID=33131619

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100474362A Active CN100445990C (zh) 2003-05-30 2004-05-28 调整数据库大小的系统和方法

Country Status (5)

Country Link
US (1) US7296043B2 (zh)
EP (1) EP1482423B1 (zh)
JP (1) JP4537771B2 (zh)
KR (1) KR101087425B1 (zh)
CN (1) CN100445990C (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706736B (zh) * 2009-12-22 2012-10-10 北京大学 一种高效的脏页获取方法

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7693856B2 (en) 2004-06-25 2010-04-06 Apple Inc. Methods and systems for managing data
US7730012B2 (en) * 2004-06-25 2010-06-01 Apple Inc. Methods and systems for managing data
US7490197B2 (en) 2004-10-21 2009-02-10 Microsoft Corporation Using external memory devices to improve system performance
US8108579B2 (en) * 2005-03-31 2012-01-31 Qualcomm Incorporated Mechanism and method for managing data storage
US8914557B2 (en) 2005-12-16 2014-12-16 Microsoft Corporation Optimizing write and wear performance for a memory
US7685145B2 (en) * 2006-03-28 2010-03-23 Microsoft Corporation Database physical design refinement using a merge-reduce approach
US8631203B2 (en) * 2007-12-10 2014-01-14 Microsoft Corporation Management of external memory functioning as virtual cache
US20090295836A1 (en) * 2008-05-27 2009-12-03 Ravenflow, Inc. System and method for representing large activity diagrams
US9032151B2 (en) 2008-09-15 2015-05-12 Microsoft Technology Licensing, Llc Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
US8032707B2 (en) 2008-09-15 2011-10-04 Microsoft Corporation Managing cache data and metadata
US7953774B2 (en) 2008-09-19 2011-05-31 Microsoft Corporation Aggregation of write traffic to a data store
US20100169322A1 (en) * 2008-12-26 2010-07-01 Sun Microsystems, Inc. Efficient access of bitmap array with huge usage variance along linear fashion, using pointers
JP5593841B2 (ja) * 2010-05-28 2014-09-24 富士通株式会社 データベース装置
JP5943304B2 (ja) * 2012-10-16 2016-07-05 富士ゼロックス株式会社 画像形成装置及びプログラム
US10013217B1 (en) * 2013-06-28 2018-07-03 EMC IP Holding Company LLC Upper deck file system shrink for directly and thinly provisioned lower deck file system in which upper deck file system is stored in a volume file within lower deck file system where both upper deck file system and lower deck file system resides in storage processor memory
US10216536B2 (en) * 2016-03-11 2019-02-26 Vmware, Inc. Swap file defragmentation in a hypervisor
US9933945B1 (en) 2016-09-30 2018-04-03 EMC IP Holding Company LLC Efficiently shrinking a dynamically-sized volume

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3226525B2 (ja) * 1988-10-07 2001-11-05 株式会社日立製作所 主記憶管理方法
EP0554854A3 (en) * 1992-02-04 1996-02-28 Digital Equipment Corp System and method for executing, tracking and recovering long running computations
JP2865500B2 (ja) * 1992-09-30 1999-03-08 富士通株式会社 ファイル格納管理方法
US5388083A (en) * 1993-03-26 1995-02-07 Cirrus Logic, Inc. Flash memory mass storage architecture
US5963962A (en) * 1995-05-31 1999-10-05 Network Appliance, Inc. Write anywhere file-system layout
ATE409907T1 (de) * 1993-06-03 2008-10-15 Network Appliance Inc Verfahren und vorrichtung zum beschreiben beliebiger bereiche eines dateisystems
US6119214A (en) * 1994-04-25 2000-09-12 Apple Computer, Inc. Method for allocation of address space in a virtual memory system
US5574907A (en) 1994-11-30 1996-11-12 Microsoft Corporation Two-pass defragmentation of compressed hard disk data with a single data rewrite
US5604902A (en) * 1995-02-16 1997-02-18 Hewlett-Packard Company Hole plugging garbage collection for a data storage system
US6038571A (en) * 1996-01-31 2000-03-14 Kabushiki Kaisha Toshiba Resource management method and apparatus for information processing system of multitasking facility
US5778392A (en) * 1996-04-01 1998-07-07 Symantec Corporation Opportunistic tile-pulling, vacancy-filling method and apparatus for file-structure reorganization
US6070172A (en) * 1997-03-06 2000-05-30 Oracle Corporation On-line free space defragmentation of a contiguous-file file system
US6023744A (en) * 1997-03-07 2000-02-08 Microsoft Corporation Method and mechanism for freeing disk space in a file system
US5956745A (en) * 1997-04-23 1999-09-21 Novell, Inc. System and method for automatically resizing a disk drive volume
US6408313B1 (en) 1998-12-16 2002-06-18 Microsoft Corporation Dynamic memory allocation based on free memory size
US6249792B1 (en) * 1998-12-16 2001-06-19 Microsoft Corporation On-line dynamic file shrink facility
AU6081200A (en) 1999-07-09 2001-01-30 Eric D. Schneider Optimized disk storage defragmentation with swapping capabilities
US6757801B1 (en) * 2000-10-26 2004-06-29 International Business Machines Corporation Method to modify that an operation needs to be done on a file system
US20020161860A1 (en) * 2001-02-28 2002-10-31 Benjamin Godlin Method and system for differential distributed data file storage, management and access
US6928456B2 (en) 2001-03-06 2005-08-09 Intel Corporation Method of tracking objects for application modifications

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706736B (zh) * 2009-12-22 2012-10-10 北京大学 一种高效的脏页获取方法

Also Published As

Publication number Publication date
EP1482423A3 (en) 2006-05-17
EP1482423B1 (en) 2017-09-20
JP2004362575A (ja) 2004-12-24
EP1482423A2 (en) 2004-12-01
CN100445990C (zh) 2008-12-24
US20040243612A1 (en) 2004-12-02
KR101087425B1 (ko) 2011-11-25
US7296043B2 (en) 2007-11-13
JP4537771B2 (ja) 2010-09-08
KR20040103483A (ko) 2004-12-08

Similar Documents

Publication Publication Date Title
CN1609850A (zh) 调整数据库大小的系统和方法
US11960726B2 (en) Method and apparatus for SSD storage access
KR102007070B1 (ko) 메모리 관리 시의 중복 제거를 위해서 기준 세트로 기준 블록을 취합하는 기법
JP4177960B2 (ja) 増分不要情報収集
US6804761B1 (en) Memory allocation system and method
CN1614555A (zh) 用于自主硬件辅助的线程栈跟踪的装置与方法
US7860865B2 (en) System of a hierarchy of servers for query processing of column chunks in a distributed column chunk data store
US8015191B2 (en) Implementing dynamic processor allocation based upon data density
US7472252B2 (en) Merging identical memory pages
US7921132B2 (en) System for query processing of column chunks in a distributed column chunk data store
US20090094413A1 (en) Techniques for Dynamic Volume Allocation in a Storage System
US20070088666A1 (en) File recording apparatus
US20070143259A1 (en) Method for query processing of column chunks in a distributed column chunk data store
CN1811768A (zh) 用于协调图象元数据的系统和方法
CN1573747A (zh) 阴影分页
US8478755B2 (en) Sorting large data sets
US7403936B2 (en) Optimizing database access for record linkage by tiling the space of record pairs
US7395386B2 (en) Method and apparatus for data versioning and recovery using delta content save and restore management
US5678024A (en) Method and system for dynamic performance resource management within a computer based system
CN1776723A (zh) 在发布预订数据处理系统中发布文档
CN1833232A (zh) 用于运行时数据管理的存储系统类区别提示
CN115470157A (zh) 预取方法、电子设备、存储介质及程序产品
US7779207B2 (en) Accelerated write performance
US6510499B1 (en) Method, apparatus, and article of manufacture for providing access to data stored in compressed files
CN1967505A (zh) 信息处理装置、图像摄取装置、信息处理方法及计算机程序

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150429

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150429

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.