当数据库查询速度过慢时,从哪几个方面排查解决?

影响数据库查询速度的四个因素
当数据库查询速度过慢时,从哪几个方面排查解决?_第1张图片

风险分析

QPS(Queries Per Second):每秒查询率,是指一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS(TransactionsPerSecond):事务数/秒,它是软件测试结果的测量单位。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

效率低下的SQL语句会带来超高的QPS与TPS:

  • 大量的并发:数据连接数被占满(max_connection默认100,一般把连接数设置得大一些)。并发量:同一时刻数据库服务器处理的请求数量。
  • 超高的CPU使用率:CPU资源耗尽会出现宕机。
  • 磁盘IO性能下降:大量消耗磁盘性能的计划任务。解决:更换磁盘设备、调整计划任务、做好磁盘维护。

网卡流量

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

  • 减少从服务器的数量(从服务器会从主服务器复制日志)
  • 进行分级缓存(避免前端大量缓存失效)
  • 避免使用select * 进行查询
  • 分离业务网络和服务器网络

磁盘IO

大表中记录行数巨大,单表超千万,表数据文件巨大,超过10个G。

大表带来的问题:

  • 很难在短时间内过滤出需要的数据
  • 修改表结构需要长时间的锁表,会造成长时间的主从延迟(‘480秒延迟’)

解决方法:
把一张大表分成多个小表。

服务器硬件

MySQL体系结构分三层:客户端、服务层、存储引擎。
当数据库查询速度过慢时,从哪几个方面排查解决?_第2张图片
MySQL是插件式的存储引擎,不同的存储引擎,只要符合mysql存储引擎的接口就可以使用,甚至可以开发自己的存储引擎。

MySQL的存储引擎是针对表的,不是针对库的。也就是说在一个数据库中可以使用不同的存储引擎,但是一般不建议这样做。

MySQL5.5及之后版本默认的是InnoDB存储引擎。

InnoDB存储引擎的特性

特性一:支持事务和外键

支持事务所需要的两个特殊日志类型:Redo Log 和Undo Log。

  • Undo日志记录某数据被修改前的值,可以用来在事务失败时进行rollback。实现事务的持久性(已提交的事务)。
  • Redo日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据。未提交的事务,独立于表空间,需要随机访问,可以存储在高性能io设备上。

特性二:支持行级锁

行级锁可以最大程度地支持并发。
锁的主要作用是管理共享资源的并发访问,用于实现事务的隔离性。

性能优化顺序

SQL语句优化–>数据库结构优化–>文件系统优化,提高磁盘读写效率–>服务器硬件升级

你可能感兴趣的:(MySQL,mysql,数据库,sql)