通过了一些图简单的说了一下,有哪些因素会数据库的性能造成影响,它包括查询的速度,包括服务器的硬件,
CPU,内存这些东西,还包括网卡流量,还包括磁盘的IO,这些其实就是对数据库性能影响的因数,那我们后面这些
因素呢,分别来进行详细的讲解
这里只希望通过监控图呢,能有一个直观的印象,了解都有哪些因素对数据库造成了影响,就可以了,
接下来我们就来看看这些因素,造成的影响都有哪些,首先我们来看超高的QPS和TPS,风险就是效率低下的
SQL,在大促的环境下,网站的访问量大幅的增长,首先我们每到大促之间呢,随着访问量的增长,必然会有超高的
QPS和TPS数的产生,那么这个时候呢,每处理一个CPU所需的时间,就显得非常重要了
在当前的MYSQL版本中呢,还不支持多CPU的并发运算,也就是说,每一个SQL只能用到一个CPU,我们常用的QPS和TPS,
来衡量CPU的处理效率,那么什么叫QPS呢
每秒钟所处理的查询量,那加入服务器只有一个CPU的情况下,我们处理一个SQL需要10ms,1秒钟
只能处理100个SQL,那这个时候QPS值就是将近100,因为CPU还有其他的东西要占用,只能是将近100这个情况,
如果CPU100ms才能完成,那我们的QPS就变成了10,可见CPU的执行效率是十分重要的,对于数据库来说,1条CPU
执行,10ms和执行100ms,这是有天壤之别的,所以希望大家千万要记住这一点,在以往的工作中呢,按照经验来说,
数据库的性能百分之八十都是由慢查询所造成的,比如大多数的数据问题,都会都对SQL进行优化,来得到解决,
那就是超高的QPS和TPS,给我们带来数据库的风险,那下面我们还要看到什么呢
大量的并发和超高的使用率,这会给我们带来什么样的风险呢,大量的并发可能会使我们的连接数被占满,
同时超高的使用率呢,CPU的资源耗尽而出现宕机,而这里有一个时常被人们所混淆的概念了,我们刚才也提到过,
并发量和连接量,两个概念,在这里所说的并发量,是指同一时刻,所需要数据库服务器请求的数量,而连接量呢,
往往要比并发量要大的多的多,现在的系统中,每一个前端服务器,有nginx,apache,都会对数据库建立多个连接,
而这众多的连接中呢,都是有几个在请求数据库处理的,其他的大多数连接都会处于sleep状态,但是对于数据库来说,
所能建立的连接数呢,它是有限制的,在mysql中呢,这个限制是由max_connections参数来限制的,这个参数的默认值
只有100,所以大家一定要注意,在咱们的生产服务器,一定要把参数改的稍微大一些,我们后面会有具体的讲解,这里只是
稍微提一下,但是如果连接数超过参数的限制,会怎么样呢,其他真正有用的服务器就不能连接到数据库了,无法连接数据库,
可能就会出现500这样的服务器错误,于是就会对我们的用户使用造成影响,肯定会影响咱们网站的销量
下面咱们就来看看磁盘IO,会给咱们带来哪些风险,首先数据库的主要瓶颈之一,磁盘IO,
磁盘IO给我们带来风险的第一点就是,磁盘IO的性能会突然下降,这往往会发生在远远大于服务器内存的情况下,
通常为了解决这个问题呢,我们只能使用更好的磁盘设备,或者是SSD,硬件来解决
我们在下面的内容中还会详细的介绍,这里就不多多介绍了,在这里要强调的是,磁盘IO出现大的变动,那将
十分可怕,所以在大促之前,我们要把相关的维护计划,大量消耗磁盘IO的备份计划,做一些调整,比如我们平时是在
主库上进行备份的,那么我们在大促的时候,要把备份切到从库上来进行,如果平时要做好磁盘的维护,现在磁盘都是
有报警的,出现报警呢,我们一定要及时进行处理,不要忽略常规的磁盘维护,这样就可以避免由于磁盘IO问题而引起
服务器性能的急剧下降的
接下来咱们再来看看网卡,流量会对性能造成什么样的影响,风险是显而易见的,网卡IO会被占满,
对于当前服务器所使用的千兆网卡来说,1千兆相当于100MB,因为它1千个兆是小b,是一千个位实际上
从上面图中可以看到,这个双十一在网卡的流量,几次都被跑满了,这时如果再有新的连接,
查询数据库,就会出现无法访问数据库的情况,影响正常业务访问
那么我们怎么避免这种情况的发生呢,首先要减少从服务器的数量,因为每个从服务器都要从主服务器
阅读数据,所以从服务器越多,往往流量也就越大,另外就是缓存要分级,我们要把避免前端大量的缓存失效,
对数据库流量的冲击,尽量避免使用select *这样的查询,查询没有必要的列会浪费没有必要的流量,最后我们还
可以把业务网络和服务器网络进行分离,这就可以避免由于主从同步或者网络作业而影响性能