概念
MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。
具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。
long_query_time的默认值为10,意思是记录运行10秒以上的语句。
默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件和数据库表。
参数配置
- slow_query_log:
OFF:表示慢查询日志是禁用的
1:表示慢查询日志是开启 - slow_query_log_file :慢日志保存的目录
- long_query_time:慢日志的设置超时的时间
- log_output:参数指定日志的存储方式。
- log-queries-not-using-indexes : 该系统变量指定未使用索引的查询也被记录到慢查询日志中(可选项)。
- log_slow_admin_statements:这个系统变量表示,是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记入慢查询日志。
- Slow_queries: 如果你想查询有多少条慢查询记录,可以使用Slow_queries系统变量。
分析慢日志的工具:
- mysqldumpslow工具
在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活。
MySQL提供了日志分析工具mysqldumpslow
查看mysqldumpslow的帮助信息:
查询慢原因分析:
- 主要原因1:后台数据库中的数据过多,没做数据优化导致后台查询数据很慢-
- 次要原因2:前端数据请求-解析-展示过程处理不当
- 次要原因3:网络问题所致
方案:
1、缓存,在持久层或持久层之上做缓存
2、数据库表的大字段剥离
3、恰当地使用索引
4、表的拆分
5、字段冗余
6、从磁盘上做文章
7、放弃关系数据库的某些特性,引入NoSQL数据库;