我是靠谱客的博主 忧心冬日,最近开发中收集的这篇文章主要介绍mysql容量规划_二 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容量规划,性能测试的全部内容,希望文章能够帮你解决mysql容量规划_二 mysql容量规划,性能测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部