• MySQL基准测试(一)--原因,策略,思路


    MySQL基准测试(一)--原因,策略,思路

    运用benchmark的原因

    • 验证一些你认为的问题,通过基准测试和模拟数据来验证。
    • 解决生产系统的一些异常
    • 测试系统的当前的运行情况,通过历史的基准测试结果分析。
    • 模拟更高的负载,发现一些“天花板”等瓶颈问题
    • 规划的未来业务增长。通过基准测试评估,来规划硬件,网络,其他资源。保证生产环境的稳定运行。
    • 测试应用在高并发情况下(高峰值)的性能表现。(这里不仅对数据库,对网络,存储,tomcat等web应用同样适用)
    • 测试不同的硬件,操作系统。
    • 测试采购的设备的配置参数是否正确。

    运用benchmark的策略

    • 测试整个应用环境:包括Web服务器,应用代码,网路,数据库等。不仅仅是数据库,而应该是对于整个应用的性能,因为用户关注的是页面的响应时间,对于整个网站的感官速度,而不是数据库本身。甚至用户都不懂数据库为何物
    • MySQL数据库并不是应用的唯一瓶颈:当数据库的load和慢查询以及参数各个方面都ok的时候,我们应该去梳理整个架构。从应用层开始从上倒下的梳理,比只看数据库的单方面来的性能优化的效益更高。

    针对数据库

    • 比较不同的schema或查询的性能。(可以在不同的硬件环境,不同的操作系统,不同的数据库版本下测试,不同的mysql参数配置)
    • 针对某个应用问题反映的性能问题,做基准测试
    • 针对某个场景(高峰),做一个短期的基准测试,周期性的(每隔一天,每隔三天,或者每隔一周)不同时间段的基准测试。来分析问题。

    运用benchmark的需分析的指标

    • 吞吐量
      吞吐量指的是单位时间内的事务处理数。常用的单位指标每秒事务数(TPS),每分钟事务数(TPM)。
    • 响应时间
      测试单位任务所需的时间。例如一个具体的应用,测试某一个页面的响应时间。并且通过一个百分比响应时间(percentile response time)来代替。例如:访问某一个具体应用的某一个页面的95%的时间都是20ms,那么这个页面的响应时间可以说是在20ms内响应完成。
    • 并发性
      这个并发性是一个具有迷惑性的指标,例如多少用户在同一个时间访问一个web站点,并不代表具有多少并发请求,因为HTTP是无状态的,很多人访问的只是web站点的静态页面。并不等于web服务器的请求。而且,web服务器的请求也不等同于数据库的并发请求。
      因此,到数据库并发请求的时候,并发请求已经少之又少了。一个代码设计良好的应用程序,应该是一个web站点同一时间有10万用户访问,却只可能有30~50个数据库的并发请求。
    • 可扩展性
      当应用系统的遇到业务压力的时候,系统有可扩展性是必须的。例如:tomcat等此类web应用能不能扩展,具有负载均衡的能力。数据库是否有可扩展性,分担读请求的负载能力。因为当吞吐量和性能不能纵向扩展的话。就必须从横向扩展,增加吞吐量。提供整个架构的性能。

    而何时需要扩展?何时遇到瓶颈?那么收集生产环境上的状态指标就非常有必要,包括web应用和数据库等状态指标。来分析遇到了哪些瓶颈?

    运用benchmark的思路

    收集 -->分析 -->决策 -->优化

    • 收集 收集尽可能多的生产环境的状态数据。基于客观事实做出来的优化,总比凭着经验更为靠谱。有时候经验做出来的决策其实会更危险。
    • 分析 基准测试收集来的数据,不管使用何种工具,都需要人的眼睛基于客观的数据做出分析,需要做哪些方面的优化。
    • 决策 分析出来的结果,例如:数据库的参数需要调整,数据库的SQL或者索引需要优化,数据库的schema需要优化,需要加一个cache层。以及硬件,网络,存储需要优化等等。在例如应用层面或者代码。这些需要沟通的,以最小的代价获得最高性能的提升。需要团队大家一起沟通而不是单方面的决定。
    • 优化 以10%的成本来获得40%的性能优化。这个有取舍。例如:本来需要修改表结构亦或者添加索引,得到一个数据库的性能增进。又发现数据库的参数未优化。通过调整一些参数来提高数据库的性能。后面发现这是一个中小型的网站,有一定的维护停机时间可行性。通过分析,决定修改参数配置重启数据库,只有10s左右的停机时间,获得更好的数据库性能。而不需要修改现有的表结构。这是一个平衡的调整。
  • 相关阅读:
    阿里Java开发规约【摘录】
    JavaWeb【八、JSP指令与动作元素】
    JavaWeb【七、JSP状态管理】
    JavaWeb【六、JavaBean】
    JavaWeb【五、内置对象】
    JavaWeb【四、JSP基础语法】
    JavaWeb【三、Web程序编写】
    JavaWeb【二、Tomcat安装】
    Django 模板层
    Django auth模块
  • 原文地址:https://www.cnblogs.com/zhangshengdong/p/9190469.html
Copyright © 2020-2023  润新知