当前位置:文档之家› 金蝶K3数据库索引与系统性能优化项目解决方案(具体应用篇)

金蝶K3数据库索引与系统性能优化项目解决方案(具体应用篇)

K3数据库索引及系统性能优化解决方案(具体应用篇)--重建索引速度较慢,请在系统空闲时间进行DBCC DBREINDEX(t_icitem)DBCC DBREINDEX(t_item)DBCC DBREINDEX(t_itemclass)DBCC DBREINDEX(t_itemright)DBCC DBREINDEX(t_user)DBCC DBREINDEX(t_group)goif not exists(select 1 from sysindexes where name='ix_group_fgroupid')create index ix_group_fgroupid on t_group(fgroupid)goif not exists(select 1 from sysindexes where name='ix_itemright_ftypeid')create index ix_itemright_ftypeid on t_itemright(ftypeid)go1 SQL Server调整当用户使用K3系统一段时间以后,发现系统的响应时间越来越长。

这种情形往往是由于账套数据库缺乏维护引起的。

缺乏维护的数据库会存在过多地碎片、过期的统计、隐含着可能的错误查询结果的数据库的逻辑和物理的不一致性,这些都会直接影响系统的性能。

这里介绍解决上述账套数据库性能问题常用的方法。

1.1 使用DBCC语句发现和解决上述问题。

DBCC: 数据库一致性检查器。

打开SQL 查询分析器,执行如下语句。

u DBCC SHOWCONTIG 显示指定表的数据和索引的有关数据碎片的信息DBCC SHOWCONTIG(表名[,索引名])在有大的改动的表,引入数据的表,或者引起低效查询的表上使用该语句。

例:DBCC SHOWCONTIG(’T_ITEM’)u DBCC DBREINDEX 重建指定数据库中表的一个或多个索引。

例1:重建某个索引DBCC DBREINDEX ('T_ITEM', uk_item2, 80) 例2:重建所有索引DBCC DBREINDEX ('T_ITEM',’’,80)u DBCC SHOW_STATISTICS 显示指定表上的指定目标(例如一个索引名称))的当前分布统计信息。

这些统计信息是被SQL Server查询优化器使用的DBCC SHOW_STATISTICS(表名,目标)例:DBCC SHOW_STATISTICs('t_item','pk_item')u sp_updatestats & UPDATE STATISTICS 更新统计信息; sp_updatestats 对当前数据库中所有用户定义的表运行 UPDATE STATISTICS.使用UPDATE STATISTICS 语句的时机:在一个空表上创建一个索引,然后在以后应用它。

执行TRUNCATE TABLE语句,然后在以后重新应用该表。

通过使用FULLSCAN或SAMPLE选项请求明细的索引统计信息。

例1. UPDATE STATISTICS T_ITEM例2. UPDATE STATISTICS T_ITEM(PK_ITEM)例 3. USE AIS20011203150410EXEC sp_updatestatsu DBCC CHECKTABLE 检查指定表或索引视图的数据、索引及 text 、ntext 和image 页的完整性。

如果你相信一个指定的表可能被破坏了,这条命令非常有用。

u DBCC CHECKDB 检查指定数据库中的所有对象的分配和结构完整性。

这条命令发现并修复数据库地址分配和表内部的全部错误。

实际上,CHECKDB验证数据库内部一切事物的完整性,但是,DBCC CHECKDB是一个耗费CPU和磁盘资源的操作,每个需要检查的数据都必须首先从磁盘中读出到内存中。

而且,DBCC CHECKDB 使用tempdb进行排序。

要获得较高的DBCC性能,推荐在下面的情况下运行DBCC:l 在系统使用率较低的情况下运行CHECKDB;l 确信当前没有执行其他磁盘I/O操作,如磁盘备份操作;l 将tempdb放在另一个磁盘系统上,或者放在一个快速磁盘子系统上;l 为tempdb提供足够的空间,运行DBCC带上参数ESTIMATE ONLY(显示执行 DBCC CHECKDB 操作所需tempdb 空间的数量),估计tempdb需要多少磁盘空间;l 避免运行消耗大量CPU时间的查询和批处理;l 在DBCC命令运行时,减少事物活动;l 使用NO_INFOMSGS选项(压缩使用空间使用的信息和报告)减少处理和tempdb 使用率。

例:DBCC CHECKDB ('AIS20011203150410') WITH NO_INFOMSGS,ESTIMATEONLYu DBCC SQLPERF 提供有关所有数据库中的事务日志空间使用情况的统计信息。

日志文件的闲余空间的减少,会降低系统的性能。

系统会在备份时日志截断日志文件,所以要求用户要制定一份良好的备份方案。

例:DBCC SQLPERF ( LOGSPACE )1.2 使用数据库维护计划使用数据库维护计划器是一种标准且方便的可对多个账套数据库同时设置维护任务维护模式。

下面介绍其建立方法:本方案所介绍的数据库维护计划侧重于数据库的优化,即性能的提高。

1) 打开Enterprise Manager,展开服务器,展开管理,然后单击数据库维护计划。

从操作(Action)中选择新建维护计划 ,可以看到图4.1所示的欢迎屏幕,单击下一步按钮。

2) 选择数据库,选择K3账套所在的数据库(可选一个或多个)。

单击下一步按钮。

图2 选择数据库3) 更新数据库优化信息。

选择重新组织数据和索引页,选择使用原有可用空间重新组织页面。

选择当增长超过50MB时,从数据库文件中删除未使用空间,收缩后保留的可用空间为10%的数据空间。

单击下一步按钮。

图3更新数据库优化信息4) 检查数据库完整性。

选择检查数据库完整性,包含索引以及尝试修复所有小问题。

单击下一步。

图4 检查数据库完整性5) 指定数据库备份计划,备份在优化方案中暂不考虑,跳过,单击下一步。

图5数据库备份计划6) 指定事务日志备份计划在优化方案中暂不考虑,跳过,单击下一步。

图6指定事物备份计划7) 生成报表。

选择将报表写入目录中的文本文件,选择删除早于4周的报表文件。

或者选择将电子邮件报表发送到操作员,然后花时间阅读这个报表,看看数据库中是否有任何需要注意的问题。

单击下一步。

图7生成报表8) 维护计划历史记录。

SQL Server每次运行时保持维护计划的历史。

可以浏览这个历史,看看操作中何时遇到故障,然后确定故障原因。

如果只有单台机器,则要在本地服务器存放历史纪录,但如果网络中又多台机器,则要将历史纪录存放在中央服务器中,以便从各台机器上方便的访问。

下面选择缺省在本地存放1000行历史纪录。

单击下一步。

图 8 维护历史纪录9) 完成数据库维护计划向导。

用于命名和检查具体工作,在计划名中输入:K3账套数据库维护计划。

单击完成按钮生成计划。

图9 完成数据库维护计划向导1.3 发现死锁和消除死锁死锁形成的原因是不同的,有的死锁系统可以自动地侦测和消除而另外一些则需要管理员调整请求死锁发生在两个或多个进程同时等待被其中一个进程保留着的锁。

该进程将不会释放它保留的锁直到它获得被其它进程保留的资源,反过来也一样。

当一个死锁被被确认以后,SQL Server通过自动选择可以立即打断死锁的线程来结束死锁。

许多阻塞的问题发生在由于一个进程保留锁过长时间,引起一系列被阻塞的进程等待其它进程释放锁。

SQL Server不能识别阻塞锁并自动地解决它们,所以必须监控阻塞锁的存在并手工消除它。

在一个应用中建立一个锁的超时设置是一个防止阻塞锁的方法。

这允许应用监控阻塞锁并回滚进程而不是不确定地等待或阻塞语句的重提交。

下面,介绍手工消除死锁的方法:1) 系统长时间没有响应,可以在SQL查询分析器中执行系统存储过程sp_lock 和sp_who ,如图所示,spid 57正在等待资源。

Spid :系统进程 ID执行命令:sp_who 57 可以得到关联该进程和锁的用户的登录名称,主机名称和状态等信息。

图1. 运行sp_lock显示的锁信息2) 转到SQL Server Enterprise Manager,展开管理,展开当前活动,展开锁/ 进ID ,如图所示,spid57被spid56阻塞。

图2. 显示锁的阻塞情况3) 双击spid56,然后单击取消进程(Kill Process)。

4) spid57阻塞解除。

2 硬件调整硬件调整,是为K3系统的正常运行要求的工作量提供足够的硬件资源的行动。

要调整系统的硬件,就要决定可以为K3系统分配那些资源以改进其性能,这些资源包括附加的内存、CPU、I/O资源或所有这些资源的组合。

调整系统性能的工作主要涉及决定应该增加哪种资源,以及增加多少资源。

硬件调整是非常重要的,因为许多典型的性能问题是由不充足的或配置失当的硬件组件导致的。

I/O子系统是一个数据库调整的关键性部分。

通过提供足够的CPU、内存与I/O资源。

可以避免许多性能问题。

通过监控相关的计数器,可以及时发现和解决引起系统性能降低的硬件问题。

2.1 控制内存的使用SQL Server 要求内存是基于静态内存的需要:一是它自己的程序代码和内部数据结构,例如内核的工作负载,打开对象,锁。

二是数据高速缓存。

基于有效的系统资源和这些资源的竞争需要, SQL Server动态地获得和释放数据高速缓存。

如果SQL Server的数据高速缓存需要更多的内存,它查询操作系统检查是否有物理内存可以利用。

如果有,SQL Server在数据高速存中使用它并且在内存中保留先前读到的数据。

为阻止Windows 2000页面调度,SQL Server依赖Server activity增减数据高速缓存以保留4MB~10MB剩余物理内存。

对SQL Server不足的内存分配或使用会引起数据连续地从硬盘上而不是高速缓存上读取,这将降低系统的性能。

请观察以下与内存有关的计数器,以便及时发现和解决内存上的问题。

使用工具:性能监视器监控内存和分页的使用对象: 计数器描述指导Memory: Available Bytes监控被进程执行使用的有效字节数。

(可用物理内存量)这个计数器应该总是大于5000KB;低值显示物理内存整体的缺乏和需要提高。

推荐值:大于4MBMemory: Page/sec为了访问不在内存中的页而读取或写入磁盘的总页数。

相关主题