任务: 生产库慢查询日志, 显示有1个查询 耗时3s 以上. 需要解决.
- 1. 了解mysql慢查询
mysql 慢查询功能,可以检测到所有数据库操作记录,当操作时间>设定的时间时,将记录操作sql语句等信息.保存到文件中.
1.1 开启服务
mysql> show variables like '%slow%'; +---------------------+---------------------------------+ | Variable_name | Value | +---------------------+---------------------------------+ | log_slow_queries | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /var/run/mysqld/mysqld-slow.log | +---------------------+---------------------------------+ 4 rows in set (0.00 sec)
off,表示关闭, 开启(global必须)
mysql> set global log_slow_queries=1; Query OK, 0 rows affected, 1 warning (0.15 sec)
开启后, slow_query_log 自动为on.
1.2 设置慢查询时间间隔
显示变量
mysql> show variables like '%long%'; +--------------------+-----------+ | Variable_name | Value | +--------------------+-----------+ | long_query_time | 10.000000 | | max_long_data_size | 1048576 | +--------------------+-----------+
设置为慢查询阈值为2s.
mysql> set global long_query_time=2; Query OK, 0 rows affected (0.00 sec)
此处需注意,
1). 必须使用global, 否则只是当前会话值.
2). 设置成功后,需重新建立连接, web应用的话,需重启. --此处在实践中,困扰较长时间,设置后,在web应用调用并不能记录. 原因在此.
1.3 慢查询日志
# Time: 130812 18:43:52 # User@Host: epl[epl] @ [192.168.1.73] # Query_time: 4.644414 Lock_time: 0.000250 Rows_sent: 0 Rows_examined: 1226476 SET timestamp=1376333032; select distinct a.id as id , .................
其中, Query_time: 4.644414. 说明此查询的时间为4.6 以上.
- 2. mysql 分析工具使用
2.1 explain使用
explain +sql. 可以分析此sql执行的顺序, 使用索引, 扫描表数据等情况.
具体可搜索相关资料, explain结果,都能对优化有重要参考作用.如 select type, type, extra...
如:http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY b index idx_content_lang idx_content_lang 5 3340 Using where; Using index; Using temporary; Using filesort 1 PRIMARY a eq_ref PRIMARY PRIMARY 4 slow_test.b.contentId 1 Using where 3 DEPENDENT SUBQUERY p ALL PRIMARY 1681 Using where; Using temporary 3 DEPENDENT SUBQUERY pc eq_ref idx_product_content idx_product_content 8 slow_test.p.id,func 1 Using where 2 DEPENDENT SUBQUERY pc eq_ref idx_product_content idx_product_content 8 const,slow_test.a.id 1 Using index
从中,有几点重要信息.
type, 可看到id=3 ,table=p,的type=ALL, 表示全表扫描. 从sql中,查询p的语句如下:
and a.id in( select distinct pc.contentId from product_content pc,ssports.product p where pc.productId=p.id and p.state='reviewed' and p.status = 0 and pc.status = 0 )
以上使用了子查询. (关于mysql 子查询效率问题可以单独google).
子查询使用了临时表(Extra 信息中的 Using temporary).
而查看表结构, contentId在表p 中并未加索引.
- 3. 解决办法
contentId 添加索引.
经测试, 查询在0.1s之内.
问题初步解决.
另 也尝试了profile. 但遇到了疑惑的问题. 下次再分享.
- 4. 问题总结
之前没有做过sql 方面的优化, 经过一天的查资料学习. 最终解决了问题. 体验到作为程序员的成就感. 但mysql 的优化涉及的面还是很广的.
这篇文章只是myslq 优化的冰山一角.
google下 mysql优化,有太多的好文章. 需慢慢学习ing.
如下: http://www.oicto.com/mysql-explain-show/
相关推荐
总结来说,MySQL 慢查询页面工具 Query-Digest-UI 是一个基于 Percona Toolkit 的图形化监控解决方案,它帮助管理员可视化 MySQL 的慢查询日志,从而更有效地进行性能调优。通过安装和配置该工具,你可以实时监控...
通过合理配置和使用MySQL慢查询日志及其相关的分析工具,可以有效地定位和解决数据库性能问题,提高系统的整体性能和稳定性。需要注意的是,在生产环境中使用慢查询日志时,应根据实际情况适度调整相关参数,避免因...
本教程将探讨如何解决MySQL大数据量下LIKE查询慢的问题,并介绍一种JAVA模拟LIKE的方法来提升查询效率。 首先,我们需要理解LIKE查询的工作原理。当使用LIKE查询时,如果模式以%开头或结尾,MySQL无法利用索引来...
MySQL单表2000万数据查询慢解决方案1 本文主要讨论了如何解决MySQL单表2000万数据查询慢的问题,通过将表分区和使用时间触发器来实现数据的优化。 分区设计 在解决方案中,我们使用的是按照8周将单表分为8个区,...
MySQL的慢查询日志是数据库...总的来说,Anemometer作为MySQL慢查询工具,提供了一种有效监控和诊断数据库性能的方式。通过深入理解和充分利用这个工具,数据库管理员能够及时发现并解决性能问题,提升系统的整体效率。
Linux MySQL 访问慢解决方案 MySQL 是一个功能强大且广泛使用的关系数据库管理系统,对于 Linux 操作系统尤其重要。本文将解决 Linux 上 MySQL 访问慢的问题,提供详细的解决方案和配置方法。 问题描述 MySQL 访问...
### MySQL慢查询相关知识 #### 一、概览 MySQL慢查询是指那些执行时间超过预设阈值的SQL语句。这些慢查询不仅会降低数据库性能,还可能导致用户体验下降。因此,了解如何诊断和优化慢查询是每个DBA或开发人员必备...
通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。非常急人,有没有办法可以解决局域网内mysql数据库连接慢呢?下面小编带领大家来解决此问题,感兴趣的朋友一起看看吧
这篇博文可能详细介绍了如何诊断和解决MySQL中的慢查询问题,而`sql.txt`文件很可能包含了一些示例SQL语句或者慢查询日志。 慢查询通常是由于不恰当的索引使用、过度的数据扫描、复杂的查询逻辑或是资源争抢等原因...
### MySQL慢查询详解 #### 一、什么是慢查询 慢查询是MySQL中一种重要的性能调试手段,主要用于记录那些执行时间过长的SQL语句。慢查询日志可以帮助我们找到那些性能不佳的SQL语句,从而对其进行优化。默认情况下...
- 开启慢查询日志的方法有两种:一种是在MySQL配置文件`my.cnf`或`my.ini`中添加相关参数;另一种是通过命令行动态设置。 配置示例: ```ini [mysqld] log-slow-queries = /data/mysqldata/slow-query.log ...
MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的...通过合理的索引设计、查询优化以及对磁盘IO的理解,可以有效避免和解决慢查询问题,从而让MySQL在各种应用场景中发挥出最佳性能。
"cpp-Slowquery图形化显示MySQL慢日志工具" 指的是一款基于C++语言开发的工具,名为Slowquery,它的主要功能是解析并以图形化方式展示MySQL数据库的慢查询日志。这个工具帮助数据库管理员更直观地理解和分析MySQL...
在深入探讨解决远程连接MySQL速度慢的问题之前,我们首先需要了解MySQL数据库服务器在解析域名时的一般流程。MySQL在处理远程连接时,会尝试将提供的主机名解析为IP地址,这一过程通常涉及DNS(域名系统)查询。这个...
总的来说,通过对MySQL慢查询日志的有效利用和参数配置,我们可以更好地监控数据库性能,及时发现并解决潜在的性能问题。这不仅可以提高数据库的响应速度,还能降低系统的资源消耗,提升整体服务的质量。
### MySQL慢查询日志的作用与使用详解 #### 一、慢查询日志概述 在MySQL数据库管理中,慢查询日志是一项重要的诊断工具,它能够帮助数据库管理员和开发者识别并解决那些执行时间过长的SQL语句所带来的性能问题。...
以下是关于如何开启、查看和分析MySQL慢查询日志的详细说明: 首先,要在MySQL中启用慢查询日志,你需要编辑MySQL配置文件。在Windows系统中,该文件通常是`my.ini`,而在Linux系统中则是`my.cnf`。在`[mysqld]`...
MySQL的慢查询功能是数据库性能调优的重要工具,它能够帮助数据库管理员识别并解决执行效率低下的SQL语句,从而提升整个系统的响应速度和资源利用效率。以下将详细阐述慢查询的相关知识点及其开启方法。 **1. 慢...
MySQL查询分析器是一种...总之,MySQL查询分析器,尤其是SQLYog Enterprise绿色版,是一个全面的数据库管理解决方案,无论你是初学者还是经验丰富的开发者,都能从中受益,提高工作效率,更好地管理和维护MySQL数据库。