`
qdpurple
  • 浏览: 276118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 慢查询解决之路

阅读更多

任务: 生产库慢查询日志, 显示有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/

 

2
5
分享到:
评论
1 楼 lvwenwen 2013-08-22  
google下 mysql优化,有太多的好文章

相关推荐

    mysql 慢查询页面工具

    总结来说,MySQL 慢查询页面工具 Query-Digest-UI 是一个基于 Percona Toolkit 的图形化监控解决方案,它帮助管理员可视化 MySQL 的慢查询日志,从而更有效地进行性能调优。通过安装和配置该工具,你可以实时监控...

    mysql慢查询日志的使用

    通过合理配置和使用MySQL慢查询日志及其相关的分析工具,可以有效地定位和解决数据库性能问题,提高系统的整体性能和稳定性。需要注意的是,在生产环境中使用慢查询日志时,应根据实际情况适度调整相关参数,避免因...

    解决MySql大数据Like查询慢的问题

    本教程将探讨如何解决MySQL大数据量下LIKE查询慢的问题,并介绍一种JAVA模拟LIKE的方法来提升查询效率。 首先,我们需要理解LIKE查询的工作原理。当使用LIKE查询时,如果模式以%开头或结尾,MySQL无法利用索引来...

    45-MySQL单表2000万数据查询慢解决方案1

    MySQL单表2000万数据查询慢解决方案1 本文主要讨论了如何解决MySQL单表2000万数据查询慢的问题,通过将表分区和使用时间触发器来实现数据的优化。 分区设计 在解决方案中,我们使用的是按照8周将单表分为8个区,...

    mysql慢查询工具Anemometer

    MySQL的慢查询日志是数据库...总的来说,Anemometer作为MySQL慢查询工具,提供了一种有效监控和诊断数据库性能的方式。通过深入理解和充分利用这个工具,数据库管理员能够及时发现并解决性能问题,提升系统的整体效率。

    Linux mysql访问慢

    Linux MySQL 访问慢解决方案 MySQL 是一个功能强大且广泛使用的关系数据库管理系统,对于 Linux 操作系统尤其重要。本文将解决 Linux 上 MySQL 访问慢的问题,提供详细的解决方案和配置方法。 问题描述 MySQL 访问...

    MySQL慢查询相关知识

    ### MySQL慢查询相关知识 #### 一、概览 MySQL慢查询是指那些执行时间超过预设阈值的SQL语句。这些慢查询不仅会降低数据库性能,还可能导致用户体验下降。因此,了解如何诊断和优化慢查询是每个DBA或开发人员必备...

    如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。非常急人,有没有办法可以解决局域网内mysql数据库连接慢呢?下面小编带领大家来解决此问题,感兴趣的朋友一起看看吧

    二、mysql优化技术-定位慢查询

    这篇博文可能详细介绍了如何诊断和解决MySQL中的慢查询问题,而`sql.txt`文件很可能包含了一些示例SQL语句或者慢查询日志。 慢查询通常是由于不恰当的索引使用、过度的数据扫描、复杂的查询逻辑或是资源争抢等原因...

    mysql 慢查询

    ### MySQL慢查询详解 #### 一、什么是慢查询 慢查询是MySQL中一种重要的性能调试手段,主要用于记录那些执行时间过长的SQL语句。慢查询日志可以帮助我们找到那些性能不佳的SQL语句,从而对其进行优化。默认情况下...

    mysql性能优化-慢查询分析、优化索引和配置.doc

    - 开启慢查询日志的方法有两种:一种是在MySQL配置文件`my.cnf`或`my.ini`中添加相关参数;另一种是通过命令行动态设置。 配置示例: ```ini [mysqld] log-slow-queries = /data/mysqldata/slow-query.log ...

    MySQL索引原理及慢查询优化1

    MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的...通过合理的索引设计、查询优化以及对磁盘IO的理解,可以有效避免和解决慢查询问题,从而让MySQL在各种应用场景中发挥出最佳性能。

    cpp-Slowquery图形化显示MySQL慢日志工具

    "cpp-Slowquery图形化显示MySQL慢日志工具" 指的是一款基于C++语言开发的工具,名为Slowquery,它的主要功能是解析并以图形化方式展示MySQL数据库的慢查询日志。这个工具帮助数据库管理员更直观地理解和分析MySQL...

    远程连接MySQL速度慢的解决方法以及MySQL解析DNS的流程图[附PDF下载]

    在深入探讨解决远程连接MySQL速度慢的问题之前,我们首先需要了解MySQL数据库服务器在解析域名时的一般流程。MySQL在处理远程连接时,会尝试将提供的主机名解析为IP地址,这一过程通常涉及DNS(域名系统)查询。这个...

    Mysql慢查询日志

    总的来说,通过对MySQL慢查询日志的有效利用和参数配置,我们可以更好地监控数据库性能,及时发现并解决潜在的性能问题。这不仅可以提高数据库的响应速度,还能降低系统的资源消耗,提升整体服务的质量。

    (mysql面试题)MySQL中的慢查询日志的作用及其使用方法及代码展示.txt

    ### MySQL慢查询日志的作用与使用详解 #### 一、慢查询日志概述 在MySQL数据库管理中,慢查询日志是一项重要的诊断工具,它能够帮助数据库管理员和开发者识别并解决那些执行时间过长的SQL语句所带来的性能问题。...

    mysql开启查看慢查询日志借鉴.pdf

    以下是关于如何开启、查看和分析MySQL慢查询日志的详细说明: 首先,要在MySQL中启用慢查询日志,你需要编辑MySQL配置文件。在Windows系统中,该文件通常是`my.ini`,而在Linux系统中则是`my.cnf`。在`[mysqld]`...

    Mysql开启慢查询

    MySQL的慢查询功能是数据库性能调优的重要工具,它能够帮助数据库管理员识别并解决执行效率低下的SQL语句,从而提升整个系统的响应速度和资源利用效率。以下将详细阐述慢查询的相关知识点及其开启方法。 **1. 慢...

    mysql查询分析器

    MySQL查询分析器是一种...总之,MySQL查询分析器,尤其是SQLYog Enterprise绿色版,是一个全面的数据库管理解决方案,无论你是初学者还是经验丰富的开发者,都能从中受益,提高工作效率,更好地管理和维护MySQL数据库。

Global site tag (gtag.js) - Google Analytics