影响数据库性能的因素:
超高的 QPS 和 TPS
QPS<=100
;假设数据库处理一条 SQL 需要 100ms,那么 1s 就可以处理 10 条 SQL,那么我们说它 QPS<=10
。数据库连接被占满
数据库的连接数必然是有限的,在 MySQL 中,我们可以通过 max_connections 来设置数据库的连接数(这个值默认是 100,生产环境下这个值可以适当调大)。慢 SQL 由于处理时间较长,因此占用数据库连接的时间也较长,在高并发环境下这样就容易导致数据库连接被占满。
超高的 CPU 使用率
慢 SQL 还会导致超高的 CPU 使用率,超高的 CPU 使用率会导致 CPU 资源耗尽进而出现宕机。
这个应该好理解,不需要我多说吧。
服务器的硬件如 CPU、内存、磁盘 IO 等都会影响到 MySQL 性能,操作系统也会影响到 MySQL 性能
网卡 IO 被占满了一样也是没法操作数据库。
select *
,不仅浪费时间,还浪费网络流量。磁盘 IO 对数据库性能的影响也是显而易见的,因为数据库无论怎么管理数据,最终都是要存入到硬盘中的,所以磁盘 IO 对数据库的影响也就非常重要了。但是这个问题的解决,就只能使用更好更快的磁盘设备,例如 SSD。
一些运行时间比较长,涉及到数据比较多的事务,我们可以称之为大事务。大事务会锁定很多条数据进行处理,这样就容易造成大量的阻塞和锁超时,并且一旦出错发生回滚,回滚所需要的时间也会比较长,而且在回滚期间数据依然处于被锁的状态。
由于大事务耗时较长,需要等到主库事务执行完毕后,将操作日志写入 binlog,然后从库读取 binlog 进行同步,这样势必会导致主从延迟。
解决大事务,两个思路:
使用 MySQL 我们可以选择不同的存储引擎,不同的存储引擎特点不同,最终对数据库的影响也不同。
MyISAM 不支持事务,而且是表级锁;InnoDB 是事务级存储引擎,支持行级锁,也支持事务的 ACID 特性。
原文:https://www.cnblogs.com/KL2016/p/15124087.html