<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[连接数太多，MySQL慢查询分析mysqldumpslow，mysql开启慢查询方法。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 24 Nov 2009 08:29:51 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	log-slow-queries=/var/lib/mysql/slowquery.log<br/>long_query_time=2<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;连接数太多，如果是服务器或者数据库负载太高的异常，如果让程序继续，会有逻辑上的处理会有问题的，那得throw一下异常,然后捕获它，这说明数据库的架构需要进一步优化了，在高并发上处理有问题。<br/>一直以来积累了很多对MySQL优化的心得和经验，计划通过写日志的方式一步一步写出来分享给大家。<br/><br/>MySQL优化的第一步应该做的就是排查问题，找出瓶颈，而通常情况下的瓶颈和问题都需要通过观察MySQL的运行情况来进行分析，《查看MySQL运行状况》这篇文章罗列了一些常用的查看MySQL运行信息的方式。<br/><br/>而对于大多数的程序员来说，最容易发现并解决的问题就是MySQL的慢查询或者没有利用索引的查询，所以这里主要给大家介绍如何利用官方的mysqldumpslow工具方便的查看这些信息。如何打开MySQL的慢查询，请点击《打开MySQL的慢查询记录》。<br/><br/>mysql slow log 是用来记录执行时间较长(超过long_query_time秒)的sql的一种日志工具.<br/>启用 slow log<br/>有两种启用方式:<br/>1, 在my.cnf 里 通过 log-slow-queries[=file_name]<br/>2, 在mysqld进程启动时,指定--log-slow-queries[=file_name]选项<br/><br/>mysqldumpslow命令<br/>/usr/local/mysql/bin/mysqldumpslow -s c -t 10 /database/mysql/slow-log<br/>这会输出记录次数最多的10条SQL语句，其中：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* -s, 是表示按照何种方式排序，c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序，ac、at、al、ar，表示相应的倒叙；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* -t, 是top n的意思，即为返回前面多少条的数据；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* -g, 后边可以写一个正则匹配模式，大小写不敏感的；<br/><br/>比如<br/>/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log<br/>得到返回记录集最多的10个查询。<br/>/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log<br/>得到按照时间排序的前10条里面含有左连接的查询语句。<br/><br/>小结<br/>使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句，对MySQL查询语句的监控、分析、优化是MySQL优化的第一步，也是非常重要的一步。<br/><br/><br/>————————————————————————————————————<br/>mysql开启慢查询方法：<br/>1，配置开启<br/><br/>Linux:<br/><br/>在mysql配置文件my.cnf中增加<br/><br/>log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置，可以为空，系统会给一个缺省的文件host_name-slow.log)<br/>long_query_time=2 (记录超过的时间，默认为10s)<br/>log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)<br/>log-long-format (如果设置了，所有没有使用索引的查询也将被记录)<br/><br/>Windows:<br/><br/>在my.ini的[mysqld]添加如下语句：<br/>log-slow-queries = E:&#92;web&#92;mysql&#92;log&#92;mysqlslowquery.log<br/>long_query_time = 2(其他参数如上)<br/><br/> <br/><br/>2,查看方式<br/><br/>Linux:<br/><br/>使用mysql自带命令mysqldumpslow查看<br/><br/>常用命令<br/>-s ORDER what to sort by (t, at, l, al, r, ar etc), &#039;at’ is default<br/>-t NUM just show the top n queries<br/>-g PATTERN grep: only consider stmts that include this string<br/><br/>eg:<br/>s，是order的顺序，说明写的不够详细，俺用下来，包括看了代码，主要有 c,t,l,r和ac,at,al,ar，分别是按照query次数，时间，lock的时间和返回的记录数来排序，前面加了a的时倒序 -t，是top n的意思，即为返回前面多少条的数据 -g，后边可以写一个正则匹配模式，大小写不敏感的<br/><br/>mysqldumpslow -s c -t 20 host-slow.log<br/>mysqldumpslow -s r -t 20 host-slow.log<br/>上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。<br/><br/>mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。<br/><br/> <br/><br/> <br/><br/> <br/><br/> <br/><br/> <br/><br/> <br/><br/>mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢?<br/>其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上如下代码：<br/><br/>log-slow-queries=/var/lib/mysql/slowquery.log<br/>long_query_time=2<br/><br/><br/>注:<br/>log-slow-queries 设置把日志写在那里，为空的时候，系统会给慢查询日志赋予主机名，并被附加slow.log. /var/lib/mysql/slowquery.log为日志存放的文件的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录<br/><br/>long_query_time=2中的2表示查询超过两秒才记录.<br/><br/>如果设置了参数log-long-format，那么所有没有使用索引的查询也将被记录。在文件my.cnf或my.ini中加入下面这一行可以记录这些查询<br/><br/>这是一个有用的日志。它对于性能的影响不大（假设所有查询都很快），并且强调了那些最需要注意的查询（丢失了索引或索引没有得到最佳应用）<br/><br/># Time: 070927 8:08:52<br/><br/># User@Host: root[root] @ [192.168.0.20]<br/><br/># Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630<br/>select id, name from manager where id in (66,10135);<br/>这是慢查询日志中的一条，用了372秒，锁了136秒，返回152行，一共查了263630行<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;如果日志内容很多，用眼睛一条一条去看会累死，mysql自带了分析的工具，使用方法如下：<br/>命令行下，进入mysql/bin目录，输入mysqldumpslow –help或--help可以看到这个工具的参数，主要有<br/>Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]<br/><br/>Parse and summarize the MySQL slow query log. Options are<br/><br/>--verbose&nbsp;&nbsp;&nbsp;&nbsp;verbose<br/><br/>--debug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug<br/><br/>--help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write this text to standard output<br/><br/>-v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verbose<br/><br/>-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug<br/><br/>-s ORDER&nbsp;&nbsp;&nbsp;&nbsp; what to sort by (t, at, l, al, r, ar etc), &#039;at&#039; is default<br/><br/>-r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reverse the sort order (largest last instead of first)<br/><br/>-t NUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; just show the top n queries<br/><br/>-a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; don&#039;t abstract all numbers to N and strings to &#039;S&#039;<br/><br/>-n NUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstract numbers with at least n digits within names<br/><br/>-g PATTERN&nbsp;&nbsp; grep: only consider stmts that include this string<br/><br/>-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default is &#039;*&#039;, i.e. match all<br/><br/>-i NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name of server instance (if using mysql.server startup scrīpt)<br/><br/>-l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; don&#039;t subtract lock time from total time<br/><br/>-s，是order的顺序，说明写的不够详细，俺用下来，包括看了代码，主要有 <br/>c,t,l,r和ac,at,al,ar，分别是按照query次数，时间，lock的时间和返回的记录数来排序，前面加了a的时倒叙 <br/>-t，是top n的意思，即为返回前面多少条的数据 <br/>-g，后边可以写一个正则匹配模式，大小写不敏感的 <br/><br/>mysqldumpslow -s c -t 20 host-slow.log <br/>mysqldumpslow -s r -t 20 host-slow.log <br/><br/>上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。 <br/>mysqldumpslow -t 10 -s t -g “left join” host-slow.log <br/>这个是按照时间返回前10条里面含有左连接的sql语句。<br/><br/><br/><br/>Windows:<br/><br/>当你是第一次开启mysql的慢查询，会在你指定的目录下创建这个记录文件，本文就是mysqlslowquery.log，这个文件的内容大致如下(第一次开启MYSQL慢查询的情况下)<br/>E:&#92;web&#92;mysql&#92;bin&#92;mysqld, Version: 5.4.3-beta-community-log (MySQL Community Server (GPL)). started with:<br/>TCP Port: 3306, Named Pipe: (null)<br/>Time Id Command Argument<br/><br/>可以通过如下的命令来查看慢查询的记录数：<br/><br/>mysql&gt; show global status like ‘%slow%’;<br/>+———————+——-+<br/>&#124; Variable_name &#124; Value &#124;<br/>+———————+——-+<br/>&#124; Slow_launch_threads &#124; 0 &#124;<br/>&#124; Slow_queries &#124; 0 &#124;<br/>+———————+——-+<br/><br/>来自：http://www.cnblogs.com/lavandachen/articles/1929537.html
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 连接数太多，MySQL慢查询分析mysqldumpslow，mysql开启慢查询方法。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>