何为基线
- 当前运行状态记录、快照
- 用于和未来的状态进行对比
- 未来时刻产生关键事件后的新状态,作为下一个基线
基线数据收集,关注哪些要点
- 系统负载
- MySQL运行状态
- 相应的业务指标
1、系统&MySQL相关性能指标
- CPU:%user、%idle、%sys、%iowait
- IO:tps、await、svctm、%util
- 内存:free(free、shared、buffers、cached)、used,以及swap
- MySQL:tps、rt、lock、hit ratio、waits
如何选择OOM对象:--out of memory
2. 如何选择要kill掉的进程
分析badness代码,其选择过程如下:
1)计算该进程以及其子进程所占用的内存;
2)计算CPU时间和存活时间
3)做相应的权重调整
总结起来,就是占用内存越高,得分越高,cpu时间和存活时间越高,得分越低;进程优先级越高,得分越低
综合上述因素后,会得到一个point的值,得分最高的会被选中,然后被kill掉
rt = response time
lock = row lock、table lock
hit ratio = cache/buffer hit ratio
waits = Innodb_buffer_pool_wait_free / Innodb_log_waits / Table_locks_waited / Innodb_row_lock_current_waits / Innodb_row_lock_waits
2、系统容量指标
磁盘空间利用率
网络带宽利用率
CPU、内存利用率
redis里,一定要禁用 keys * 指令
3、业务指标
并发用户数、请求数
每秒新增业务数/订单数
ethstatus,iftop,ifconfig,ifstat
响应时间:就是用户发出请求到收到响应数据的时间;
并发量:就是系统同时能处理多少用户请求;
吞吐量:就是单位时间内系统处理的请求数量;

容量规划
--理解需求,建立模型,优化目标,优化方案
业务类型
- 静态用户请求,峰值每秒xxx次,平均每秒xxx次
- 动态用户请求,峰值每秒xxx次,平均每秒xxx次
- 读写比例:读多写少(MyISAM/TokuDB为主)、读少写多(InnoDB)、读写相当(InnoDB为主)、
统计为主(infobright、infinidb、TokuDB)、纯写入为主(TokuDB/MyISAM)
- 存盘模式:实时存盘(trx_commit = 1),异步存盘(trx_commit = 0,或者本地有写入队列),有cache、不关注(有NOSQL提供缓存服务)
sync_binlog = 1
- 用户语言:亚洲(gbk/gb2312/utf8/latin1),全球用户(utf8),西方用户(latin1)
- 数据恢复实时性要求:实时(部署在线热备库,最好还要有高可用方案),1小时(binlog及时做备份即可,或者用自定义的增备方案),当天(每天一次全备)
- 预计日新增数据量:xx行,xxMB,预估要分配多大内存、存储空间
- 数据库连接方式:长连接(timeout可以设置大一些),短连接(timeout设置小一些,或者启用proxy方案)
- 历史数据归档:可归档(分库、分表,按年/季/月/周/日分表或者分区,方便归档),不归档(未来做垂直拆分)
- 业务峰值性能指标:每秒tps:xx个(机器配置),容忍最长响应时长:xx毫秒(避免大/长/复杂事务,尽量用小/短/简单事务,并尽快提交),
预计最高并发数:xx个(内存大小,网络吞吐)
- 其他需求,是否部署redis/memcached缓存层服务
汇总后,评估要点&案例:
- 服务器配置:OLTP-S/OLTP-M1/OLTP-M2
- 数据库备份机制、频率:主从、普通全量备份(mysqldump/xtrabackup)、基于binlog的增备,自行实现备份方案(基于MySQL特性实现,或者基于业务特性实现)
- 数据库冗余方案:单节点、一主一从、一主多从、双主、双主多从、PXC、MySQL Cluster、MMM/MHA/keepalived/keepalived/proxy
- 数据库版本:MySQL官方、Percona、MariaDB、其他

b) 建立模型
根据:
- 每秒tps,峰值tps
- 基础数据量,日均增长数据量
- 最大连接数
- 内存分配
- IOPS
根据上述几个因素制定架构规划,持久层、事务层、cache层,以及分库分表策略,服务器配置(CPU、内存、IOPS、总存储容量)
c) 优化目标
- 针对当前基线中存在的瓶颈进行优化
- 常见瓶颈以IO为主(磁盘IO、网络IO)
- 制定相对应的方案,找到优化的尝试路径
- CPU:%user、%idle、%sys、%iowait
- IO:tps、await、svctm、%util
- 内存:free(free、shared、buffers、cached)、used,以及swap
- MySQL:tps、rt、lock、hit ratio、waits
a) 优化方案
- CPU,更换更好、更多核心的CPU
- IO,更换IOPS性能更高的设备,例如SSD,PCI-E SSD
- 内存,增加内存,合理分配
- MySQL,升级版本,使用Percona/MariaDB分支版本以支持更高TPS或者降低锁竞争粒度

性能测试
a) 基准压力测试目的
- 采购新设备,评估新设备性能
- 开发新项目,评估数据库容量
- 新系统上线前,预估/模拟数据库负载
- 更换数据库版本,评估性能变化
b) 测试模型设计
- 明确测试的核心目标、诉求
- 排除干扰,专注测试目的
- 确定测试环境
- 确定测试过程中的衡量和变量
- 保证测试结果的可重复性
trx_commit = 0/1/2
明确测试的核心目标、诉求(测试新版本性能/可靠性? 测试新系统性能/可靠性? 测试新机器性能/可靠性? 测试新业务性能?)
排除干扰,专注测试目的(集中注意力,测试过程中不要被其他因素干扰测试的核心目标,此外,测试环境也要做到干净,无干扰)
确定测试环境(构建一个合理、合适、科学的测试环境,不会和现实环境差距太大,硬件、系统、配置相当)
确定测试过程中的衡量和变量(每一次对比测试循环中,只变更少数因素,不要一次性变更太多因素)
保证测试结果的可重复性(保证每个循环都至少有3次测试,每次持续至少30分钟,排除最好和最差的测试结果)
注意事项
- 只在本地加压
- 压测数据量小
- 压测时间过短
- 压测模式太少
- 压力负载过大或过小
- 每轮测试完毕要净化环境
压测数据量小(500 warehouse)
压测时间(1h+)
压测模式(读写比例变化、并发数变化,RO、RW)
压力负载(并发4-1024,最大请求数100w – 10亿 )
c) 压测工具介绍
sysbench
tpcc-mysql
ycsb
--warehouse 1000,warmup time 120s,run time 3600,并发线程4-256
--线程,文件系统类型

二 mysql容量规划,性能测试的更多相关文章

  1. MySQL容量规划之tcpcopy应用之道

    官方文档:https://github.com/session-replay-tools/mysql-replay-module tcpcopy可以将正式环境上来自客户端的请求复制一份到测试端并复现, ...

  2. MySQL容量规划和性能测试

    性能容量关键指标: 每秒tps,峰值tps 基础数据量,日均增长数据量 最大连接数 内存分配 IOPS 重点关注指标: 业务指标: 每秒并发用户请求.每秒订单数.用户请求响应时长 折算成性能指标: q ...

  3. MySQL加密的性能测试

    这是对MySQL进行加密性能测试的两篇文章系列之二.在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果. AD:WOT2015 互联网运维与开发者大会 热销 ...

  4. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  5. mysql几种性能测试的工具使用

    mysql几种性能测试的工具使用 近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一 ...

  6. {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用

    MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...

  7. MongoDB的容量规划及硬件配置

    mongo是基于内存的数据库,应尽量将工作集中的数据全部加载到内存中,即内存应大于工作集 本文译自Chad Tindel的英文博客: http://www.mongodb.com/blog/post/ ...

  8. Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置

    0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...

  9. web容量规划

    容量和性能   容量规划是基于当前性能判断系统需要什么及什么时候需要,它既是资本支出合理化证明过程也是一个技术变更;   性能调优是优化已存在的系统性能;   一般服务的升级步骤是:性能调优 -> ...

随机推荐

  1. 同步容器类ConcurrentHashMap及CopyOnWriteArrayList

    ConcurrentHashMap Java5在java.util.concurrent包中提供了多种并发容器类来改进同步容器的性能.其中应用最为广泛的为ConcurrentHashMap,Concu ...

  2. OLED取模笔记

  3. js数组,数字函数,字符串函数,表单验证,hashMap,堆栈,日期函数,call函数

    1.javascript的数组API Js代码 收藏代码 //定义数组 var pageIds = new Array(); pageIds.push('A'); 数组长度 pageIds.lengt ...

  4. The Saltwater Room

    I opened my eyes last night and saw you in the low light 昨夜我睁开眼,看见你在昏暗的灯光下 Walking down by the bay, ...

  5. 一个css3 旋转效果 -- 待续

    <div class="container"> <div> <figure></figure> <figure>< ...

  6. php实现安装程序的 安装

    install.php 只要填写数据库就可以把数据插入到数据库中,实现安装 <?php header("Content-type:text/html;charset=utf-8&quo ...

  7. postgresql recovery.conf改变需要重启吗

    之前在研究pgpoll时,发现trigger_file参数指定的文件存在后,会自动将standby节点提升为可写节点.不需要手动执行pg_ctl promote,但是这个时间一般有延迟,因为进程会定期 ...

  8. git合并分支与解决冲突

    前提: 当前开发的分支为feature/20161129_317606_algoplatform_1,由于feature/20161130_322574_tmstools_1分支有新内容,所以准备将f ...

  9. 官方:MySQL 5.7 并行复制实现原理与调优 | InsideMySQL(转载)

    MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能, ...

  10. Ant入门之引用外部jar文件

    笔者在java项目开发中经常遇到引用外部Jar包的情况,使用ant打包过程中需要对其引用.现在此简单记忆以飨来者. 此处引用Log4j,具体程序HelloLog4j.java: package oat ...