前言

  最近连续接触了4个OA系统,均存在着不同的性能问题,本文记述对某移动OA系统的优化全过程,让看官们对数据库优化流程有一个了解,并揭开隐式转换这无情杀手的神秘面纱。

  本文使用的工具:SQL专家云平台专业体检工具 :www.zhuancloud.com

系统情况

  硬件配置

  

  

  软件情况

  

  数据库情况

  

  系统情况可以看出,这是一个较小型的OA系统数据大小70G,硬件配置较为普通2路16CPU、48G内存,数据库为2008R2版本。

数据库指标

  我们来看一下数据库的性能相关情况:数据是从早上九点半到晚上8点的数据

  每秒请求数:

  

  用户连接数

  

  慢语句数量

  

  系统等待情况

  

  等待时间

  

  

  CPU、内存、磁盘指标一切正常,还有很多指标,这里就不贴图了。

  其实看到这里,大多数看官可以得出结论,硬件指标正常,阻塞这么严重,系统的慢主要是因为阻塞!并且语句运行时间长也是因为阻塞的时间长!

  我的猜测

  OK 没问题就是这样的定位,同样我们看到大量的阻塞类型是LCK_M_IS、LCK_M_S、LCK_M_U ·····有了这样的定位,我可以猜测到,系统中一定有update语句不优化或太过频繁(OA这样的系统一般不会特别频繁,所以一定是不优化),而且设计核心的查询语句经常被阻塞(如果不是核心功能慢,用户也不会这样大叫!),而且80%的可能这部分核心查询也不够优化!

问题诊断

  带着我的猜测我们看一下核心的一些语句:

  

  很多语句都类似,看到这样的简单语句(都是基本的查询几个字段一个where条件),我就知道问题其实一定很简单!

  如此简单的语句设计那么跑出来是多长时间呢?

  

  很多人想到着一定是缺失索引,这样关键的where 条件上没有索引!!!!!

  看一下结构:

  

  

  这个表是一个有280万数据的表,而不是像我们想象的那样缺失索引,相反where字段上的条件是一个聚集索引!!(其实如果只是条件单纯的缺失索引,技术人员怎么可能发现不了?)

  整个系统其他问题不大,也就是说明,系统经过优化,程序设计的也很好,没有那种非常复杂的SQL,都是拆成一步一步很简单SQL,也就是说明这其中的技术人员水平还是很可以的!

  那么问题来了,这是啥问题导致的?

  可能出现的情况是:

  1.我这条简单语句不缺少索引,而且单独在数据库跑很快很快(这是一定的)

  2.我系统中阻塞的这么严重,是不是有什么地方我没发现?怎么这样的语句会阻塞的这么狠?

  3.是不是我服务器有什么问题了?

  

  在创意粘性的一本书中写到“指挥官意图”相关,其中有一个比喻就和这个很接近,如果排除其他干扰,就只是看这样简单的语句为什么慢?这样我们就是意图明确,排除干扰,很快我们就会想到“隐式转换”导致索引不能使用的情况,但是正是因为上面的一些问题干扰,我们可能会被引导到,是不是服务器的问题,是不是阻塞情况我们有分析清呢?没有太多办法,数据库本身就是这样一个复杂的东西,各种因素的组合排查是最考验从业者的智慧的。

  回到正题,“隐式转换”确实是一个写程序的人员很难发现的东西,因为我写出的语句很快,到数据库跑的时候慢,这我可不知道。

  如果不知道什么是隐式转换,请参见:SQL SERVER中隐式转换的一些细节浅析

  但我们通过工具很清楚的分析出“隐式转换”

  

  

  在之前的表定义中,我们可以看出表的字段类型为varchar,而传入的参数是nvarchar(从隐式转换的提示中得知)

  

  支持一个简单的问题得到定位,解决起来也是非常容易的,下面给出几个隐式转换的常见解决方式:

  1.程序定义字段类型与表定义不相符(优先级高于表定义类型),直接修改参数设定类型

  2.程序没有定义类型比如java程序定义string ,而驱动自动翻译成nvarchar ,这样一般可以在程序加入强制转换 如 “where a = @a ” 改写成 “where a = cast(@a as varchar(自定义长度))”

  3.程序如果很难修改,或第三方开发,可以直接修改表字段类型

性能对比

  经过1天的简单优化程序性能得到明显改善

  优化前

  

  优化后

  

  优化前

  

  优化后

  

--------------博客地址---------------------------------------------------------------------------------------

博客地址 http://www.cnblogs.com/double-K/

 

欢迎转载,请注明出处,谢谢!

-----------------------------------------------------------------------------------------------------

  总结 : 文章只是简单的描述了一下某移动公司OA优化的过程,主要讲述了隐式转换部分的发现与处理,其他部分的优化都是常见手段请参见其他文章。

    SQL SERVER全面优化-------Expert for SQL Server 诊断系列

  

    关于隐式转换的文章:SQL SERVER中隐式转换的一些细节浅析

----------------------------------------------------------------------------------------------------

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!

转载于:https://www.cnblogs.com/double-K/p/6296320.html

性能优化实战案例——助力某移动OA系统相关推荐

  1. Linux 性能优化实战(倪朋飞)---系统中出现大量不可中断进程和僵尸进程怎么办?

    进程状态 可通过 top 或 ps 查看进程状态. $ topPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4480 yjp 20 0 6 ...

  2. Java 性能优化实战案例分析:Redis如何助力秒杀业务

    在上一课时,我们以 Guava 的 LoadingCache 为例,介绍了堆内缓存的特点以及一些注意事项.同时,还了解了缓存使用的场景,这对分布式缓存来说,同样适用. 那什么叫分布式缓存呢?它其实是一 ...

  3. 五十四、Linux性能优化实战学习笔记|套路篇:系统监控的综合思路

    目录 指标监控 日志监控 小结 上一节,我带你学习了,如何使用 USE 法来监控系统的性能,先简单回顾一下. 系统监控的核心是资源的使用情况,这既包括 CPU.内存.磁盘.文件系统.网络等硬件资源,也 ...

  4. 2 周流量激增百倍的腾讯课堂后台扩容和性能优化实战

    作者:andyawang,腾讯 CSIG 后台开发工程师 疫情期间,学校网课需求激增,腾讯课堂 2 天上线极速版,2 周内支持同时在线人数超百倍增长,对整个后台挑战非常大.整整 2 个月下来,同合作团 ...

  5. 推荐学习-Linux性能优化实战

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 推荐一个学习 ...

  6. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  7. Impala内存优化实战案例

    Impala内存优化实战案例 李珂 畅游DT时代 2016-03-25 文章来源:中国联通网研院网优网管部--IT技术研究团队 作者:李珂 一. 引言 Hadoop生态中的NoSQL数据分析三剑客Hi ...

  8. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID:Ubuntu D ...

  9. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

最新文章

  1. 004:STM32启动文件详解及SystemInit函数分析(转)
  2. Element-UI中Cascader 级联选择器使用
  3. MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession
  4. [转]游戏UI与flash 组件开发
  5. OpenCV调整图像的亮度
  6. iOS CocoaPods自动管理第三方开源库
  7. 《大话数据结构(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+软件架构设计+框架编程+数组+栈+链表+图+队列+树+堆+二叉树+哈希表+立钻哥哥+==)
  8. 发动机冒黑烟_发动机冒黑烟常见的23个原因和解决方法
  9. 星星之火OIer:TunaParetoUnija
  10. 内网安全-隧道穿透漫游(二)
  11. 为什么游戏需要热更新
  12. shell小脚本--laod博客更新hosts文件[脚本]
  13. html模板生成工具_HTML5模板生成器,框架和工具
  14. mysql 数据表格切分_MySQL数据库垂直和水平切分
  15. 计算机考试的知识要记忆背,2017计算机等级考试(NCRE)备考小技巧
  16. python spider模块_spider【第三篇】python爬虫模块requests
  17. Spring Boot集成支付宝电脑网站支付功能
  18. 软件工程自测题及答案
  19. 连接nacos服务器报错,显示/nacos/v1/ns/instance after all servers([localhost:8848])
  20. vs调试时,没有断点在某处停下

热门文章

  1. 远程调试tomcat
  2. 《荒漠甘泉》4月21日
  3. “==”和equals()的用法
  4. gdc服务器维修公司,gdc服务器阵列架坏了
  5. c++输出txt格式循环一组数据后换行再循环一次_numpy、pandas以及用pandas做数据分析的案例...
  6. mysql 判断等于空字符串_mysql 判断null 和 空字符串
  7. linux nginx 缓存服务器,如何开启Nginx缓存
  8. 怎么下载php源文件,设计了一个php下载当前文件,却把php源文件下载下来了,为何?...
  9. springcloud hystrix实战(二)
  10. 快手2021服饰品类洞察报告