zoukankan      html  css  js  c++  java
  • 数据库优化-基准測试(一)

    基准測试的目的

    基准測试是为了找出系统的瓶颈,包含:

    • 硬件
      磁盘、内存、网络等。

    • 操作系统
      文件系统、内存管理、驱动、调度等。
    • RDBMS
      SQL层、存储引擎层。
    • Schema设计
      索引、表结构、数据类型。
    • Query
      Query写的不好、逻辑错误。
    • 应用程序问题
    • 系统各部分之间的交互
      磁盘IO、RAM、RDBMS等。
    • 測量值
      怎样測量?哪里最花时间?哪个组件最忙?
    • 找出造成瓶颈的原因

    系统測试计划的需求

    • 选择正确的硬件和软件 ;
    • 理解系统的行为 ;
    • 理解系统的性能 。
    • 对系统做正确调优和配置 ;
    • 识别系统的优缺点 ;
    • 定位系统的薄弱点 ;
    • 计划未来的增长量 ;
    • 计划可能发生的特殊事件 ;
    • 理解系统的伸缩性。

    哪些要做基准測试?

    • 完整測试
      • 对全部的基础设施做測试,Webserver、应用程序、缓存层、数据库、网络、外部资源等;
      • 这样的方法提供了一个完整的全貌,但非常难以实现;
      • 结果复杂难以理解。有可能会误导。

    • 单个组件
      • 只基准測试基础设施的单个组件;
      • easy实现。但可能会忽略真正的瓶颈。
      • 结果easy理解。

    单个组件的基准測试的比較须要考虑OS配置、硬件、DB系统、參数、Schema、查询及工作负载。

    基准測试计划指南

    1. 定义基准前的目标。
    2. 了解可反复生成的工作负载;
    3. 记录全部的信息,甚至看起来可能没实用的。包含硬件信息、配置、版本号、表大小等;
    4. 创建基线。每个基准。都是未来的基线。
    5. 定义基准測试后的目标;
    6. 仅在同一时间改动一个配置,并返回基准结果。

    基准測试的类型

    • 性能測试类型
      • 压力測试
      • 负载測试
      • 耐久性測试
      • 峰值測试
    • 压力測试
      測试系统的极限。包含
      • 使用极限负载
      • 定义上限
      • 定义容量
    • 负载測试
      測试系统可承受的负载。包含:
      • 用户数量
      • 事务数量
      • 数据库大小
    • 耐久性測试
      和负载測试相似,仿真可持续的时间,在较长的时间段内測试系统的稳定性。
    • 峰值測试
      • 測试工作负载的突然变化;
      • 定义在当前环境下的系统行为。比如:
        • 不影响系统的情况下处理峰值;
        • 性能将会减少;
        • 系统将停止/失败/崩溃。

    性能測试的目的

    • 在基准測试前必须规划;
    • 验证系统是否满足规定的标准;
    • 比較两个系统;
    • 隔离系统中性能差的组件。
    • 高吞吐量;
    • 低延迟;
    • 面对伸缩时的稳定性;
    • 面对并发时的稳定性。

    吞吐量

    • 是广泛使用的測量值,指的是单位时间(秒或分钟)内成功的事务数量;
    • 通常只关注平均值;
    • 广泛用于市场上的比較;
    • 对压力測试非常重要。

    延迟

    • 完毕一个事务所需的总时间;
    • 最小/平均/最大响应时间。
    • 对负载測试非常重要。

    面对伸缩时的稳定性

    • 測量系统伸缩时的表现。
    • 在成为严重问题前发现薄弱点;
    • 对容量规划非常实用;
    • 经常使用于耐久性測试。

    面对并发时的稳定性

    • 測量线程数或连接数改变时系统的表现;
    • 用于找出线程数量的上限,并引入队列;
    • 经常使用于峰值測试。

    參考:《Understanding Performance through Measurement, Benchmarking and Profiling》

  • 相关阅读:
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 获取指定进程的输入命令行
    dotnet 获取指定进程的输入命令行
    PHP sqrt() 函数
    PHP sinh() 函数
    PHP sin() 函数
    PHP round() 函数
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5351975.html
Copyright © 2011-2022 走看看