金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第1页共11页通过SQL维护计划优化K/3账套方案本文档适用于K/3所有版本本文档以K/3V13.0及SQLServer2008版本为例,通过介绍SQL维护计划建立方法,讲解如何优化K/3账套及优化后的效果。通过本文档可了解通过SQL维护计划优化账套数据库所适合的应用场景,及优化账套的主要操作方法。2014年03月25日V1.0编写人:崔志佳2014年03月31日V2.0修改人:曾玉玲2014年04月24日V3.0修改人:袁媛本文件使用须知著作权人保留本文件的内容的解释权,并且仅将本文件内容提供给阁下个人使用。对于内容中所含的版权和其他所有权声明,您应予以尊重并在其副本中予以保留。您不得以任何方式修改、复制、公开展示、公布或分发这些内容或者以其他方式把它们用于任何公开或商业目的。任何未经授权的使用都可能构成对版权、商标和其他法律权利的侵犯。如果您不接受或违反上述约定,您使用本文件的授权将自动终止,同时您应立即销毁任何已下载或打印好的本文件内容。著作权人对本文件内容可用性不附加任何形式的保证,也不保证本文件内容的绝对准确性和绝对完整性。本文件中介绍的产品、技术、方案和配置等仅供您参考,且它们可能会随时变更,恕不另行通知。本文件中的内容也可能已经过期,著作权人不承诺更新它们。如需得到最新的技术信息和服务,您可向当地的金蝶业务联系人和合作伙伴进行咨询。著作权声明著作权所有2014金蝶软件(中国)有限公司。所有权利均予保留。本期概述版本信息版权信息金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第2页共11页目录1.SQLServer维护计划介绍...................................................31.1SQLServer2008维护计划建立的方法...............................................................................31.2SQL维护计划的相关注意事项...........................................................................................92.应用场景.................................................................10金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第3页共11页1.SQLServer维护计划介绍在SQLServer数据库中可以使用维护计划向导创建单个服务器或多服务器的维护计划。维护计划向导用于创建MicrosoftSQLServer代理可定期运行的维护计划。它使您可以执行各种数据库管理任务,包括备份、数据库完整性检查或以指定的间隔更新数据库统计信息等。SQL维护计划依赖于SQLServerAgent服务,所以要先确保此服务处于启动的状态,依次打开【控制面板】→【管理工具】→【服务】,在服务列表中找到SQLServerAgent服务,将该服务的启动类型设置为自动,并且启动服务,如图-1所示。图-1服务-启动SQLServerAgent服务1.1SQLServer2008维护计划建立的方法SQLServer2008为我们提供了很多方便的工具,可以用这些工具来完成数据库维护的工作,以下介绍利用SQLServer的维护计划来对数据库进行日常维护的操作步骤。步骤第一步,打开维护计划向导。金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第4页共11页使用具有管理员权限的用户登录到【SQLServerManagementStudio】,在左侧的【对象资源管理器】窗口中展开【管理】节点,然后右键单击【维护计划】选择【维护计划向导】菜单,如图-2所示,在弹出向导窗口中单击【下一步】按钮。图-2维护计划向导建立维护计划第二步,输入维护计划名称、设置执行计划。在【选择计划属性】中维护名称、说明等信息,并单击勾选【整个计划统筹安排或无计划】选项,然后单击右下角的【更改】按钮,在弹出的【作业计划属性】窗口中,设置计划执行的周期及时间,分别如图-3、图-4所示。金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第5页共11页图-3设置维护计划执行安排金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第6页共11页图-4设置维护计划执行频度及时间第三步,选择维护任务。可根据实际情况进行选择,结合本文内容主要介绍下列几项:1.收缩数据库:任务通过删除空的数据页和日志页来减少数据库和日志文件占用的磁盘空间;2.重新组织索引:任务可以对表和视图的聚集索引和非聚集索引进行碎片整理和压缩,这将提高索引扫描性能;3.重新生成索引:任务通过重新生成索引来重新组织数据页和索引页上的数据。这会改善索引扫描和查找的性能。此任务还可以优化数据和可用空间在索引页上的分布,能够承受未来更快的增长速度。除此之外,还有“更新统计信息”任务确保查询优化器有表中数据值的最新分布信息。这样,优化器才能更好地确定数据访问策略,如果是版本有升级的情况,建议执行该任务,其它日常维护时不必每次都执行。备份数据库任务确保当发生系统故障、硬件故障或用户错误对数据库造成某种破坏时,导致发生数据丢失或数据库无法使用,可以使用最近的备份副本来还原数据,该任务可用于建立日常备份维护计划。其它任务在此不做详细讲解。对于K/3账套做日常优化任务,建议选择“收缩数据库”、“重新组织索引”和“重新生成索引”三项即可,如图-5所示。单击【下一步】按钮后,还可以设置各任务的执行顺序。图-5优化账套需要选择的维护计划任务第四步,定义维护任务明细。金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第7页共11页分别设置每项任务中所要执行的数据库及相关任务参数,单击【数据库】右侧的下拉列表,单击选择“以下数据库”,然后在列表中勾选具体的数据库实体,分别如图-6至图-8所示。图-6收缩数据库-选择特定的数据库金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第8页共11页图-7重新组织索引-表和视图图-8重新生成索引金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第9页共11页第五步,计划创建完成。接下来设定日志保存目录后,单击【完成】按钮,到此就创建好了维护计划,如图-9所示。图-9维护计划创建完成维护计划创建完成后,SQLServerAgent服务运行正常的情况下,系统会在设置的执行时间自动该调用计划执行。1.2SQL维护计划的相关注意事项1.如果是在服务器上创建的维护计划,从服务器性能角度考虑,建议创建好计划后不要立即手动执行验证测试,容易导致服务器性能被占用,影响其它业务的正常运行。维护计划的执行时间最好设定在工作日的夜晚或周末等非工作时间,正常的工作时间通常服务器的负荷会比较重,此时执行维护计划会影响到联机工作的客户端。2.计划正在执行中,不要修改计划我们可以通过SQLServer代理下的作业活动监控器来观看当前的计划的执行情况,如图-10所示。金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第10页共11页图-10查看作业活动监视器如果当前计划在执行中,这时候请不要修改正在执行中的计划定义,否则很可能会导致执行中的计划出现莫名的错误。倘若必须要修改,可以手动停止正在执行中的计划,然后再修改定义。另外,右键单击自定义的维护计划,可以查看到“查看历史记录”功能菜单,在该功能中也可查看执行计划的执行状况,同时右键功能中也有“执行”菜单,此功能可手工执行计划。2.应用场景在K/3实际应用过程中,优化账套方法在很多情况下可能用到,例如:版本升级后;某些业务模块数据量较大,表数据较大时;某个账套查询很慢时;数据库日常维护等情况。如果一个账套使用时间较长,由于其数据量日增,数据查询和使用的速度就会下降,系统的整体性能就会下降,这时就需要使用到优化账套的操作。在SQLServer运行一段时间后,表空间和索引的存储可能会产生碎片,这会极大的影响系统的性能。数据库表是否存在碎片可以通过在SQL查询分析器中使用下面的命令来查看:dbccshowcontig(表名)例如检测ICStockBill表的索引碎片情况:dbccshowcontig(ICStockBill)输出结果如下:DBCCSHOWCONTIG正在扫描'ICStockBill'表...表:'ICStockBill'(1180583294);索引ID:1,数据库ID:15已执行TABLE级别的扫描。-扫描页数.....................................:9935-扫描扩展盘区数...............................:1252-扩展盘区开关数...............................:8485-每个扩展盘区上的平均页数.....................:7.9-扫描密度[最佳值:实际值]....................:14.64%[1242:8486]-逻辑扫描碎片.................................:41.35%金蝶知识库文档金蝶软件(中国)有限公司客户服务中心第11页共11页-扩展盘区扫描碎片.............................:60.46%-每页上的平均可用字节数.......................:3763.6-平均页密度(完整)...........................:53.50%DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。通过分析这些结果可以知道该表的索引是否需要重构。扫描密度(ScanDensity)达到100%最好,密度越小说明碎片越多。从以上结果可以看出icstockbill表的扫描密度为14.64%,逻辑扫描碎片为41.35%;扩展盘区扫描碎片为60.46%说明存在较多的碎片,并且统计信息很多记录都未进行更新,这将严重影响使用该表时的查询速度,需要对该表进行重建索引。使用SQL语句dbccdbreindex(表名),可以对指定表执行重建索引操作,执行后ScanDensity会接近100%。如果需要对整个数据库的数据表进行操作,建议使用本文档中介绍的维护计划功能进行优化操作。那么我们使用dbccdbreindex(icstockbill)对icstockbill表重建索引,再对icstockbill表进行统计可以看到下面的结果:DBCCSHOWCONTIG正在扫描'ICStockBill'表...表:'ICStockBill'(1180583294);索引ID:1,数据库ID:15已执行TABLE级别的扫描。-扫描页数.....................................:5444-扫描扩展盘区数...............................:682-扩展盘区开关数...............................:681-每个扩展盘区上的平均页数.....................:8.0-扫描密度[最佳值:实际值]....................:99.85%[681:682]-逻辑扫描碎片.................................:0.00%-扩展盘区扫描碎片.............................:29.91%-每页上的平均可用字节数.......................:189.7-平均页密度(完整)...........................:97.66%DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。可以看出icstockbill表的扫描密度提升至99.85%,逻辑扫描碎片为0.00%;扩展盘区扫描碎片为29.91%,数据页从原来的9935调整为5444,说明碎片已经得到了很好的整理。