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

基准测试的目的

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

  • 硬件

    磁盘、内存、网络等。

  • 操作系统

    文件系统、内存管理、驱动、调度等。

  • 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》

时间: 2024-10-12 14:36:41

数据库优化-基准测试(一)的相关文章

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

基准测试工具 基准测试工具:mysqlslap 是MySQL官方提供的性能基准测试工具,通过客户端模拟工作负载. 其执行包括三个阶段: 1. 创建表结构和加载数据 2. 运行测试 3. 清理数据 #例子1:--only-print 只输出SQL语句并打印 --auto-generate-sql 代表用系统自己生成的SQL脚本来测试 $ mysqlslap --only-print --auto-generate-sql DROP SCHEMA IF EXISTS `mysqlslap`; CRE

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

基准测试工具:DBT2 DBT2是一个OLTP事务性能测试工具.它模拟一个批发供应商,多个职员访问数据库,更新客户信息和检查库存. DBT2是一个TPC's TPC-C基准测试规范的不错的实现,它是MySQL的最流行的基准测试工具之一,但它的文档很缺乏. DBT2:安装Perl模块 DBT2需要的Perl模块: Statistics::Descriptive Test::Parser Test::Reporter 安装Perl模块的方法: $ sudo cpan Statistics::Desc

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

基准测试工具:sysbench 简述 sysbench多线程基准测试工具,可以测试: 文件I/O性能 Scheduler性能 内存分配和转换速度 POSIX线程实现性能 数据库服务器性能(OLTP) 工具初始开发用于MySQL的性能测试,现在已经扩展到其它数据库. 获取工具的网址: https://code.launchpad.net/~sysbench-developers/sysbench/0.5 http://sysbench.sourceforge.net/ http://dev.mys

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

如何执行基准测试 测试条件 –如何避免常见的错误?需要在一个真实的环境中运行基准测试. 相似或相同的硬件 包括CPU.内存.网络.IO系统 相同的软件配置 相似的数据集大小 相似的数据分布 相似的访问模式 –避免查询和数据缓存 –重新构建访问的分布 相当的线程数量 –多用户和多服务器 记录所有信息 宁可记录无用的信息也不错过重要的信息 文档化所有的步骤以便于重新执行基准测试 配置:硬件.软件版本和参数.数据大小.数据集 收集硬件统计信息(CPU.磁盘.网络.内存) 收集软件统计信息(GLOBAL

数据库优化

本文介绍一点,关于数据库优化方面的经验总结,希望对需要的人有所帮助! 优化请掌握以下几点(高手请补充): 1.表上的字段不要太多,能独立出去的尽量独立出去,虽然表上的字段多,写代码会比较方便, 但是运行效率就差了 2.将字符串的比较变成数字型比较每个系统都会有用户管理,其中必然有 昵称,密码,邮件等的字符串类型数据比较的问题.在数 据库操作中,字符串比较的效率是相当低下的.因此遇到字符串的比较,必须将其转换为数字型 比较.  具体做法是:在数据库表中增加相应的数字字段,比如 cNickname

单机数据库优化的一些实践(mysql)

数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题.本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正. 1.表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能.因此,表结构优化是一个很重要的步骤.

MySQL数据库存储引擎与数据库优化

存储引擎 (1)MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎. 每种存数引擎使用不同的存储机制.索引技巧.锁定水平,最终提供广泛且不同的功能. (2)使用不同的存储引擎也可以说不同类型的表 (3)MySQL支持的存储引擎 MyISAM InnoDB Memory CSV Archive 查看数据表的创建语句: SHOW CREATE TABLE 表名 相关概念: (1).并发控制:一个人读数据,另外一个人在删除这个数据. 当多个连接对记录进行修改时保证数据的一致性

[mysql][【优化集合】mysql数据库优化集合

三个层面: 1.系统层面 2.mysql配置参数 3.sql语句优化 =========================================================== 一.系统层面 =========================================================== 二.mysql参数层面 http://www.oicto.com/mysql-explain-show/ 2.1slowlog 配置slowlog 配置文件: log-slow

数据库优化处理

数据库的优化程度影响了一个程序的执行力和用户的体验感,所以数据库的优化显得格外重要. 一.框架 根据业务需求选择合适的开发框架,不近对数据库的优化有帮助,而且对于程序后期的维护也很有帮助,根据项目的需求,看项目需要满足多少人的访问量,并发量到多少.不是说小公司就不需要分布式.大数据这些,考虑长期的问题. 将一些固定不常变化的值,设置为常量:采用缓存机制,减少对于数据库的访问(连接池):服务器的优化(队列): 二.数据库本身 1.表结构的设计 表的设计来源于需求,同时表的建立也会影响需求的实现,一