数据库优化-基准测试(一)

基准测试的目的

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

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

系统测试计划的需求

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

哪些要做基准测试?

  • 完整测试
    • 对所有的基础设施做测试,Web服务器、应用程序、缓存层、数据库、网络、外部资源等;
    • 这种方法提供了一个完整的全貌,但非常难以实现;
    • 结果复杂难以理解,有可能会误导。
  • 单个组件
    • 只基准测试基础设施的单个组件;
    • 容易实现,但可能会忽略真正的瓶颈;
    • 结果容易理解。

单个组件的基准测试的比较需要考虑OS配置、硬件、DB系统、参数、Schema、查询及工作负载。

基准测试计划指南

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

基准测试的类型

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

性能测试的目的

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

吞吐量

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

延迟

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

面对伸缩时的稳定性

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

面对并发时的稳定性

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值