哪些因素会对mysql数据库服务器性能造成影响

web服务器  和数据库服务器都会造成很大的压力,对于web服务器我们可以很容易进行横向扩展,说白了,就是增加一些一样的服务器,然后在服务器上就可以部署我们的web服务,只要服务部署的程序是一样,那么每台web服务器提供的内容就是一样的,但是数据库服务器,不能随意的拷贝复制,因为数据库中的数据都是具有完成性和一致性,数据库的扩展才是最重要的,数据库架构,所有的数据库,都是存在于一组服务器上,这组服务器是有一个主master,15个从slave,一旦主服务器挂掉,必须手动的从从服务器上,选择一台信息最新的从服务器,提升为主服务器,并且在其他从服务器与这台主服务器的,新主从进行同步,这个操作过程非常耗时,什么因素影响服务器性能。

sql语句 下图是qps每秒处理的查询量 和tps每秒处理事务个数,以往的经验来看,数据库的性能低,80%是由慢查询造成的,在当前的mysql并不支持多cpu的并发运算,也就是说每一个sql只能用到一个cpu,常用qps 和tps 来衡量sql的处理效率,假如数据库只有一个cpu的情况下,10ms 处理1个sql,那么1s钟就可以处理100

sql,那么这个时候qps值得就是将近100,因为cpu还被其他进程所占用,如果一条sql执行100ms 那么他的qps 是10 ,所以一条sql执行10ms 和执行100ms是有这很大区别的,数据库的性能80%由慢查询造成,优化sql语句可以提高数据库性能。

数据库连接数 下图并发和超高的cpu使用率 

并发量和连接量这个连个概念容易混淆,并发量是同一时刻所需要数据库服务器所处理的请求的数量,而连接量往往要比并发量要大多,现在系统每一个前端服务器如nginx apache Tomcat 都会对数据库建立多个连接,众多的链接中通常是只有几个是在请求数据处理的,其他大部分链接是处于sleep状态,但是对于数据库来说所能建立的数据库连接数是有限制的,在mysqlmax_connection参数是 控制的默认是100,所以生产环境要把这个值调大一些,如果连接数超过这个值得时候会怎么样呢,其他真正的请求数据的服务器就无法链接到数据库了,就会报500之类的错误提示。

磁盘io 

io性能突然下降,一般出现在,热数据远远大于服务器可用内存情况下,这种情况下通常使用更快的磁盘设备,比如更好的rid卡啊,或者ssd,或者fashion io 这种更好的硬件,如果在大促的活动中,如果磁盘出现大的波动将会很麻烦, 所以在大促之前,把相关的磁盘维护计划,大量消耗磁盘io数据库计划作出一些调整,比如我们平时在主库上进行备份,那么在大促的时候我们一定要把备份切换到从库中进行,另外平时做好磁盘的维护,现在服务器磁盘都是有磁盘报警的,如果出现了这样的报警,我们就要一定及时的处理,不要觉得使用了rid这样设备就忽略了磁盘维护,这样就可以避免由于磁盘问题导致的服务器性能突然下降了,

网卡流量 

风险 :网卡io被占满(1000Mb/8 ~100MB)千兆网卡指的是小b,实际上是1000个位,

如何避免无法链接数据库的情况:

1、减少从服务器的数量,因为每个从服务器都要从主服务器上复制日志,所以从服务器越多,网络流量就越大,

2、进行分级缓存、  缓存要分级,避免前端的大量的缓存失效,对数据流量的冲击

3、避免使用“”select * “” 进行查询  ,特别是在大促期间查询出没有必要的列,会浪费大量的网络流量

4、分离业务网络和服务器网络,避免主从同步或是网络备份这样的作业的影响网络的性能


大表带来的问题

什么样的表可以称之为大表,1、当一个表的数据量 记录行数巨大,单表超过千万行,2、表数据文件巨大,表数据文件超过了10G

大表首先会对查询造成一定的影响。慢查询:很难在一定的时间内过滤出所需要的数据,

大表对DDL操作的影响,建立索引需要很长的时间,Mysql版本<5.5建立索引会锁表,Myslq版本>=5.5 虽然不会锁表但会引起主从延迟,mysql的复制机制是在主上执行,然后通过日志复制的方式在从库上执行,所以通常会产生主从延迟,从而也会影响正常的业务。后面会有如何在大表中建立索引

大表对DDL操作的影响 ,修改表结构需要长时间锁表,风险:会造成长时间的主从延迟,就和建立索引一样,目前mysql复制原理,对所有的DDL操作是全是先在主库上执行,在主库上完成之后,再通过日志复制,传递到从库上, 然后再在从库上执行相同的操作,mysql 。

如何处理数据库中的大表,分库分表把一张大表分成多个小表,难点:分表主键的选择,分表后跨分区数据的查询和统计,有一些问题,后端统计和管理使用把分开的表和到一起。另外一种处理大表的方式是 大表的历史数据归档。特别是日志类的大表,订单类的大表,历史数据归档减少对前后端业务的影响,难点:归档时间点的选择,如何进行归档的操作,


大事物带来的问题

什么是事物。1、事物是数据库系统区别于其他一切文件系统的重要特性之一,2、事物是一组具有原子性的sql语句,或是一个独立的工作单元。事物要符合原子性、一致性、隔离性、持久性

事物的原子性,整个事物中的所有操作要么全部提交成功,要么全部失败回滚。

事物的一致性,定义,一致性是指事物将数据库从一种一致性状态转化到另外一种一致性状态,在事物开始之前和事物结束后数据库中数据的完整性没有被破坏。 

事物的隔离性,定义,隔离性要求一个事物对数据库中数据的修改,在未提交完成前对于其他事物是不可见的,sql标准中定义的四种隔离级别,查看隔离级别,show variables like “%iso%”;


1、未提交读 (read uncommited)

2、已提交读(read commited)

3、可重复读(repeatable read)

4、可串行化(serializable)少用

innodb默认是可重复读

事物的持久性,定义,一旦事物提交,则其所做的修改就会永久保存到数据库中,此时即使系统崩溃,已提交的修改数据也不会丢失,不算磁盘损坏的情况下,

什么是大事物,运行时间比较长,操作的数据比较多的事物,比如余额宝,大事物对mysql性能造成的影响,锁定太多的数据,造成大量的阻塞和锁超时,对innodb 事物存储引擎来说,虽然使用的是行级锁,但是在事物中,为了保证事物的一致性,会把所有的相关应用都会加锁,如果所涉及的数据比较多,会把所有的记录全锁住,会产生阻塞,回滚时所需要的时间比较长。执行时间长,容易造成主从延迟,

如何处理大事物,1、避免一次处理太多的数据,2、移除不必要在事物中的select操作。做到以上两点基本上就避免了大事物的产生。

总结

简单的了解了对性能有影响的一些因素


你可能感兴趣的:(MYSQL监控及调优)