step1 配置、测试
qps 与 机器配置
qps 和 请求的处理时间相关。
对于Java应用系统,一般来说瓶颈在访问数据库。
Java 应用系统的配置一般是2核4g或4核8g
数据库服务器的配置一般是8核16g或16核32g
Java 应用,4核8g一般抗几百并发请求。
数据库,8核16g一般可以抗2k请求。
对于业务系统而言,需要结合内存占用,JVM 的垃圾回收等来考虑并发能力。
可以给数据库服务器配置SSD固态硬盘,因为数据库需要进行大量的磁盘IO。
DBA配置机器参数
DBA 往往根据经验,进行mysql服务器的参数配置,
甚至还会进行linux参数调优,比如最大文件句柄参数。
压测指标
拿到机器了,就要进行 mysql 服务器压力测试。
数据库的压力测试和业务压测不一样。可以使用工具,每秒发送几千请求。
QPS、TPS、IOPS、吞吐量、latency。
在mysql服务器压测语境下,
QPS是指每秒处理的sql语句。
TPS是指每秒处理的事务数,一个事务可能包含多个语句。
IOPS涉及到随机IO的处理能力,因为脏数据刷盘是由IO线程刷盘的。
吞吐量是指每秒处理的字节数,和 latency 一样,涉及到将 redo log buffer刷磁盘的效率。
QPS和TPS
一般QPS是一个单独的小服务,而TPS来刻画对外服务的。
除此之外,还要关注机器的CPU、磁盘、IO、内存负载。
作业:sysbench 对数据库进行压力测试
step2 buffer pool调优
buffer pool 个数
mysql同时处理多个请求时,可能存在同时操作一个buffer pool里的缓存页,链表等。
实际可以配置多个buffer pool。

buffer pool 大小
假设free链表满了,必然导致两次IO,先刷磁盘,然后加载数据页。
无法改变访问数据页的速度,因此为了避免两次IO,需要加快后台线程刷磁盘的频率。
但是频繁IO也会影响数据库的性能。
因此尽量要把buffer pool设置大一点。
当高峰期过后,mysql的缓存页被使用的速率不断下降,后台线程基于flush链表和lru链表不断释放缓存页。
