如果 SQL Server 数据库要经历大量的插入活动,那么很重要的一点是进行计划,以便在索引页和数据页上提供和维持开放空间,防止出现页拆分。当某个索引页或数据页不再能容纳任何新的行,但由于该页中所定义的数据的逻辑顺序需要插入一行时,便会发生页拆分。发生页拆分时,SQL Server 需要分割整页中的数据,并将大约一半数据移动到新的页,以使这两页均有一些开放空间。这会消耗一些系统资源和时间。
当最初生成索引时,SQL Server 将索引 B 树结构放置在连续的物理页上,以便通过连续 I/O 扫描索引页获取最佳 I/O 性能。当由于发生页拆分,需要将新的页插入索引的逻辑 B 树结构时,SQL Server 必须分配新的 8 KB 索引页。这种插入发生在硬盘上的其它位置,从而打断了索引页的物理连续特性。它使 I/O 操作从连续变为不连续,从而使得性能减低一半。可以通过重建索引页以恢复索引页的物理连续顺序来解决过多的页拆分。聚集索引的叶级也会遇到相同的问题,从而影响表的数据页。
请在 Performance Monitor 中关注“SQL Server: Access Methods - Page Splits”。此计数器中的非零值表示发生了页拆分,应用 DBCC SHOWCONTIG 进一步分析。有关如何使用此命令的细节,请在 SQL Server Books Online 中搜索“DBCC SHOWCONTIG”。
DBCC SHOWCONTIG 是非常有用的命令,可用它来检查表中是否发生了过多的页拆分。Scan Density 是 DBCC SHOWCONTIG 所提供的关键指示器。这个值越接近 100% 越好。如果这个值低于 100%,使用 DROP_EXISTING 选项在该表上重建聚集索引以便对这个表进行整理。CREATE INDEX 语句的 DROP_EXISTING 选项允许重建已有的索引,提供比先除去索引然后重建索引更好的重建性能。有关详细信息,请在 SQL Server Books Online 中搜索字符串“Create Index”和“rebuilding an index”。
CREATE INDEX 和 DBCC REINDEX 命令中的 FILLFACTOR 选项提供一种方法,以指定在索引页和数据页中要留出的开放空间的百分比。CREATE INDEX 的 PAD_INDEX 选项在非叶级索引页中应用为 FILLFACTOR 所指定的百分比。如果没有 PAD_INDEX 选项,FILLFACTOR 将主要影响聚集索引的叶级索引页。将 PAD_INDEX 选项与 FILLFACTOR 一起使用是一个不错的主意。有关详细信息,请在 SQL Server Books Online 中搜索“page split”和“pad_index”。
为 FILLFACTOR 指定的最佳值取决于给定时间帧内插入一个 8 KB 索引页和数据页中的新数据量。要记住的重要一点是,SQL Server 索引页中所包含的行通常比数据页要多得多,因为索引页只包含与索引相关的列的数据,而数据页则包含整行数据。同时还需记住多久出现一次维护窗口,以重建索引避免产生页拆分。仅当大多数索引页和数据页已填满数据时才开始重建索引。要使得这种情况得以发生,需要为给定的表正确选择聚集索引。如果聚集索引均匀分布数据,以至新的行插入与该表相关的所有数据页中,数据页将均匀填充。总而言之,这将延缓页拆分的发生,并且它是重建聚集索引所必需的条件。需要确定的另一方面是 FILLFACTOR,其选择一部分根据预计将在给定时间帧内插入 8 KB 页的键范围内的行数,以及系统中预定的索引重建发生的频率。
在这种情况下也需要进行抉择,以便找到一种既在页中留出足够的开放空间又适当产生页拆分的性能折衷方案。如果为 FILLFACTOR 指定一个小的百分比,它将在索引页和数据页中留出大量的开放空间。这有助于避免产生页拆分,但是却无法通过将数据压缩到页中改善性能。索引页和数据页上的压缩数据越多,SQL Server 运行越快,因为如果数据页和索引页上的压缩数据越多,则通常情况下可以用更少的页和 I/O 操作提取更多的数据。将 FILLFACTOR 指定得过高会使页中留出的开放空间过少,使得页溢出的速度过快,从而引起页拆分。
在使用 FILLFACTOR 和 PAD_INDEX 之前,需记住读操作往往大大超过写操作,即便在联机事务处理 (OLTP) 系统中也是如此。使用 FILLFACTOR 将减慢所有的读操作,因为它使表更加分散(减少了数据压缩)。比较好的方法是在使用 FILLFACTOR 和 PAD_INDEX 之前,使用 Performance Monitor 将 SQL Server 的读操作和写操作进行比较,仅当写操作占了读操作的相当大一部分(也就是说超过 30%)的时候使用这些选项。
如果写操作占了读操作的相当大一部分,那么在十分繁忙的 OLTP 系统中,最佳的方法是尽可能地指定一个高的 FILLFACTOR,这将在每个 8 KB 页中留出最少量的可用空间,但仍然能防止发生页拆分,并可使 SQL Server 到达下一个可用时间窗口重建索引。这种方法既获得了 I/O 性能(尽可能地使页填满)又避免了页拆分(不让页溢出)。这可能需要进行一些实验,如用不同的 FILLFACTOR 值重建索引,然后模拟表中的负载活动以验证最佳的 FILLFACTOR 值。在确定了最佳的 FILLFACTOR 值后,可使预定的索引重建任务像 SQL Server Task 一样自动执行。有关使任务自动进行的详细信息,请在 SQL Server Books Online 中搜索字符串“creating a task”。
[/size][size=xx-small]
如果 SQL Server 数据库中没有写活动,可以将 FILLFACTOR 设为 100%,以便完全填满所有的索引页和数据页,从而获得最佳的 I/O 性能。
分享到:
相关推荐
【标题】"HBFQ_Repartition_MI_Pad_1_2GB_zardMi3.zip" 指的可能是一款针对小米设备(可能是ZardMi3)的固件更新或者优化工具,其中“HBFQ”可能代表了一种特定的存储分区技术或优化策略。在Android系统中,...
标题中的"xen-acpi-pad.rar_acpi_pad_acpi_pad是什么"指出我们要探讨的主题与Xen虚拟化环境下的ACPI(高级配置和电源接口)Pad接口有关。描述中"xen-acpi-pad.c - Xen pad interface."进一步确认了这涉及到Xen项目中...
ASUS_Pad_PC_Suite_v1042是一款专为华硕Pad设备设计的综合管理软件,它提供了全面的连接、同步和管理功能,旨在帮助用户更高效地管理和优化他们的华硕平板电脑。该软件的主要目标是提升用户体验,增强设备与个人电脑...
PIN pad,通常称为个人识别码键盘,是金融和支付领域中常见的一种设备,用于输入银行卡密码或其他安全认证信息。在给定的“pinpad.rar”压缩包中,我们聚焦于Innova Card的USIP(MIPS 4KSD)PIN pad的代码示例。这个...
一次性密码本(One-Time Pad, OTP)是一种古老的、理论上绝对安全的加密方法,它的原理和实践在现代网络安全中仍然具有重要意义。 一次性密码本算法基于两个核心概念:随机性和一次性。首先,密钥必须是完全随机...
在OTP中,明文和密钥通过某种操作(通常是异或)进行结合,只要密钥的长度等于明文且密钥从未重复使用,那么理论上这种加密是不可破译的。在本文中,我们将深入探讨OTP的原理,并通过C#语言来实现这一强大的加密机制...
标题中的"PINPAD.rar_PINPAD_atm_pinpad.ocx_pinpad.rar"暗示这是一个与ATM(自动取款机)相关的项目,主要涉及PINPAD(个人识别号码键盘)的开发。这个压缩包可能包含了用于创建ATM PINPAD功能的源代码,特别是使用...
pad_Install_100056_app 3.exe
PWM.rar_lunch_pad_lunch_pad 是一个与LUNCH_PAD开发板相关的资源压缩包,其中包含了使用MSP430G2553微控制器(MCU)生成PWM波以控制舵机运动的相关程序。MSP430G2553是德州仪器(Texas Instruments)生产的一款超低...
其中,"Coolpad CDS_Setup_V4.57_客服版本"是专为酷派手机用户设计的一款重要工具,主要用于手机的刷新和售后维护工作。下面我们将详细解析这一工具的功能、应用及使用注意事项。 首先,"Coolpad CDS_Setup_V4.57_...
maxpool_pad_sample.prototxt
QQ_for_Pad_v1.9.3_自定义尾巴透明版
QQ_Pad_ForMX1.0个人感觉不错 大家可以下来体验
标题“全志a20_pad_std_v1_1”指的是基于全志科技A20处理器的PADS(PAD Standard)电路板设计标准版本1.1。全志科技是一家知名的集成电路设计公司,其A20芯片是一款双核ARM Cortex-A7架构的系统级芯片,常用于平板...
总的来说,“酷派5910_Coolpad_5910_OneKeyTools.rar”为酷派5910用户提供了强大的自助服务工具,使得用户无需专业技能也能对手机进行深度管理和维护。然而,任何涉及系统级别的操作都需要谨慎对待,合理使用,才能...
总的来说,"CalendarPad_java_"是一款结合了Java编程技术和GUI设计的实用工具,它展示了如何利用Java的丰富功能来实现一个功能完备的日历记事本应用。通过学习和分析这个项目,开发者可以深入理解Java GUI编程和时间...
DN-VI_Pad_V1.6.1.apk.1.1
总的来说,"Number-Pad.rar"提供的控件组合了数字输入和软键盘的功能,大大提高了C#应用程序在特定场景下的用户交互性。对于那些需要严格控制用户输入类型的项目,这个解决方案是十分有价值的。开发者可以借此提升...
QQ_for_Pad_v1.9.1(自定义尾巴版)
Coolpad_update_tool_v1.89.酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 酷派升级 ...