作者简介: Max Shen(阿特),为了成为数据专家而努力,万一实现了呢!

昨天写了一篇如何监视数据库性能,了解数据库的运行状态。被有人质疑,说没有用。说要直接用数据库的profile和monitor就可以了,到这一步那已经是到了数据库查询性能,已经到了调优的后期。对此我表示不认同,于是现在来写一个评估数据库的前言,谈谈数据库性能问题所需要了解的内容。

基本概念

性能问题

什么是性能问题?当系统出现性能问题,那么反过来问为什么说出现了性能问题,或者说到底怎么样算性能问题呢?

  • CPU100%,CPU占有率过高?CPU就算是100%,但是客户端反馈超快,算不算性能问题呢?
  • 剩余内存过低?操作系统剩余内存过低有可能是SQL吃完了,所以不一定。那如何知道SQL使用的内存情况呢?
  • 查询慢?查询慢,是否就是性能问题?如果一段存储过程写了500行,里面关联几十个表,有复杂的逻辑运算,执行一次超过3000ms,这是慢还是快呢?所以所谓的查询慢,也要有评估机制。
  • 查询链接超时?查询超时,链接超时就更复杂了,有n多因素影响。
  • …………

还有很多情况,客户都说性能问题。所以到底什么算性能问题呢?我个人认为是:

分为2种情况,第一是新系统运行与经验系统相差巨大,性能测试和压力测试不符合预期。第二种是正常运行系统发生与通常情况反映不一致状态,导致业务运行困难。

通常性能下降是我们说的性能问题,但是:

还有性能突然提升,比如平常打开页面3秒钟,突然什么都没有做变成了0.5秒。算不算性能问题呢?我认为也算性能问题,世界上绝对没有无缘无故的爱,也没有无缘无故的恨。所以突然的提升一定隐藏着更为重要的问题!

那么既然有了概念,有哪些关键指标来评估数据性能问题呢?有了指标,我们就需要收集指标,所以有昨天的文章。

衡量性能问题的关键指标

响应时间(Response Time)

响应时间一般指的是一条SQL 语句执行后得出结果耗费的时间。
而一般用户使用来说,比如BS结构,响应时间大家一般会认为是访问页面到页面呈现结束,这样的感官时间。这个时间就需要考虑更多的因素。比如网络、浏览器等等。曾经我碰到的CASE 页面打开速度超慢,但是数据库正常,后来分析发现是页面中潜入的一个很小的GIF影响了。所以要系统来分析。
而执行SQL语句获得的响应时间是最为纯粹的反馈,也是能够得到准备信息的步骤。
在系统跟踪的话,可以用SQL profile 来跟踪响应的内容,分析语句的反馈时间,之后再来详细讲解。

吞吐量(Thougput)

吞吐量是反映系统到底有多繁忙的指标,了解此指标可以更为清晰的知晓系统的使用状况。
性能监视器中可以用SQL Batch Request/Sec,SQL Transactions /Sec等指标来获取。

基线 (BaseLine)

BaseLine一直是我强调的指标。
基线是反映系统日常状况的指标,如果知晓了系统的各种基线值。那么就清楚了底在哪里,天在哪里。这样才能更容易去判断和解决问题。 而基线值是靠长期经验和数据获取的。

瓶颈(bottleneck)

系统一旦产生了瓶颈,我们就要去判断瓶颈,而瓶颈一般来说多会有关联性。比如内存不足可能导致IO过高,IO过高也可能导致CPU等待。
所以准确的知道瓶颈在哪里,这是需要去判断的。使用性能监视器和分析功能可以快捷的帮助大家分析瓶颈。

调优本质

调优的本质来讲,一般的调优都指的是性能出现过高,需要系统稳定的情况。所以本质来讲是干以下事情:

降低工作负载

  • 减少查询请求的数量:去除不必要的数据库访问
  • 降低查询请求的复杂度:优化查询逻辑的设计
  • 减少查询请求之间的依赖关系:优化事务的设计和并发性控制

优化系统资源的配置

  • 找出系统资源瓶颈,增加相应的资源
  • 优化系统资源的分配

性能优化的方法学

如下图,性能优化涉及的层面有:

  • 构架设计
  • 查询优化
  • 索引优化
  • 并发控制
  • 存储优化
  • 服务器优化
    相关优化的成效和收益还要顺序,可见下图:

优化的平衡

  • 优化是一个持续的过程,永无止境,解决了当前“最大”的瓶颈后,下一个“最大”的瓶颈又会出现
    要知道何时停止优化
  • 优化的内容应该是基于业务需求的优化
  • 关注二投资回报率(ROI) ,工程师的时间也是投入,因此要懂得投资回报,需要懂得停止优化!
  • 改变选项是最有意义的优化策略,有的优化是业务决定,那么无法改变的时候是否可以改变业务逻辑。
  • 实际上,足够好的性能就足够了。很多时候足够即可,而不是去寻找极限!

调优思路

调优思路来说,从理论上,在数据库构架时候就应该介入。但是通常我们遇到的情况都是半路出来。发生问题才找到DBA。所以遵循的思路可以是如下:

理解瓶颈,知道发生了什么,然后做优化配置,调整执行慢的语句。
然后再反复,反复。

总结

调优是个系统工程,要有敏锐的触觉,有可能一条参数改变整个系统感受。所以深入理解原理和方法,才能得心应手。 具体的方法,工具等敬请期待新的Blog。

正确评估SQL数据库性能,你必须知道的原理和方法!相关推荐

  1. linux怎么查看数据库性能,正确评估SQL数据库性能,你必须知道的原理和方法!...

    原标题:正确评估SQL数据库性能,你必须知道的原理和方法! 作者:阿特 来源: http://blog.csdn.net/capsicum29/article/details/71480799 数据库 ...

  2. sql数据库分离附加_使用分离和附加方法移动SQL数据库

    sql数据库分离附加 This article explores the process of moving a SQL database using the detach and attach me ...

  3. MS SQL 数据库出现损坏(可疑)的修复方法

    当数据库出现这种情况的时候,说明数据库已经出现损坏,需要对数据库进行修复处理: 1.打开数据库管理器SQL server Management Studio,将当前数据库实例服务停止: 然后找到需要修 ...

  4. Azure SQL 数据库:服务级别与性能问答

    ShawnBice    2014 年 5 月 5 日上午 10:00 几天前,我发表了一篇文章,并就 4 月 24 日发布的适用于Windows Azure SQL 数据库的新服务级别提供了一些预料 ...

  5. Informix 11.5 SQL 语句性能监控方法及实现

    本文主要介绍 Informix 11.5 中 SQL 语句性能监控的基本方法及实现,希望能够使大家有一个比较全面的了解. 我们知道,在数据库应用系统中,SQL 语句的性能好坏至关重要.如果 SQL 语 ...

  6. Azure SQL 数据库引入了新的服务级别

     新的级别将提升客户体验,并提供更多的业务连续性选项 为了更好地满足您在灵活性提升方面的需求,MicrosoftAzure SQL 数据库添加了新的服务级别(基础级和标准级),以与当前处于预览状态 ...

  7. t–sql pl–sql_不正确SQL Server统计信息– SQL查询性能的杀手–基本知识

    t–sql pl–sql 什么是SQL Server统计信息? (What are SQL Server statistics?) SQL Server statistics are a collec ...

  8. 数据库性能需求分析及评估模型

    数据库作为应用系统当中最重要的一块,也是性能测试非常关注的一块,根据我自己的项目经验,和以往对应用系统的性能需求分析和测试策略制定过程,总结一下如何开展数据库系统的性能需求分析,以及制定数据库能力评估 ...

  9. Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出

    Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出 一:MS SQL Report Server 报表的制作. 1.打开Microsoft Visual Studio 20 ...

最新文章

  1. R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加、头部添加、条件生成、某个具体数据列的前后)
  2. 理解微信小程序Wepy框架的三个事件交互$broadcast,$emit,$invoke
  3. Android Studio修改debug.keystore
  4. 动态规划入门 合并石子 COGS1660 石子合并
  5. Java线程volatile(二)
  6. 非功能性需求_非接触式喷射自动点胶机的优势在哪儿?
  7. autoreleasepool底层探索
  8. 高并发模拟( 测试 )
  9. LAMP架构调优(四)——资源压缩传输
  10. MFC应用中对界面的设计(图标,标题,窗口)(VS2019)
  11. FFmpeg合并多个ts视频文件
  12. ha rose server安装 sql_ROSE HA V8.9+Win2008+SQL2008双机配置详细指南(图文)
  13. 指针输出与取地址符输出
  14. Java前叉夹器_大器晚成 SRAM S-900直装夹器评测
  15. win server2016远程桌面连接问题
  16. PHP word ppt pdf 转图片
  17. picACG本地缓存目录_饭团追书怎么返回目录 饭团追书和饭团探书区别
  18. 【答学员问】面试问题-毕业时候为什么没有选择开发
  19. 三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组(GO,PHP)
  20. Python实现按键精灵(一)录制脚本

热门文章

  1. OpenCV Error: Insufficient memory问题解析
  2. 解决Fiddler查看Post参数中文乱码的问题
  3. 使用Spring的Validator接口进行校验
  4. Java进阶篇(六)——Swing程序设计(上),java面试题,java基础笔试题,BAT
  5. 求助pycharm里import pandas遇到No module named pandas怎么办
  6. Python3 下找不到urllib2的问题
  7. (转)基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计
  8. (转)Hibernate框架基础——映射普通属性
  9. CentOS中VMware tools的安装以及安装失败的解决办法,java架构师视频课程
  10. Atom飞行手册翻译: 3.9 从Textmate中转换