某企业客户内部知识管理系统基于微软SharePoint服务器产品并进行了应用扩展开发,NLB负载均衡部署,后台数据库采用SQL Server 2000 企业版,双核 4C 8G内存两节点群集。在两三年的使用过程中,随着系统用户的增多,出现了数据库服务器CPU占用过高的情况,导致前端访问响应速度慢,经常超时等问题。
用户连接
经过对SQL Server关键性能指标的采集和分析,发现用户连接指标数值过大。用户连接的数据基本保持在700-1000之间,不仅是在忙时段(AM:10),且在闲时段(PM: 6)也基本保持不变,基本可以确定是数据库连接池配置不当或有代码没有释放可用连接,需要通过应用代码进行问题排查。
锁请求/秒
经过向用户的了解,该系统为多数读取,少数写入的系统,但从性能计数器的观测值发现锁请求/秒的指标值平均约为158418.485,最高值可达到558870.266,锁操作总体过大,应该从应用层面进行分析优化。
完全扫描/秒
完全扫描/秒计数器指示有多少不使用索引而进行的全表扫描,测量过程中显示平均值达到100左右,最高值达到832.998,应分析SQL查询语句和数据库索引的对应关系,追加必要的索引以减少全表扫描的次数。
通过使用SQL 事件探查器和查询分析器等工具对SQL Server内部语句执行的性能状况列出了明细,并可将其中的CPU占用较高的任务列出,如第一行显示的大量数据连接导致CPU占用较高、第二行复杂子查询Join下存在部分索引未创建、wf_Instance_track表有大量过期的历史数据时变慢等问题。
经过对系统源代码的粗略分析,发现以下一些问题:
a. SqlHelper中的GetConnection每次都是创建一个全新的数据库连接而返回给调用代码,导致连接无法被重用,每次全新创建也会增加服务器的负担;
b. SqlHelper中的TestConnection每次都是创建一个全新的数据库并且打开连接以测试连接的可用性,但是并不关闭就返回了。
c. AcceptUpdate中的SelectDb调用SqlHelper中的GetConnection获得连接后进行数据库查询操作,但使用后并不关闭相应连接
d. AcceptUpdate中的UpdateDs调用SqlHelper中的GetConnection获得连接后进行数据库更新操作,但使用后并不关闭相应连接
e. ColSelect.aspx中的btn_Ok_ServerClick调用SqlHelper中的GetConnection获得连接后进行数据库更新操作,但使用后并不关闭相应连接
a. 由统一的代码管理数据库连接;
b. 使用数据库连接池技术管理连接;
c. 使用后必须关闭数据库连接;
d. 减少全新创建数据库连接的次数(如减少不必要的TestConnection操作)
e. 优化SQL语句,减少表锁;
f. 优化SQL语句,使查询能尽量使用索引,减少全表扫描;
g. 适当使用临时表,以减少SQL复杂度和子查询;
h. 其他与数据库性能有关的代码排查;
a. 创建经常被查询用到的索引;
b. 适当调整SQL 实例性能相关的参数,以使资源使用最大化(但要考虑为操作系统保留小部分资源);
c. 备份和分离过期的历史数据(如2006年的状态跟踪数据),并建立定期的数据库清理机制;
d. 定期观测和记录SQL性能计数器,了解性能状况变化;
e. 升级到更高版本的SQL Server 产品,使用分区表等新技术能够发挥更佳的服务器性能;
代码优化和测试验证:约需10-15个工作日(依原有代码质量和数量决定)
数据库优化和测试验证:约需5-7个工作日
对代码结构进行了性能分析,发现了一些代码质量问题。
目录名
|
文件名
|
方法名
|
App_Code\Site
|
AcceptUpdate.cs
|
SelectDb
|
App_Code\Site
|
AcceptUpdate.cs
|
UpdateDs
|
FramePage
|
ColSelect.aspx.cs
|
btn_Ok_ServerClick
|
App_Code
|
SqlHelper.cs
|
GetConnection
|
分析、修改、部署共计3人天
注:尚未对存储过程进行优化
对执行性能差但使用频率较高的部分数据表进行了索引创建。
分析、修改、部署和测试和报告共计5人天
性能参考对象
|
优化前
|
优化后(闲)
|
优化后(忙)
|
说明
|
系统CPU利用率
|
86.235%左右
|
15.183%左右
|
45.583%左右
|
具体截图如下图1
|
完全扫描/秒
|
109.337左右
|
23.175左右
|
42.965左右
|
具体截图如下图2
|
锁请求/秒
|
158418.485
|
37101.090
|
69444.232
|
具体截图如下图3
|
索引搜索/秒
|
98472
|
25374
|
43653
|
具体截图如下图4
|
用户连接数
|
800-1200
|
541
|
820
|
|
图0
图1
图2
图3
图4
4.2 待决问题
由于担心影响业务逻辑的正确性和测试的复杂性,没有对以下几个部分进行优化:
1. 数据库连接较多的问题,整体解决需要重新架构设计
2. 复杂度较高的SQL语句以及视图的优化
3. 存储过程的优化,防止表锁
4. 工作流引擎内部机制不了解
数据库中表的数据量不是很大,单个简单的查询对整个系统的影响较小,较复杂的视图或存储过程优化有性能问题,随着数据量的增大影响而更明显,所以可定期清除不需要的历史数据。
通过增加对数据量较大的表以及查询较频繁的表增加索引,能够减轻数据库完全扫描的压力,使CPU利用率下降。以上对比显示,优化效果较明显。
分享到:
相关推荐
聚集索引的选择、非聚集索引的使用以及索引覆盖技术的应用都是优化SQL Server性能的重要手段。在实际工作中,数据库管理员和开发者应当综合考虑多种因素,灵活运用这些知识来提高系统的整体性能。
SQL Server性能优化是一个涵盖广泛的主题,它涉及到数据库设计、查询优化、索引策略、资源管理等多个方面。在本文中,我们将深入探讨SQL Server性能优化的关键点,并结合提供的文档和脚本进行解析。 首先,"SQL ...
在SQL Server课程设计案例中,我们可以深入学习和理解SQL Server这一强大的关系型数据库管理系统。SQL Server是由Microsoft开发的,广泛应用于企业级数据管理和分析。它提供了丰富的功能,包括数据存储、查询、报表...
本文介绍SQL Server性能优化的实战经验,通过分析作者在湖北中医药大学附属襄阳医院工作时遇到的真实案例,详细阐述了SQL Server性能问题的诊断与解决方法。知识点涵盖从SQL Server性能优化目标、影响性能的因素、...
5. **性能优化**:涉及查询优化器的选择、索引的使用、查询语句的优化(如避免全表扫描、减少笛卡尔积),以及性能监控工具的使用,如SQL Server Profiler。 6. **数据库安全**:包括用户权限管理、角色定义、登录...
10. **性能优化**:监控和分析查询性能,使用查询分析器和索引调整来优化查询速度。 11. **Reporting Services**:了解SQL Server 2008的报表服务,创建和部署各类报表,满足企业报告需求。 12. **Integration ...
### SQLServer数据库性能优化 #### 一、数据库性能优化的重要性 数据库系统作为现代企业管理和信息处理的核心组件,其性能直接影响到整个系统的响应速度和用户体验。SQL Server作为一种广泛使用的数据库管理系统,...
在SQL Server实训案例中,我们将深入探讨如何使用SQL Server数据库管理系统来实现一个图书借阅系统的功能。这个实训项目旨在帮助专科学生理解SQL Server的核心概念,包括数据库设计、数据操作、查询优化以及事务处理...
### SQL Server性能调优知识点详解 #### 一、SQL Server性能调优概述 **SQL Server性能调优**是一项系统性的任务,旨在通过一系列的技术手段和最佳实践来提高Microsoft SQL Server数据库系统的运行效率和响应速度...
通过源代码学习,开发者可以深入理解如何使用ASP编写动态脚本,如何设计和优化SQL查询来提高性能,以及如何处理用户交互和数据安全。对于初学者和有经验的开发者来说,这些都是宝贵的学习资源,有助于提升Web开发...
在SQL Server项目实际案例中,我们经常会遇到各种各样的应用场景,这些案例可以帮助我们更好地理解和运用SQL Server的强大功能。以下是对这些关键知识点的详尽解析: 1. 数据库设计:一个完整的SQL Server项目始于...
适合人群:数据库管理员(DBA)、开发人员和技术运维人员,特别是对SQL Server性能优化和故障排除感兴趣的中级及以上技术人员。 使用场景及目标:本指南主要用于企业环境中,针对大型数据库系统的性能调优和故障诊断...
在SQL Server的经典案例解析中,我们通常会遇到各种数据库管理和优化的问题。SQL Server作为一个广泛使用的关系型数据库管理系统,它的功能强大且应用场景广泛。本解析将深入探讨以下几个关键知识点: 1. **查询...
"医院HIS系统SQLServer数据库性能优化" 医院HIS系统SQLServer数据库性能优化是指通过调整规则将数据库服务器的网络流量、磁盘I/O和CPU时间减少到最小,使每个查询的响应时间最短,并最大限度地提高整个数据库服务器...
12. **性能优化**:优化SQL查询,使用索引提高查询速度,调整数据库配置以提升整体性能。 通过本案例的学习,开发者可以深入了解ASP和SQL Server的结合应用,掌握从设计到实现一个功能完善的网站系统所需的技能。...
#### 一、SQL性能优化技巧 **1.1 查询的模糊匹配** - **问题描述**:使用 `LIKE '%parm1%'` 的查询方式会导致索引失效,降低查询效率。 - **解决方案**: - **前端改进**:改变用户输入方式,比如采用下拉列表选择...
这份"SQLserver最全资料和案例"压缩包显然包含了关于SQL Server的全面信息,特别是针对数据库的使用要点和实战案例,对于学习和提升SQL Server技能非常有价值。下面将深入探讨SQL Server的一些核心知识点。 1. SQL ...
在现代企业的信息化管理中,数据库性能优化至关重要,尤其对于大型企业来说,高效的数据库管理能够显著提升业务处理速度,降低服务器负载,从而节省成本并提高用户体验。SQL Server作为一款广泛使用的数据库管理系统...
根据给定文件信息,我们可以得知这份材料主要涉及SQL Server空间数据库在大型数据库应用案例中的实践和操作。下面我将详细介绍SQL Server空间数据库相关的知识点,包括其版本特性、空间数据类型、空间数据操作以及...