何为基线
- 当前运行状态记录、快照
- 用于和未来的状态进行对比
- 未来时刻产生关键事件后的新状态,作为下一个基线
基线数据收集,关注哪些要点
- 系统负载
- 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. Eclipse下建立简单JNI程序实现返回double类型

    在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,ja ...

  2. 从Activity中返回数据

    从Activity中返回数据 一.简介 这里也就是使用intent方式返回数据. 二.具体步骤 在MainActivity通过一个button访问Activity01页面,然后将Activity01页 ...

  3. 网站flash效果遭360急速浏览器拦截

    网站flash效果遭遇360急速浏览器拦截,经分析,本地的一个css文件叫做advertisement.css  结果被360急速浏览器给毙了.改成其他名字就ok了.

  4. hash路由(哈希路由)

    1.https://www.cnblogs.com/huanying2015/p/8047376.html (js 哈希路由原理实现) 2.https://www.cnblogs.com/yeer/a ...

  5. 《The Cg Tutorial》阅读笔记——动画 Animation

    这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...

  6. [转载]Java给word中的table赋值

    一.准备工作: 下载PageOffice for  Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...

  7. 使用Spring实现MySQL读写分离

    1. 为什么要进行读写分离 大量的JavaWeb应用做的是IO密集型任务, 数据库的压力较大, 需要分流 大量的应用场景, 是读多写少, 数据库读取的压力更大 一个很自然的思路是使用一主多从的数据库集 ...

  8. FlashDevelop安装配置

    1.下载 FlashDevelop,flash sdk,flash sdk debug,.net framework,java sdk(32位,不管机器是多少位,否则不能单步调试的) 2.  安装Fl ...

  9. 深入了解zookeeper(三)

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 那么我们继续分析一下 ...

  10. 转载 基于NicheStack协议栈的TCP/IP实现

    一.摘要 Altera软件NIOS II高版本(7.2版本以上,本例程中使用的是9.0版本)中实现TCP/IP所用的协议栈为NicheStack,常用的例程有2个,web_server和simple_ ...