携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情
在程序的运行过程中,我们会发现这样的一个现象,程序的响应的时间较长,也就是说程序有卡顿的现象。那么在最开始的时候,程序并不存在这样的现象。那么是什么原因导致的呢?
那么有很大的可能是SQL的性能下降了,SQL性能的下降主要的表现为:执行SQL的时间长;等待sql执行的时间长。这样的情况的出现的原因比较多,主要有俩个,一个是外部原因,如:计算机磁盘空间占用较大,一个是程序内部的原因,如:SQL的索引失效等。那么我们呢一起来看一下内部还有哪一些原因会导致这样的现象。
0 SQL性能分析
影响SQL性能的因素很多,如初始化参数设置不合理、导入了不准确的系统及模式统计数据从而影响优化程序(CBO)的正确判断等,这些往往和DBA密切相关。纯粹从SQL语句出发,笔者认为影响SQL性能不外乎以下四个重要原因:
-
1、查询语句写的烂
-
2、索引失效(数据变更)
-
3、关联查询太多join(设计缺陷或不得已的需求)
-
4、服务器调优及各个参数设置(缓冲、线程数等)
-
5、在大记录集上进行高成本操作,如使用了引起排序的谓词等。
-
6、过多的I/O操作(含物理I/O与逻辑I/O),最典型的就是未建立恰当的索引,导致对查询表进行全表扫描。
-
7、处理了太多的无用记录,如在多表连接时过滤条件位置不当导致中间结果集包含了太多的无用记录。
-
8、未充分利用数据库提供的功能,如查询的并行化处理等。
通常SQL调优过程:
- 观察,至少跑1天,看看生产的慢SQL情况。
- 开启慢查询日志,设置阙值,比如超过5秒钟的就是慢SQL,并将它抓取出来。
- explain + 慢SQL分析。
- show profile。
- 运维经理 or DBA,进行SQL数据库服务器的参数调优。
总结:
- 1、慢查询的开启并捕获
- 2、explain + 慢SQL分析(没索引的先建索引)
- 3、show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况
- 4、SQL数据库服务器的参数调优
数据库的分类
- 关系型数据库:mysq/oracle/db2/informix/sysbase/sql server
- 非关系型数据库:(特点:面向对象或者集合)
- NoSql数据库:MongoDB(特点是面向文档)