定位慢sql
分析慢sql
常规优化
1.为什么需要优化
高并发读写 集群
海量数据读写 分库分表
高扩展性和可用性 就是集群
单点故障
添加服务器
2.对数据库性能影响的因素
不合理的需求,一个论坛帖子的总数量,附加要求,实时更新
数据库设计对性能影响
模糊查询效率低,基于es
热点数据高配查询
多余的数据库交互,重复的sql
等等
sql编写不合理对性能影响
太多表join
sql太复杂
不合理的查询结果
其他方面
硬件和网络环境
3.关系型数据库的优化技术
发现问题
分析问题
解决问题
mysql可以集群,oracle不能集群,大小公司用mysql,oracle用中型公司。
4.mysql执行原理
5.找出慢sql
所以的sql都是由mysql执行,都会记录下来,方便用户查找定位。
开启慢sql的时机? 如何找到慢sql?
在测试的时候开启/项目上线初期开启一段时间
修改配置文件:
添加慢查询的阈值
开启慢查询日志文件的记录
设置慢查询日志文件路径
重启mysql
到时候,再执行sql的时候,如果执行时间超过设置的阈值,就会将该sql记录到日志文件中
5.1查询数据库状态
--crud执行次数
当前框查询次数,本次会话
和全局查询次数
mysql 2000个请求并发过来,性能就要有问题,可以通过最大链接指令,查看当前连接数是多少,那就设置my.ini中的最大连接数值。
5.2 如何查询慢sql
show status like ‘slow_queryies’
默认你慢查询阈值是10s,修改时间阈值,修改慢查询阈值。set long_quer_time = 1
通过命名设置阈值,只在本次会话有效
直接修改global,当前效果是没有效果,要新打开窗口有效的。
还可以通过my.ini配置文件进行配置阈值,一次设置,任何数据库都有效。还要开启慢sql日志,配置日志路径,最后还要重启mysql服务器
开启慢查询的时机:
添加慢sql,性能会变低,什么时候开启慢查询,所以不能一直开启慢查询。
要不然在测试的时候,开启慢查询,要把所有的功能跑一遍。或者是在项目上线的时候,短暂开启一段时间慢查询,在这段时间内,让测试人员把所有功能都执行一遍。
分析慢sql
explain 分析sql 通过type来看有没有用索引,主要看有没有加索引,或者看它使用哪个索引。
分析详细执行过程
可以查看当前一段时间内执行过的sql,查询query id
show profiles
show profile for query sql 的id
sql优化
选择合适引擎
小表驱动大表
三范式,反三范式
规范化的数据库设计通常会导致大量的连接操作,这在大型数据库中可能会降低查询性能。
反三范式可以通过预先计算和存储聚合数据或重复数据来减少查询时的连接操作,从而提高查询速度。
通过禁用索引来提供导入数据性能 。 这个操作主要针对有数据库的表,追加数据
索引注意事项