这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL业务优化与设计”中的MySQL数据类型相关笔记。
所有笔记可能不定期更新,发布时不一定为最终版。
性能容量评估
分析线上业务场景
评估数据库服务器所需性能指标
预估可能成为瓶颈的服务器资源
帮助数据库性能调优
数据库服务器硬件性能指标
磁盘IO性能
内存容量
CPU
网络吞吐量
磁盘容量
数据库业务特点关键词
OLTP/OLAP类型
并发请求
读写比例
数据量
冷热数据比
数据分级存储
OLTP与OLAP
T = Transaction
面向广大用户,高并发,较短事务操作
互联网应用绝大部分属于OLTP
OLTP看重服务器CPU,内存,些事务较多或内存不够则依赖磁盘IO
A =Analytical
通常面向内部人员,大规模复杂查询
OLAP看重磁盘扫描的IO能力,部分依赖内存排序。
并发请求-衡量线上业务繁忙程度
业务高峰时数据库的每秒并发访问量是多少
通过应用服务器数量,连接池配置判断
通过产品估算初上线用户规模和用户增长速度
通过实际业务业务类型判断
并发量相关资源:CPU
读写比例-描述应用程序如何使用数据库
线上业务select只读与update/delete/insert写操作比例
delete/update通常都是先读再写
insert需要分区数据写入是持续insert还是大量导入数据
根据业务实际场景分析
多数场景相关资源:内存
多写场景相关资源:磁盘IO
数据量-总量
数据库服务器存储设备可扩容能力上限
根据估算的业务量,写入模式,分析数据增长量
预估一个硬件升级周期内数据库可存放数据的总量,上线时要留好余量
数据总量相关资源:磁盘容量
冷数据与热数据-有用数据的实时集合
热数据,线上最新一定周期内将被反复访问的数据
冷数据,线上保存着的,最近不会被在线用户用到的数据
估算活跃用户量,数据增长量等预估热数据量
内存大小尽可足够存放线上实时热数据。
热数据相关资源:内存
MySQL性能测试
为什么需要做性能测试
对线上产品缺乏心里预估
重现线上异常
规划未来的业务增长
测试不同硬件软件配置
性能测试的分类
设备层的测试
业务层的测试
数据库层的测试
设备层的测试
关注那些性能
服务器、磁盘性能
磁盘坏块率
服务器寿命
业务层的测试
真的业务进行测试
数据库层的测试
什么情况下要做MySQL的测试
测试不同的MySQL分支版本
测试不同的MySQL版本
测试不同的Mysql参数搭配
MySQL测试分类
CPU Bound
全内存的测试,测试的数据远小于配置的内存;这样就可以不用因为磁盘IO的性能不同,而影响测试结果。
IO Bound
测试的数据量远大于内存,这就有大量的数据从磁盘IO读取写入;
远大于内存
每个均包含:
写入测试
更新测试
纯读测试
混合模式
以上三种都有。
常用的测试工具
开源的MySQL性能测试工具
sysbench
tpcc-mysql
mysqlslap
性能测试衡量指标
服务吞吐量(TPS,QPS)
TPS:每秒钟执行的事务量
QPS:每秒钟执行的请求量
若一个事务中包含10个请求,每秒钟可执行10个事务
则,TPS为10,QPS为10*10=100
服务响应时间
服务并发性
Sysbench
业界较为出名的性能测试工具
可以测试磁盘、CPU、数据库
支持多种数据库:Oracle、DB2、MySQL
需要自己下载编译安装
建议版本Sysbench0.5
编译Sysbench
1)下载sysbench
git clone https://github.com/akopytov/sysbench.git
2)编译&安装
./autogen.sh
./configure --prefix=/home/ddb/tmp/sysbench
make && make install
3)./sysbench --help
4)初始化数据
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 prepare
5)运行测试
sysbench --test=oltp.lua --oltp_tables_count=1 --num-threads=100 --oltp-table-size=500000000 --oltp-read-only=off --report-interval=10 --rand-type=uniform --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-time=1000 --max-requests=0 run
6)数据清理
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 cleanup
Sysbench流程
初始化数据-》运行测试-》清理数据
Prepare语法--初始化数据
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 prepare
--oltp-table-size 多少行记录
Run语法-运行测试
sysbench --test=oltp.lua --oltp_tables_count=1 --num-threads=100 --oltp-table-size=500000000 --oltp-read-only=off --report-interval=10 --rand-type=uniform --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-time=1000 --max-requests=0 run
cleanup
1、手动drop掉表和datebase
2、使用syschench提供的cleanup命令
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 cleanup
Tpcc-mysql
TPC-C是专门针对练级交易处理系统(OLTP系统)的规范
Tpcc-mysql由percona根据规范实现