加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

通过MySQL慢查询优化MySQL性能的方式讲解

发布时间:2022-03-01 19:33:39 所属栏目:MySql教程 来源:互联网
导读:随着访问量的上升,MySQL数据库的压力就越大,几乎大部分使用MySQL架构的web应用在数据库上都会出现性能问题,通过mysql慢查询日志跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句。 通过MySQL慢查询优化MySQL性能的方法讲解 慢查询日
       随着访问量的上升,MySQL数据库的压力就越大,几乎大部分使用MySQL架构的web应用在数据库上都会出现性能问题,通过mysql慢查询日志跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句。
 
      通过MySQL慢查询优化MySQL性能的方法讲解
 
      慢查询日志我们可以通过my.cnf文件设置开启,下面先来看一下相关参数的意义
  
       log-slow-queries <slow_query_log_file>
 
      存放slow query日志的文件。你必须保证mysql server进程mysqld_safe进程用户对该文件有w权限。
  
方法一:在服务器上找到mysql的配置文件my.cnf , 然后再mysqld模块里追加一下内容
 
log_slow_queries = NO
log-slow-queries = /var/run/mysqld/slow_querys.log
long_query_time = 3
log-queries-not-using-indexes
log-slow-admin-statements
然后重启mysql服务器即可,这是通过一下命令看一下慢查询日志的情况:
 
tail -f /var/run/mysqld/slow_querys.log
方法二:通过修改myssql的全局变量来处理,这样做的好处是,不用重启mysql服务器,登陆到mysql上执行一下sql脚本即可
 
set global slow_query_log=ON;
 
set global long_query_time=3;
然后通过一下命令查看是否成功
 
mysql> show variables like 'long%';
+-----------------+-----------+
| Variable_name | Value   |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
 
mysql> show variables like 'slow%';
+---------------------+---------------+
| Variable_name   | Value     |
+---------------------+---------------+
| slow_launch_time  | 2       |
| slow_query_log   | ON      |
| slow_query_log_file | /tmp/slow.log |
+---------------------+---------------+
3 rows in set (0.00 sec)
分析慢查询日志
 
方法一:通过查看mysql的慢查询日志分析,比如我们可以tail -f slow_query.log查看里面的内容,字段意义
 
# Time: 110107 16:22:11
# User@Host: root[root] @ localhost []
# Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774
SET timestamp=1294388531;
select count(*) from ep_friends;
第一行,SQL查询执行的时间
第二行,执行SQL查询的连接信息
第三行记录了一些我们比较有用的信息
Query_time SQL执行的时间,越长则越慢
Lock_time 在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
Rows_sent 查询返回的行数
Rows_examined 查询检查的行数
方法二:使用mysqldumpslow命令分析,例如
 
mysqldumpslow -s c -t 10 /tmp/slow-log
这会输出记录次数最多的10条SQL语句,其中:
 
-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙; -t, 是top n的意思,即为返回前面多少条的数据; -g, 后边可以写一个正则匹配模式,大小写不敏感的;
 
比如
 
/path/mysqldumpslow -s r -t 10 /tmp/slow-log
 
得到返回记录集最多的10个查询。
 
/path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log
 
得到按照时间排序的前10条里面含有左连接的查询语句。
 
慢查询日志的不足
 
虽然记录了slow query能够帮助你优化产品。但是MySQL目前版本,还有几大蹩足的地方。
 
1.MySQL5.0版本, long_query_time时间粒度不够细,最小值为1秒。对于高并发性能的网页脚本而言,1秒出现的意义不大。即出现1秒的查询比较少。直到mysql5.1.21才提供更细粒度的long_query_time设定.
 
2.不能将服务器执行的所有查询记录到慢速日志中。虽然MySQL普通日志记录了所有查询,但是它们是解析查询之前就记录下来了。这意味着普通日志没办法包含诸如执行时间,锁表时间,检查行数等信息。
通过MySQL慢查询优化MySQL性能的方式讲解

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!