先简单介绍下博主 面临的情况,17年底,一个用了5年的售后系统处于要升级换代又因为其他原因导致暂时不能升级的情况,所以需要在不动大的架构的情况来做优化。具体有个呼叫中心,坐席会一直在接电话,60人左右,电话保存时有个很复杂的派单逻辑,要优先保证效率。外面管理员,维修工,操作员3000+。

先用代码整理下,看看各个表都是多大

--Script1:
--查看某数据库所有表的信息
DECLARE @tablespaceinfo TABLE ([name] SYSNAME,[rows] BIGINT,[reserved] VARCHAR(100),[data] VARCHAR(100),[index_size] VARCHAR(100),[unused] VARCHAR(100)
)DECLARE @tablename VARCHAR(255);DECLARE Info_cursor CURSOR FORSELECT '['+[name]+']' FROM sys.tables WHERE TYPE='U';OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablenameWHILE @@FETCH_STATUS = 0
BEGININSERT INTO @tablespaceinfo EXEC sp_spaceused @tablenameFETCH NEXT FROM Info_cursor INTO @tablename
ENDCLOSE Info_cursor
DEALLOCATE Info_cursorSELECT * FROM @tablespaceinfoORDER BY Cast(Replace(reserved,'KB','') AS INT) DESC

复制下来直接执行就好,结果是数据库大致400G,最大的表为客户档案和客户资产,分别有2000万条和1800万条数据这两个数据表,之前优化后已经对表做了分区,具体可以看表分区,下面是要先对呼叫中心反映的卡顿做对应的处理,说是电话接入后要10-20秒才会有反应,需要出画面打开慢的原因。

开始以为是两个大表的原因,后面发现不是,下面介绍下最快速发现问题的工具。

框框中标识的是活动监视器,里面会有几个非常有用的东西,我们继续暂开说

活动监视器会自动给出这些监视的内容,这里有两点非常需要关注,最近耗费大量资源的查询,以及进程。双击这些查询最近耗费大量资源的查询,会看到具体的语句。我们这时只要在其中发现我们需要优化的界面中存在的语句调用的内容,就可以做对应处理。同时插一句,如果让这里耗费大量资源语句的都得到优化就已经极大的完成了任务了。

这个是我找出来的问题的存储过程,发现这个执行起来非常慢大概需要15秒,虽然看着表很多,但总觉得不至于。图中可以发现,有大量的DATEADD(MM,-6,GETDATE())为了获取最近6个月的服务数据,那就简单了,创建个变量代替这个就行。现在这个存储过程被压缩到2秒,另外说一句,就算不用运算getdate这个函数,取一次,然后用变量代替getdate也会比现在优化很多,不需要反复去数据库取时间。

下面是进程

这是当时上线一个外部app端后的情况,可以发现目前的资源等待已经很严重了,高达8517毫秒,虽然阻塞者都是自己273,但其实是有很多可以优化的空间的。双击,可以看到详细的回话信息,里面的内容可以拷出来单独优化。语句中有个*非常的扎眼,这里说下当你想在select子句中列出所有的列时,使用动态sql列引用“*”是一个方便的方法,不幸的是,是一种非常低效的方法。sql解析过程中,还需要把“*”依次转换为所有的列名,这个工作需要查询数据字典完成!后续查看该视图,又将里面的UNION ALL拆分,将该语句效率提升了3倍左右。

在最下方还有个SELECT  COUNT (*) from的语句,可能这是学校里教法,但实际应用中把count(*)换成count(1)在改语句中竟然可以提升60%的效率,亲测有效。

最后带一下概述

这里的计数器是反应服务器性能的,如果其他方面没用,只能通过提升硬件了。挑选服务器已经在前面提过。

在这问题优化过后,数据库还经历了很多事务方面的优化,打算在后面单独讲,包括脏读幻读需要的注意点,性能和准确性的兼顾,这些都是需要统筹考虑的。活动监视器这个sql的神器,希望可以得到更改的应用,帮到大家,一般小问题都可以比较简单的从这里面发现

经过1个月的优化,这套服务了5年的系统终于继续愉快的跑了起来。对于一个服务了这么多年系统,真不容易哦。

数据库优化的方法及步骤相关推荐

  1. 物联网 mysql数据库优化_MySQL数据库优化大全方法汇总-阿里云开发者社区

    随着数据和负载增加,MySQL数据库会日渐缓慢,性能越来越差,用户体验也随之变差,所以数据库性能优化十分紧迫,云吞铺子分享MySQL数据库优化大全: MySQL数据库优化 云吞铺子先模拟一下数据库访问 ...

  2. 面试中回答关于oracle数据库优化的方法

    1关于优化器的优化配置 介绍oracle数据库优化的基本方式,基于规则的优化,基于规则包括全表扫描,扫描第一行 (需要上网查看一下) 基于成本的优化,基于选择的优化 也就是oracle的3种优化器,关 ...

  3. oracle数据优化面试题,面试中回答关于oracle数据库优化的方法

    2015-08-16 06:30:01 阅读( 470 ) 1关于优化器的优化配置 介绍oracle数据库优化的基本方式,基于规则的优化,基于规则包括全表扫描,扫描第一行 (需要上网查看一下) 基于成 ...

  4. 面试题:数据库优化的方法

    话不多说,先上结论 一.表的设计合理化,符合三大范式(3NF) 二.添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] 三.查询语句的优化 四.数据库的分库分表 ...

  5. mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...

    mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...

  6. php面试题for的优化方法,PHP经典面试题——数据库优化

    Mysql数据库优化 PHP学习过程当中或者面试过程当中少不了的一个重要知识点,那就是关于数据库的优化问题,本人通过查阅资料并验证,总结了几点比较浅层的数据库优化方法,小白能够参考,大神勿喷.面试 忘 ...

  7. 数据库优化方法(三)

    接上文,根据上文中的方法我们可以得到我们需要优化的一连串的TSQL语句,下面我们就来看看,如何进行优化. 1.在SQL Server Management Studio中-->打开一个新的查询窗 ...

  8. 数据库优化查询的方法以及大访问量到数据库时的优化

    一.数据库优化查询的方法 1.使用索引: 应尽量避免全表扫描,首先考虑在where 以及 order by  ,group  by 涉及的列上建立索引 2.优化SQL语句: 1>通过explai ...

  9. oracle数据库出错0095,一种ORACLE数据库优化配置的方法及系统专利_专利查询 - 天眼查...

    1. 一种ORACLE数据库优化配置的方法,其特征在于,包括: 建立配置库类别,根据所述配置库类别分别对应建立配置参数,并为所述配置参数设 置取值列表,其中,所述配置参数的数据类型为数值型,布尔型或字 ...

最新文章

  1. 【运筹学】表上作业法 ( 求初始基可行解 | 最小元素法 )
  2. Hadoop系列五:Hadoop之Zookeeper篇
  3. 【原创】oracle的归档模式
  4. MFC:多窗口函数、变量调用
  5. mysql opensuse_opensuse免安装mysql
  6. 深入浅出谈cuda 书_入门和基础——9本关于美学的书
  7. 从零开始学 Kotlin 之「2」数据类型
  8. 蓝桥杯scratch_又是福州第一!信息学编程竞赛“蓝桥杯”公布福建省赛榜单
  9. 远程下载马bypass waf
  10. SPSS描述性统计(图文+数据集)【SPSS 014期】
  11. mysql xa 异常_面试官问我:MySQL中的XA事务崩溃了如何恢复??
  12. 整数规划:分支定界法
  13. python爬取豆瓣书评排行榜_爬虫:爬取豆瓣读书排行榜
  14. 基于HSI颜色模型实现去除照片的“红眼现象”
  15. 孙正义从阿里巴巴董事会辞职,原因是什么?
  16. 计算机毕业设计python基于django的学生考试成绩数据分析与可视化系统
  17. 如何使用netstat命令辨别DDOS入侵
  18. 电机加减速S曲线算法 Sigmoid 函数
  19. 表格table标签的属性及使用方式
  20. 使用关键字like进行模糊查询

热门文章

  1. 非常简单的使用matlab绘制轨迹世界地图的方法
  2. 基于STM32的定时定量智能宠物投食器原理图PCB
  3. MTCNN移植java_android小项目----基于mnn的mtcnn人脸检测
  4. 爬取正方教务系统课程表
  5. 收支明细记录:教你如何使用项目图表来查看每个项目的占比?
  6. 教你用c++代码制作:仙剑奇侠传,火爆人气!
  7. mysql 批量插入亿级数据做测试用
  8. linux修改宽带拨号密码,linux配置上网 linux adsl拨号上网设置
  9. java 编译的class文件内容乱码问题
  10. 最常用的客观赋权方法——熵权法