参数总结
2023/2/27大约 4 分钟
redo log日志刷盘策略
参数:innodb_flush_log_at_trx_commit
刷盘策略
- 当这个参数值为0的时候,表示提交事务时,不会把redo log buffer里的数据刷入磁盘文件,此时就有你提交了事务,但宕机,内存数据丢失的风险。
- 设置为1的时候,提交事务时就必须把redo log从内存中刷到磁盘文件中,只要事务提交成功,redo log就必然在磁盘中了(推荐方式)。
- 设置为2的时候,提交事务的时候,把redo日志写入磁盘文件对应的os cache缓存中去,而不是直接进入磁盘文件,可能1s后才会把os cache里的数据写入到磁盘文件中。
binlog日志刷盘策略
参数:sync_binlog
刷盘策略
- 设置为0,表示把binlog写入磁盘时,并不是直接进入磁盘文件,而是进入os cache内存缓存。如果机器宕机,os cache里面的日志会丢失。
- 设置为1,强制在提交事务时,把binlog直接写入磁盘文件,提交事务后,哪怕机器宕机,磁盘上binlog也不会丢失。
数据库部署机器配置
注意:以下数值不是绝对的,一台机器能抗下每秒多少请求,往往是跟你每个请求处理耗费多长时间是关联的
4核8G --- 每秒钟抗下500左右的并发访问量
8核16G --- 每秒抗个一两千并发请求是没问题的
16核32G --- 每秒抗个两三千,甚至三四千的并发请求也都是可以的
QPS && TPS
QPS,他的英文全称是:Query Per Second
- QPS就是说,你的这个数据库每秒可以处理多少个请求,你大致可以理解为,一次请求就是一条SQL语句,也就是说这个数据库每秒处理多少个SQL语句。
- 对于QPS而言,其实你的一些Java系统或者中间件系统在进行压测的时候,也可以使用这个指标,也就是说,你的Java系统每秒可以处理多少个请求。
TPS,他的英文全称是:Transaction Per Second
- 其实就是每秒可处理的事务量
- 这个TPS往往是用在数据库中较多一些,其实从字面意思就能看的出来,他就是说数据库每秒会处理多少次事务提交或者回滚。
IOPS
这个指的是机器的随机IO并发处理的能力,比如机器可以达到200 IOPS,意思就是说每秒可以执行200个随机IO读写请求。
如果说IOPS指标太低了,那么会导致你内存里的脏数据刷回磁盘的效率就会不高。
吞吐量
这个指的是机器的磁盘存储每秒可以读写多少字节的数据量。
- 决定了他每秒可以把多少redo log之类的日志写入到磁盘里去。
- 一般普通磁盘的顺序写入的吞吐量每秒都可以达到200MB左右。
latency
这个指标说的是往磁盘里写入一条数据的延迟。
- 写一条日志到磁盘文件里去,到底是延迟1ms,还是延迟100us,这就对你的数据库的SQL语句执行性能是有影响的。
- 一般来说,当然是你的磁盘读写延迟越低,那么你的数据库性能就越高,你执行每个SQL语句和事务的时候速度就会越快。
查看磁盘IO情况
使用dstat -d
命令,会看到如下的东西:
-dsk/total -
read writ
103k 211k
0 11k
- 存储的IO吞吐量是每秒钟读取103kb的数据,每秒写入211kb的数据。
使用命令:dstat -r
,可以看到如下的信息
--io/total-
read writ
0.25 31.9
0 253
0 39.0
- 读IOPS:随机磁盘读取每秒钟多少次
- 写IOPS:随机磁盘写入每秒钟执行多少次
观察网卡的流量情况
使用dstat -n命令,可以看到如下的信息:
-net/total-
recv send
16k 17k
这个说的就是每秒钟网卡接收到流量有多少kb,每秒钟通过网卡发送出去的流量有多少kb,通常来说,如果你的机器使用的是千兆网卡,那么每秒钟网卡的总流量也就在100MB左右,甚至更低一些。
MySQL的预读机制
参数:innodb_read_ahead_threshold
默认值是56
意思就是如果顺序的访问了一个区里的多个数据页,访问的数据页的数量超过了这个阈值,此时就会触发预读机制,把下一个相邻区中的所有数据页都加载到缓存里去