背景
近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常。后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶颈。
分析和追踪问题的根源
首先:通过工具追踪服务器的性能,主要定位什么资源、在什么时候出现瓶颈。
这样的工具很多,可以网上搜搜工具和使用方法如PerMon和PAL等,最终得到结果是在业务高峰期(中午12点到23点前)如下图,CPU资源使用率一直很高,初步可以判断是CPU资源紧张。那真的“资源”不够吗?!不一定,进一步分析。
下一步,要更进一步实时监测到底什么东西在消耗CPU资源。
可以实时监控SQL Server资源的工具也很多,我这里使用的SQL Server Profiler,通过过滤和筛选相关Event后抓取想要的列,最主要是CPU这一列的值,如下:
上图,查看每一列CPU资源使用情况,看起来是不是很累,还好有另外一个国外很好的工具ClearTrace,它可以很轻松地分析出trc文件中最占资源的如CPU/Reads/Writes等,这里重点分析CPU,如下图标出,第一二行就是导致CPU资源瓶颈的SQL语句
下一步,重点单独调试、分析上面列出的有问题语句。
我采用做法是将上面拷贝出来并填写对应条件参数的值,将整个语句拿到SSMS中单独调试,开启Actual Execution Plan和IO、Time统计,如下图显示单次执行logical read接近8.5w次,执行计划显示查找是通过索引扫描,这个表比较大,所以查询效率很低。而恰恰在这个案例中该语句执行频率极高,最终给资源特别是CPU造成很大损耗。
这里推荐大家另外一个不错的执行计划分析工具sqlsentry plan Explorer。
接下来,试着在QA环境中,根据语句条件加上合适的非聚集索引。
看一下效果如下图,logical reads降到个位数,加上非聚集索引后,执行计划走的Index Seek,查询效率极大提升。
最后,实施到生产环境后,查看优化效果。
总结
很多时候,当我们遇到系统性能问题,需要先收集数据后,再通过数据分析确定问题根源。本案例在日常数据库运维中比较典型的,常规入手点就是检查PerfMon输出,已识别Memory、I/O 、CPU的瓶颈,资源瓶颈可能就是来自于某个或几个执行效率特别差的查询语句,经过适当的数据收集、分析处理基本可以锁定根源,并通过适当的方法如调整索引、调整语句写法等基本可以解决主要性能问题,特别是在系统上线不久这些问题尤为明显。另外就是随着时间推移,系统的业务压力增加,数据量增加也会带来类似性能问题。总的来说,建议一定要先从应用层面、数据库中索引、存储过程代码等最基本的方面入手进行调优,最大程度榨取提升性能的空间,然后再考虑数据库配置、硬件等。另外特别提醒,解决一个瓶颈可能带来另一个瓶颈,所以建议对调优的内容做一段时间的监控。
相关推荐
本案例中,一位数据库管理员(DBA)面对一个服务器持续100% CPU占用率的问题,采取了一系列的诊断与解决措施。 #### 二、初步排查 - **木马或病毒检查**:首先,考虑到服务器的CPU占用率一直保持在100%,并且没有波动...
在本案例中,我们探讨了云数据库中一个典型的性能优化问题——索引的缺失与不当使用。案例描述了一个用户系统运行缓慢,数据库CPU占用率达到100%,这通常表明存在性能瓶颈。通过分析,发现了一个执行时间超过2秒的慢...
Oracle是一家美国公司,以开发并销售企业级的数据库软件和云工程系统而闻名,其最知名的产品即为Oracle数据库(Oracle Database),这是一个多用途的大型关系数据库管理系统,支持结构化查询语言(SQL)作为数据查询...
1. **Graphics Monitor 2018 R4**:这是一个实时监控工具,用于观察和记录系统在运行游戏或应用程序时的图形性能。它能帮助开发者识别性能瓶颈,从而进行针对性优化。 2. **System Analyzer 2018 R4**:提供实时的...
文章提到了两个具体的案例,第一个案例中,团队最初试图通过简单的硬件升级来解决性能问题,但最终发现真正的瓶颈在于软件架构和网络配置。这个例子强调了单一维度优化的局限性。 第二个案例中,虽然修改了软件架构...
1. **性能洞察**:这是一个旨在帮助用户快速定位、分析并解决数据库性能问题的工具。它通过收集和分析多种关键性能指标,提供全方位的性能监控和优化建议。 2. **关键技术点**: - **负载监控**:持续监控CPU、...
AAS表示一段时间内平均活跃会话数,如果超过实例的CPU核心数,可能意味着存在CPU资源瓶颈。此外,性能洞察还提供用户、等待事件、SQL、数据库、HOST等多维度的统计信息,使得问题定位更加直观和精确。 性能洞察的...
上下文切换指的是操作系统将CPU从一个进程转移到另一个进程的过程。频繁的上下文切换会导致额外的开销,从而降低CPU的处理效率。 ##### 3.2 运行队列 运行队列是指等待CPU时间片的进程列表。当运行队列过长时,...
3. **性能问题**:一个客户数据库自上线以来性能低下,可能涉及数据盘HDI的配置不当或其他性能瓶颈。分析和调整数据库参数,优化索引和查询,以及定期进行性能监控和调优是必要的。 这些案例表明,数据库的稳定性和...
- **命令详解**:`mpstat`是另一个强大的CPU性能监控工具,可以提供更详细的CPU利用率信息。 - **案例研究**: - 进程负载不足:如果发现大量空闲CPU时间(`id`)且系统负载较低,则可能是进程负载不足的情况。 - **...
文档中还描述了一个具体的网络问题案例,涉及到多个服务器之间同步文件时的性能差异。案例中提到的服务器配置相同,但实际的网络行为却有很大差异,这通常需要通过网络流量分析、交换机配置检查、服务器负载分析等...
标题 "使用 Sybase SQL Expert 12.5 作数据库性能优化" 提示我们关注的是一个专门用于 Sybase 数据库性能提升的工具——Sybase SQL Expert 12.5。这款工具提供了强大的功能,帮助数据库管理员(DBA)和开发人员识别...
资源利用率则反映了系统在运行过程中对CPU、内存、磁盘和网络等资源的使用情况。 性能测试角度包括服务器硬件性能的评估、性能目标的制定、性能通过模型的建立、开发代码框架和硬件框架的性能分析、基准测试、软件...
通过分析发现主要问题是由于索引缺失导致大量全表扫描操作。 解决方案如下: 1. **添加索引**:根据查询需求为`userId`字段创建一个复合索引。 2. **调整内存设置**:适当增加`wiredTiger`缓存大小,以便更多数据...
在DDMS中,“traceview.bat”是一个用于性能分析的命令行工具。它可以帮助开发者详细地查看和分析代码执行的时间消耗,找出潜在的性能瓶颈。当出现"traceview.bat丢失"的错误时,这意味着系统无法找到这个工具,这...
- **持续优化**:性能调优是一个持续的过程,随着业务的发展和硬件环境的变化,需要不断地进行调整和优化。 #### 四、关键性能指标 - **响应时间**:指从客户端发送请求到接收到响应所需的时间。 - **吞吐量**:...
通过本文的案例分析可以看出,代码优化是一个涉及多个方面的综合过程,需要根据具体的应用场景和目标平台特性来制定合理的优化策略。从简单的浮点运算替换到复杂的SIMD指令应用,每一步都需要仔细权衡。最终目标是...
- **多重编程原理**:当一个进程执行输入输出操作时,操作系统会将CPU切换到另一个就绪状态的进程上继续执行,这样可以避免CPU空闲,从而提高了整体的系统效率。 - **应用场景**:在多用户或多任务环境下,多重编程...