以下摘自《金蝶K3产品性能稳定性优化指导手册》:

对于任何一个数据库系统,日常的维护是必要的,在日常的系统维护中分支机构应该引导客户的系统管理员做维护,防性能问题于未然。

但有时候不当的维护策略也对性能造成一定的影响。结合常见维护策略进行介绍,旨在防性能问题与未然。

在应用K/3时为了提升整体应用性能,数据库需要做如下的维护策略:

 

1.设置数据库故障还原模型为“简单”

SQL Server企业管理器中选择一个数据库,右键点击弹出快捷菜单,选择“属性”,如下图界面。数据库的故障还原模型建议使用“简单”模式。

如果采用“简单”以外的故障还原模式,将可能产生大量的日志文件从而影响数据库系统性能

注意:选择简单模式后数据库将不能做事务日志备份。

wKioL1g3pZyAjFVLAAI7_ixUwbc576.png-wh_50

 

2.取消“自动收缩”数据库选项

将数据库“属性”中的“自动收缩日志”选项取消(如2.1.2.1下图)。由于需要频繁检查数据库的空间使用情况以及自动收缩有可能发生在数据库文件自动增长之后而增加额外的开销。

 

3.定期收缩数据库

SQL Server数据库的事务日志会由于各种原因,有时候暴涨,事务日志太大有时候会引发性能问题,因此要有计划地收缩数据库来缩小事务日志。收缩数据库时不但要收缩账套数据库,同时也要收缩SQL Server自带的TEMPDB数据库。可以通过SQL Server企业管理器做一个收缩计划,在没有业务运行的时候定期做收缩,尽量不要在平时做收缩操作,因为收缩操作耗用资源很多,且需要一段时间。

SQL Server企业管理器中选择一个数据库,右键点击弹出快捷菜单,选择“所有任务”---〉“收缩数据库”,如下图界面。

wKiom1g3pZ2xSBkuAAGB4xEuTyk284.png-wh_50

选择根据本调度来收缩数据库(收缩的频率不要过于频繁,否则容易产生更多的碎片,导致数据库性能更差),然后点击更改按钮,如下图界面做调度安排。wKiom1g3pdOTk99NAAEWVqHWtEA692.png-wh_50


 

4.定期优化帐套

SQL Server运行一段时间后,表空间和索引的存储可能会产生碎片,这会极大的影响系统的性能。数据库表是否存在碎片可以通过在SQL查询分析器中使用下面的命令来查看:

如:dbcc showcontig(icstockbill) 显示结果为

DBCCSHOWCONTIG 正在扫描 'ICStockBill' ...

:'ICStockBill'1180583294);索引 ID:1,数据库 ID:15

已执行TABLE 级别的扫描。

- 扫描页数.....................................:9935

- 扫描扩展盘区数...............................:1252

- 扩展盘区开关数...............................:8485

- 每个扩展盘区上的平均页数.....................:7.9

- 扫描密度[最佳值:实际值]....................:14.64%1242:8486

- 逻辑扫描碎片.................................:41.35%

- 扩展盘区扫描碎片.............................:60.46%

- 每页上的平均可用字节数.......................:3763.6

- 平均页密度(完整)...........................:53.50%

DBCC 执行完毕。如果 DBCC输出了错误信息,请与系统管理员联系。

可以看出icstockbill表的扫描密度为14.64%,逻辑扫描碎片为41.35%;扩展盘区扫描碎片为60.46%说明存在较多的碎片,并且统计信息很多记录都未进行更新,这将严重影响使用该表时的查询速度,需要对该表进行重建索引。那么我们使用dbcc dbreindex(icstockbill)icstockbill表重建索引,再对icstockbill表进行统计可以看到下面的结果:

DBCC SHOWCONTIG 正在扫描 '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,说明碎片已经得到了很好的整理。

 

可以通过两种方式进行整理,我们称之为“优化帐套”,下面介绍两种方法:

 

方法1:只对部分核心表进行整理,选择“账套管理” —〉“数据库” —〉“优化帐套”,缺点是账套优化功能不能做调度定时执行,需要每次手工点击执行;

方法2:SQL Server企业管理器中做维护计划,使用企业管理器中管理—〉数据库维护计划—〉新建维护计划向导,在第三步,选择重新组织数据和索引页,如图4。

wKioL1g3pdSj27MuAAFuvUsKA6w546.png-wh_50

       由于碎片是由于日常的业务操作导致表中的数据处于不断的删除,新增中造成的,所以应该定期进行优化帐套的操作。建议每周执行一次,同时避开使用K/3系统的高峰期。

       注:如果通过重建索引后,扫描密度,逻辑扫描碎片和扩展盘区扫描碎片依然不能得到较大的下降,这时候请先记录下原来建立的索引信息,手工删除所有的索引后,然后再重新建立索引来达到降低碎片。

       另外导致该问题还有可能由于数据库文件本身的碎片过多,这时候可以通过进行磁盘碎片整理后,备份后还原新账套的方式来处理。