真实生产案例,基于RAID锂电池充放电导致数据库抖动

1.RAID 0:很多磁盘组成了一个阵列;RAID 1:两块磁盘互为镜像,所写的数据在两块磁盘上都有;
RAID 10:RAID 0 + RAID 1;

真实案例,Too Many Connections

  1. 异常信息是ERROR 1040(HY000): too many connections.数据库链接池已经有太多的链接了,不能再建立新的连接了。
  2. 原因结合机器配置。如果配置很高,用命令查看连接数(show variables like ‘max_connections’)很少的话,要考虑连接数没有达到设置的最大连接数

image.png

  1. 这种可能是底层的linux操作系统把进程可以打开的文件句柄数限制为了1024,导致mysql最大连接数没有达到设置的。

    如何解决linux的文件句柄限制

  2. 核心命令:ulimit -HSn 65535,ulimit重新设置可以打开的最大句柄数。

  3. 用命令检查最大文件句柄数是否被修改了: cat /etc/security/limit.conf; cat /etc/rc.local;修改好后可以在mysql的my.cnf里确保max_connections调整后,重启服务。

    线上数据库不稳定抖动情况

  4. 假设执行一个查询语句,需要查询大量的数据到缓存页里,此时可能导致内存里大量的脏页需要淘汰出去刷入磁盘。语句需要等到脏页刷完磁盘后才可以执行,这种会造型性能抖动

  5. 写入redo_log文件,当所有的日志文件被写满的时候或者超过一定容量的时候,会强制buffer里的redo_log刷入磁盘的日志文件。这个时候如果需要大量数据到缓存中,可能页需要等刷完磁盘才执行,造成执行时间过长。