二 mysql容量规划,性能测试
何为基线
- 当前运行状态记录、快照
- 用于和未来的状态进行对比
- 未来时刻产生关键事件后的新状态,作为下一个基线
基线数据收集,关注哪些要点
- 系统负载
- 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容量规划,性能测试的更多相关文章
- MySQL容量规划之tcpcopy应用之道
官方文档:https://github.com/session-replay-tools/mysql-replay-module tcpcopy可以将正式环境上来自客户端的请求复制一份到测试端并复现, ...
- MySQL容量规划和性能测试
性能容量关键指标: 每秒tps,峰值tps 基础数据量,日均增长数据量 最大连接数 内存分配 IOPS 重点关注指标: 业务指标: 每秒并发用户请求.每秒订单数.用户请求响应时长 折算成性能指标: q ...
- MySQL加密的性能测试
这是对MySQL进行加密性能测试的两篇文章系列之二.在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果. AD:WOT2015 互联网运维与开发者大会 热销 ...
- {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句
MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...
- mysql几种性能测试的工具使用
mysql几种性能测试的工具使用 近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一 ...
- {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用
MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...
- MongoDB的容量规划及硬件配置
mongo是基于内存的数据库,应尽量将工作集中的数据全部加载到内存中,即内存应大于工作集 本文译自Chad Tindel的英文博客: http://www.mongodb.com/blog/post/ ...
- Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置
0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...
- web容量规划
容量和性能 容量规划是基于当前性能判断系统需要什么及什么时候需要,它既是资本支出合理化证明过程也是一个技术变更; 性能调优是优化已存在的系统性能; 一般服务的升级步骤是:性能调优 -> ...
随机推荐
- Eclipse下建立简单JNI程序实现返回double类型
在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,ja ...
- 从Activity中返回数据
从Activity中返回数据 一.简介 这里也就是使用intent方式返回数据. 二.具体步骤 在MainActivity通过一个button访问Activity01页面,然后将Activity01页 ...
- 网站flash效果遭360急速浏览器拦截
网站flash效果遭遇360急速浏览器拦截,经分析,本地的一个css文件叫做advertisement.css 结果被360急速浏览器给毙了.改成其他名字就ok了.
- hash路由(哈希路由)
1.https://www.cnblogs.com/huanying2015/p/8047376.html (js 哈希路由原理实现) 2.https://www.cnblogs.com/yeer/a ...
- 《The Cg Tutorial》阅读笔记——动画 Animation
这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...
- [转载]Java给word中的table赋值
一.准备工作: 下载PageOffice for Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...
- 使用Spring实现MySQL读写分离
1. 为什么要进行读写分离 大量的JavaWeb应用做的是IO密集型任务, 数据库的压力较大, 需要分流 大量的应用场景, 是读多写少, 数据库读取的压力更大 一个很自然的思路是使用一主多从的数据库集 ...
- FlashDevelop安装配置
1.下载 FlashDevelop,flash sdk,flash sdk debug,.net framework,java sdk(32位,不管机器是多少位,否则不能单步调试的) 2. 安装Fl ...
- 深入了解zookeeper(三)
一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 那么我们继续分析一下 ...
- 转载 基于NicheStack协议栈的TCP/IP实现
一.摘要 Altera软件NIOS II高版本(7.2版本以上,本例程中使用的是9.0版本)中实现TCP/IP所用的协议栈为NicheStack,常用的例程有2个,web_server和simple_ ...