<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LinuxSEE</title>
	<atom:link href="http://www.linuxsee.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxsee.com</link>
	<description>LinuxSEE</description>
	<lastBuildDate>Sun, 20 May 2012 15:29:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>linux下find命令根据系统时间查找文件用法</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8bfind%e5%91%bd%e4%bb%a4%e6%a0%b9%e6%8d%ae%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4%e6%9f%a5%e6%89%be%e6%96%87%e4%bb%b6%e7%94%a8%e6%b3%95.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8bfind%e5%91%bd%e4%bb%a4%e6%a0%b9%e6%8d%ae%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4%e6%9f%a5%e6%89%be%e6%96%87%e4%bb%b6%e7%94%a8%e6%b3%95.html#comments</comments>
		<pubDate>Fri, 18 May 2012 08:20:21 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[xargs]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=389</guid>
		<description><![CDATA[find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括 mtime 文件内容上次修改时间 atime 文件被读取或访问的时间 ctime 文件状态变化时间 mtime 和 atime 的含义都是很容易理解的，而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据，因此，如果与文件有关的元数据发生变化，则 inode 数据也将变化。这可能是由一系列操作引起的，包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下，文件内容不会被读取或修改，因此 mtime 和 atime 不会改变，但 ctime 将发生变化。 这些时间选项都需要与一个值 n 结合使用，指定为 -n、n 或 +n。 N * 24 +1 表示 1 * 24 +24小时以外.. +0 表示 0 * 24 +24小时以外 1 表示 1 * 24 + 24 到 24 之间.. [...]]]></description>
			<content:encoded><![CDATA[<p><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/find" title="查看 find 的全部文章" target="_blank">find</a></span> 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括</p>
<pre>mtime		文件内容上次修改时间
atime		文件被读取或访问的时间
ctime		文件状态变化时间</pre>
<p>mtime 和 atime 的含义都是很容易理解的，而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据，因此，如果与文件有关的元数据发生变化，则 inode 数据也将变化。这可能是由一系列操作引起的，包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下，文件内容不会被读取或修改，因此 mtime 和 atime 不会改变，但 ctime 将发生变化。</p>
<p>这些时间选项都需要与一个值 n 结合使用，指定为 -n、n 或 +n。</p>
<pre>N * 24
+1	表示	1 * 24 +24小时以外..
+0	表示	0 * 24 +24小时以外
1	表示	1 * 24 + 24 到 24 之间..
0	表示	0 * 24 + 24 到 0 之间..
-1	表示	0 * 24 +24 内,甚至为未来时间...</pre>
<p>1.当前时间24小时—当前时间（昨天-今天）<br />
#<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/find" title="查看 find 的全部文章" target="_blank">find</a></span> . -mtime 0<br />
2.当前时间48小时前–当前时间24小时前(前天-昨天)<br />
#find . -mtime 1<br />
3.当前时间48小时前（2天前）<br />
#find . -mtime +1<br />
4.当前时间24小时–当前时间（昨天-今天）<br />
#find . -mtime -1</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><span id="more-389"></span></p>
<div>HC(6160127)  15:44:37<br />
find ./ -name &#8221;a*&#8221;|<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/xargs" title="查看 xargs 的全部文章" target="_blank">xargs</a></span> -i  cp {}  ../bb/ -rf<br />
{}是源文件<br />
HC(6160127)  15:45:19<br />
-i 表示 find 传递给<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/xargs" title="查看 xargs 的全部文章" target="_blank">xargs</a></span>的结果 由{}来代替<br />
白开水(729314750)  15:45:37<br />
也可以用-exec<br />
白开水(729314750)  15:45:55<br />
find  ./ -name &#8221;a*&#8221; -exec cp {} ../bb<br />
雨尚(107528031)  16:08:52<br />
for((i=1;i&lt;=29;i++))<br />
do<br />
find . -mtime $i |<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/xargs" title="查看 xargs 的全部文章" target="_blank">xargs</a></span> -i  cp -ri {} /opt/20120418/<br />
done<br />
查找从4.18到5.18的文件</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8bfind%e5%91%bd%e4%bb%a4%e6%a0%b9%e6%8d%ae%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4%e6%9f%a5%e6%89%be%e6%96%87%e4%bb%b6%e7%94%a8%e6%b3%95.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql中explain参数含义</title>
		<link>http://www.linuxsee.com/mysql/mysql%e4%b8%adexplain%e5%8f%82%e6%95%b0%e5%90%ab%e4%b9%89.html</link>
		<comments>http://www.linuxsee.com/mysql/mysql%e4%b8%adexplain%e5%8f%82%e6%95%b0%e5%90%ab%e4%b9%89.html#comments</comments>
		<pubDate>Mon, 14 May 2012 10:04:42 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=386</guid>
		<description><![CDATA[Select_type：所使用的查询类型，主要有以下这几种查询类型。 (1)DEPENDENT SUBQUERY：子查询内层的第一个SELECT，依赖于外部查询的结果集。 (2)DEPENDENT UNION：子查询中的UNION，且为UNION中从第二个SELECT开始的后面所有SELECT，同样依赖于外部查询的结果集。 (3)PRIMARY：子查询中的最外层查询，注意并不是主键查询。 (4)SIMPLE：除子查询或UNION之外的其他查询。 (5)SUBQUERY：子查询内层查询的第一个SELECT，结果不依赖于外部查询结果集。 (6)UNCACHEABLE SUBQUERY：结果集无法缓存的子查询。 (7)UNION：UNION语句中第二个SELECT开始后面的所有SELECT，第一个SELECT为PRIMARY。 (8)UNION RESULT：UNION 中的合并结果。 Table：显示这一步所访问的数据库中的表的名称。 Type：告诉我们对表使用的访问方式，主要包含如下集中类型。 (1)all：全表扫描。 (2)const：读常量，最多只会有一条记录匹配，由于是常量，实际上只须要读一次。 (3)eq_ref：最多只会有一条匹配结果，一般是通过主键或唯一键索引来访问。 (4)fulltext：进行全文索引检索。 (5)index：全索引扫描。 (6)index_merge：查询中同时使用两个（或更多）索引，然后对索引结果进行合并（merge），再读取表数据。 (7)index_subquery：子查询中的返回结果字段组合是一个索引（或索引组合），但不是一个主键或唯一索引。 (8)rang：索引范围扫描。 (9)ref：Join语句中被驱动表索引引用的查询。 (10)ref_or_null：与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询。 (11)system：系统表，表中只有一行数据。 (12)unique_subquery：子查询中的返回结果字段组合是主键或唯一约束。 Possible_keys：该查询可以利用的索引。如果没有任何索引可以使用，就会显示成null，这项内容对优化索引时的调整非常重要。 Key：mysql Query Optimizer 从 possible_keys 中所选择使用的索引。 Key_len：被选中使用索引的索引键长度。 Ref：列出是通过常量（const），还是某个表的某个字段（如果是join）来过滤（通过key）的。 Rows：mysql Query Optimizer 通过系统收集的统计信息估算出来的结果集记录条数。 Extra：查询中每一步实现的额外细节信息，主要会是以下内容。 (1)Distinct：查找distinct 值，当mysql找到了第一条匹配的结果时，将停止该值的查询，转为后面其他值查询。 (2)Full scan on NULL key：子查询中的一种优化方式，主要在遇到无法通过索引访问null值的使用。 (3)Impossible WHERE noticed after reading const [...]]]></description>
			<content:encoded><![CDATA[<p>Select_type：所使用的查询类型，主要有以下这几种查询类型。<br />
(1)DEPENDENT SUBQUERY：子查询内层的第一个SELECT，依赖于外部查询的结果集。<br />
(2)DEPENDENT UNION：子查询中的UNION，且为UNION中从第二个SELECT开始的后面所有SELECT，同样依赖于外部查询的结果集。<br />
(3)PRIMARY：子查询中的最外层查询，注意并不是主键查询。<br />
(4)SIMPLE：除子查询或UNION之外的其他查询。<br />
(5)SUBQUERY：子查询内层查询的第一个SELECT，结果不依赖于外部查询结果集。<br />
(6)UNCACHEABLE SUBQUERY：结果集无法缓存的子查询。<br />
(7)UNION：UNION语句中第二个SELECT开始后面的所有SELECT，第一个SELECT为PRIMARY。<br />
(8)UNION RESULT：UNION 中的合并结果。</p>
<p>Table：显示这一步所访问的数据库中的表的名称。</p>
<p><span id="more-386"></span></p>
<p>Type：告诉我们对表使用的访问方式，主要包含如下集中类型。<br />
(1)all：全表扫描。<br />
(2)const：读常量，最多只会有一条记录匹配，由于是常量，实际上只须要读一次。<br />
(3)eq_ref：最多只会有一条匹配结果，一般是通过主键或唯一键索引来访问。<br />
(4)fulltext：进行全文索引检索。<br />
(5)index：全索引扫描。<br />
(6)index_merge：查询中同时使用两个（或更多）索引，然后对索引结果进行合并（merge），再读取表数据。<br />
(7)index_subquery：子查询中的返回结果字段组合是一个索引（或索引组合），但不是一个主键或唯一索引。<br />
(8)rang：索引范围扫描。<br />
(9)ref：Join语句中被驱动表索引引用的查询。<br />
(10)ref_or_null：与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询。<br />
(11)system：系统表，表中只有一行数据。<br />
(12)unique_subquery：子查询中的返回结果字段组合是主键或唯一约束。</p>
<p>Possible_keys：该查询可以利用的索引。如果没有任何索引可以使用，就会显示成null，这项内容对<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e4%bc%98%e5%8c%96" title="查看 优化 的全部文章" target="_blank">优化</a></span>索引时的调整非常重要。</p>
<p>Key：<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> Query Optimizer 从 possible_keys 中所选择使用的索引。</p>
<p>Key_len：被选中使用索引的索引键长度。</p>
<p>Ref：列出是通过常量（const），还是某个表的某个字段（如果是join）来过滤（通过key）的。</p>
<p>Rows：<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> Query Optimizer 通过系统收集的统计信息估算出来的结果集记录条数。</p>
<p>Extra：查询中每一步实现的额外细节信息，主要会是以下内容。<br />
(1)Distinct：查找distinct 值，当<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span>找到了第一条匹配的结果时，将停止该值的查询，转为后面其他值查询。<br />
(2)Full scan on NULL key：子查询中的一种<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e4%bc%98%e5%8c%96" title="查看 优化 的全部文章" target="_blank">优化</a></span>方式，主要在遇到无法通过索引访问null值的使用。<br />
(3)Impossible WHERE noticed after reading const tables：MySQL Query Optimizer 通过收集到的统计信息判断出不可能存在结果。<br />
(4)No tables：Query 语句中使用 FROM DUAL或不包含任何 FROM子句。<br />
(5)Not exists：在某些左连接中，MySQL Query Optimizer通过改变原有 Query 的组成而使用的优化方法，可以部分减少数据访问次数。<br />
(6)Range checked for each record (index map: N)：通过 MySQL 官方手册的描述，当 MySQL Query Optimizer 没有发现好的可以使用的索引时，如果发现前面表的列值已知，部分索引可以使用。对前面表的每个行组合，MySQL检查是否可以使用range或index_merge访问方法来索取行。<br />
(7)SELECT tables optimized away：当我们使用某些聚合函数来访问存在索引的某个字段时，MySQL Query Optimizer 会通过索引直接一次定位到所需的数据行完成整个查询。当然，前提是在 Query 中不能有 GROUP BY 操作。如使用MIN()或MAX()的时候。<br />
(8)Using filesort：当Query 中包含 ORDER BY 操作，而且无法利用索引完成排序操作的时候，MySQL Query Optimizer 不得不选择相应的排序算法来实现。<br />
(9)Using index：所需数据只需在 Index 即可全部获得，不须要再到表中取数据。<br />
(10)Using index for group-by：数据访问和 Using index 一样，所需数据只须要读取索引，当Query 中使用GROUP BY或DISTINCT 子句时，如果分组字段也在索引中，Extra中的信息就会是 Using index for group-by。<br />
(11)Using temporary：当 MySQL 在某些操作中必须使用临时表时，在 Extra 信息中就会出现Using temporary 。主要常见于 GROUP BY 和 ORDER BY 等操作中。<br />
(12)Using where：如果不读取表的所有数据，或不是仅仅通过索引就可以获取所有需要的数据，则会出现 Using where 信息。<br />
(13)Using where with pushed condition：这是一个仅仅在 NDBCluster存储引擎中才会出现的信息，而且还须要通过打开 Condition Pushdown 优化功能才可能被使用。控制参数为 engine_condition_pushdown 。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/mysql/mysql%e4%b8%adexplain%e5%8f%82%e6%95%b0%e5%90%ab%e4%b9%89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>几个比较重要的MYSQL参数优化方法</title>
		<link>http://www.linuxsee.com/mysql/%e5%87%a0%e4%b8%aa%e6%af%94%e8%be%83%e9%87%8d%e8%a6%81%e7%9a%84mysql%e5%8f%82%e6%95%b0%e4%bc%98%e5%8c%96%e6%96%b9%e6%b3%95.html</link>
		<comments>http://www.linuxsee.com/mysql/%e5%87%a0%e4%b8%aa%e6%af%94%e8%be%83%e9%87%8d%e8%a6%81%e7%9a%84mysql%e5%8f%82%e6%95%b0%e4%bc%98%e5%8c%96%e6%96%b9%e6%b3%95.html#comments</comments>
		<pubDate>Thu, 26 Apr 2012 07:40:12 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[参数]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=383</guid>
		<description><![CDATA[mysql 数据库的性能状态监控点非常之多，其中很多量都是我们不能忽视的必须监控的量，且90% 以上的内容可以在连接上mysql Server 后执行“SHOW /*!50000 GLOBAL */STATUS” 以及“SHOW /*!50000 GLOBAL */ VARIABLES” 的输出值获得。需要注意的是上述命令所获得状态值实际上是累计值，所以如果要计算(单位/某个)时间段内的变化量还需要稍加处理，可以在附录中找到两个命令输出值的详细说明。下面看看几项需要重点关注的性能状态： ● QPS（每秒Query 量）：这里的QPS 实际上是指mysql Server 每秒执行的Query总量，在MySQL 5.1.30 及以下版本可以通过Questions 状态值每秒内的变化量来近似表示，而从MySQL 5.1.31 开始，则可以通过Queries 来表示。Queries 是在MySQL 5.1.31 才新增的状态变量。主要解决的问题就是Questions 状态变量并没有记录存储过程中所执行的Query（当然，在无存储过程的老版本MySQL 中则不存在这个区别），而Queries 状态变量则会记录。二者获取方式：QPS = Questions(or Queries) / Seconds 获取所需状态变量值： SHOW GLOBAL  STATUS LIKE  &#8217;Questions&#8217; SHOW GLOBAL  STATUS LIKE  &#8217;Queries&#8217; 这里的Seconds 是指累计出上述两个状态变量值的时间长度，后面用到的地方也代表同样的意思。 ● TPS（每秒事务量）： 在MySQL Server 中并没有直接事务计数器，我们只能通过回滚和提交计数器来计算出系统的事务量。所以，我们需要通过以下方式来得到客户端应用程序所请求的TPS [...]]]></description>
			<content:encoded><![CDATA[<p><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> 数据库的性能状态监控点非常之多，其中很多量都是我们不能忽视的必须监控的量，且90% 以上的内容可以在连接上<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> Server 后执行“SHOW /*!50000 GLOBAL */STATUS” 以及“SHOW /*!50000 GLOBAL */ VARIABLES” 的输出值获得。需要注意的是上述命令所获得状态值实际上是累计值，所以如果要计算(单位/某个)时间段内的变化量还需要稍加处理，可以在附录中找到两个命令输出值的详细说明。下面看看几项需要重点关注的性能状态：</p>
<p>● QPS（每秒Query 量）：这里的QPS 实际上是指<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> Server 每秒执行的Query总量，在MySQL 5.1.30 及以下版本可以通过Questions 状态值每秒内的变化量来近似表示，而从MySQL 5.1.31 开始，则可以通过Queries 来表示。Queries 是在MySQL 5.1.31 才新增的状态变量。主要解决的问题就是Questions 状态变量并没有记录存储过程中所执行的Query（当然，在无存储过程的老版本MySQL 中则不存在这个区别），而Queries 状态变量则会记录。二者获取方式：QPS = Questions(or Queries) / Seconds</p>
<p>获取所需状态变量值：</p>
<p>SHOW GLOBAL  STATUS LIKE  &#8217;Questions&#8217;</p>
<p>SHOW GLOBAL  STATUS LIKE  &#8217;Queries&#8217;</p>
<p>这里的Seconds 是指累计出上述两个状态变量值的时间长度，后面用到的地方也代表同样的意思。</p>
<p>● TPS（每秒事务量）： 在MySQL Server 中并没有直接事务计数器，我们只能通过回滚和提交计数器来计算出系统的事务量。所以，我们需要通过以下方式来得到客户端应用程序所请求的TPS 值：TPS = (Com_commit + Com_rollback) / Seconds如果我们还使用了分布式事务，那么还需要将Com_xa_commit 和Com_xa_rollback 两个状态变量的值加上。● Key Buffer 命中率：Key Buffer 命中率代表了MyISAM 类型表的索引的Cache命中率。该命中率的大小将直接影响MyISAM 类型表的读写性能。Key Buffer 命中率实际上包括读命中率和写命中率两种，MySQL 中并没有直接给出这两个命中率的值，但是可以通过如下方式计算出来：</p>
<p>key_buffer_read_hits = (1 &#8211; Key_reads / Key_read_requests) * 100%</p>
<p>key_buffer_write_hits= (1 &#8211; Key_writes / Key_write_requests) * 100%</p>
<p>获取所需状态变量值：</p>
<p>sky@localhost : (none) 07:44:10&gt; SHOW /*!50000 GLOBAL */ STATUS-&gt; LIKE &#8216;Key%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>| Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>| Key_read_requests | 10 |</p>
<p>| Key_reads | 4 |</p>
<p>| Key_write_requests | 0 |</p>
<p>| Key_writes | 0 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>通过这两个计算公式，我们很容易就可以得出系统当前Key Buffer 的使用情况</p>
<p>● Innodb Buffer 命中率：这里Innodb Buffer 所指的是innodb_buffer_pool，也就是用来缓存Innodb 类型表的数据和索引的内存空间。类似Key buffer，我们同样可以根据MySQL Server 提供的相应状态值计算出其命中率：</p>
<p>innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%</p>
<p>获取所需状态变量值：</p>
<p>sky@localhost : (none) 08:25:14&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Innodb_buffer_pool_read%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p>| Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p>| Innodb_buffer_pool_read_requests | 5367 |</p>
<p>| Innodb_buffer_pool_reads | 507 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p><span id="more-383"></span></p>
<p>● Query Cache 命中率：如果我们使用了Query Cache，那么对Query Cache 命中率进行监控也是有必要的，因为他可能告诉我们是否在正确的使用Query Cache。Query Cache 命中率的计算方式如下：</p>
<p>Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts)) * 100%</p>
<p>获取所需状态变量值：</p>
<p>sky@localhost : (none) 08:32:01&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Qcache%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+|</p>
<p>Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>| Qcache_hits | 0 |</p>
<p>| Qcache_inserts | 0 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>● Table Cache 状态量：Table Cache 的当前状态量可以帮助我们判断系统<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%8f%82%e6%95%b0" title="查看 参数 的全部文章" target="_blank">参数</a></span>table_open_cache 的设置是否合理。如果状态变量Open_tables 与Opened_tables 之间的比率过低，则代表Table Cache 设置过小，个人认为该值处于80% 左右比较合适。注意，这个值并不是准确的Table Cache 命中率。获取所需状态变量值：</p>
<p>sky@localhost : (none) 08:52:00&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Open%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p>| Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p>| Open_tables | 51 |</p>
<p>| Opened_tables | 61 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p>● Thread Cache 命中率：Thread Cache 命中率能够直接反应出我们的系统<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%8f%82%e6%95%b0" title="查看 参数 的全部文章" target="_blank">参数</a></span>thread_cache_size 设置的是否合理。一个合理的thread_cache_size 参数能够节约大量创建新连接时所需要消耗的资源。Thread Cache 命中率计算方式如下：</p>
<p>Thread_cache_hits = (1 &#8211; Threads_created / Connections) * 100%</p>
<p>获取所需状态变量值：</p>
<p>sky@localhost : (none) 08:57:16&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Thread%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+|</p>
<p>Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>| Threads_created | 3 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>4 rows in set (0.01 sec)</p>
<p>&nbsp;</p>
<p>sky@localhost : (none) 09:01:33&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Connections&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+|</p>
<p>Variable_name | Value</p>
<p>|+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+|</p>
<p>Connections | 11 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>正常来说，Thread Cache 命中率要在90% 以上才算比较合理。</p>
<p>● 锁定状态：锁定状态包括表锁和行锁两种，我们可以通过系统状态变量获得锁定总次数，锁定造成其他线程等待的次数，以及锁定等待时间信息。</p>
<p>sky@localhost : (none) 09:01:44&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;%lock%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+|</p>
<p>Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>| Innodb_row_lock_current_waits | 0 |</p>
<p>| Innodb_row_lock_time | 0 |</p>
<p>| Innodb_row_lock_time_avg | 0 |</p>
<p>| Innodb_row_lock_time_max | 0 |</p>
<p>| Innodb_row_lock_waits | 0 |</p>
<p>| Table_locks_immediate | 44 |</p>
<p>| Table_locks_waited | 0 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>通过上述系统变量，我们可以得出表锁总次数，其中造成其他现线程等待的次数。同时还可以得到非常详细的行锁信息，如行锁总次数，行锁总时间，每次行锁等待时间，行锁造成最大等待时间以及当前等待行锁的线程数。通过对这些量的监控，我们可以清晰的了解到系统整体的锁定是否严重。如当Table_locks_waited 与Table_locks_immediate 的比值较大，则说明我们的表锁造成的阻塞比较严重，可能需要调整Query 语句，或者更改存储引擎，亦或者需要调整业务逻辑。当然，具体改善方式必须根据实际场景来判断。而Innodb_row_lock_waits 较大，则说明Innodb 的行锁也比较严重，且影响了其他线程的正常处理。同样需要查找出原因并解决。造成Innodb 行锁严重的原因可能是Query 语句所利用的索引不够合理（Innodb 行锁是基于索引来锁定的），造成间隙锁过大。也可能是系统本身处理能力有限，则需要从其他方面（如硬件设备）来考虑解决。</p>
<p>● Tmp table 状况：Tmp Table 的状况主要是用于监控MySQL 使用临时表的量是否过多，是否有临时表过大而不得不从内存中换出到磁盘文件上。临时表使用状态信息可以通过如下方式获得：</p>
<p>sky@localhost : (none) 09:27:28&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Created_tmp%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+|</p>
<p>Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+|</p>
<p>Created_tmp_disk_tables | 1 |</p>
<p>| Created_tmp_tables | 46 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;-+</p>
<p>从上面的状态信息可以了解到系统使用了46 次临时表，其中有1 次临时表比较大，无法在内存中完成，而不得不使用到磁盘文件。如果Created_tmp_tables 非常大，则可能是系统中排序操作过多，或者是表连接方式不是很<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e4%bc%98%e5%8c%96" title="查看 优化 的全部文章" target="_blank">优化</a></span>。而如果是Created_tmp_disk_tables 与Created_tmp_tables 的比率过高，如超过10%，则我们需要考虑是否tmp_table_size 这个系统参数所设置的足够大。当然，如果系统内存有限，也就没有太多好的解决办法了。</p>
<p>● Binlog Cache 使用状况：Binlog Cache 用于存放还未写入磁盘的Binlog 信息。相关状态变量如下：</p>
<p>sky@localhost : (none) 09:40:38&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Binlog_cache%&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+|</p>
<p>Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+|</p>
<p>Binlog_cache_disk_use | 0 |</p>
<p>| Binlog_cache_use | 0 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;-+</p>
<p>如果Binlog_cache_disk_use 值不为0，则说明Binlog Cache 大小可能不够，建议增加binlog_cache_size 系统参数大小。</p>
<p>● Innodb_log_waits 量：Innodb_log_waits 状态变量直接反应出Innodb LogBuffer 空间不足造成等待的次数。</p>
<p>sky@localhost : (none) 09:43:53&gt; SHOW /*!50000 GLOBAL*/ STATUS-&gt; LIKE &#8216;Innodb_log_waits&#8217;;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>|Variable_name | Value |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>| Innodb_log_waits | 0 |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;-+</p>
<p>该变量值发生的频率将直接影响系统的写入性能，所以当该值达到每秒1 次时就该增加系统参数innodb_log_buffer_size 的值，毕竟这是一个系统共用的缓存，适当增加并不会造成内存不足的问题。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/mysql/%e5%87%a0%e4%b8%aa%e6%af%94%e8%be%83%e9%87%8d%e8%a6%81%e7%9a%84mysql%e5%8f%82%e6%95%b0%e4%bc%98%e5%8c%96%e6%96%b9%e6%b3%95.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用mysqldumpslow分析mysql的slow query log(ZT)</title>
		<link>http://www.linuxsee.com/mysql/%e7%94%a8mysqldumpslow%e5%88%86%e6%9e%90mysql%e7%9a%84slow-query-logzt.html</link>
		<comments>http://www.linuxsee.com/mysql/%e7%94%a8mysqldumpslow%e5%88%86%e6%9e%90mysql%e7%9a%84slow-query-logzt.html#comments</comments>
		<pubDate>Tue, 27 Mar 2012 07:12:18 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[slowlog]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=380</guid>
		<description><![CDATA[mysql有一个功能就是可以log下来运行的比较慢的sql语句，默认是没有这个log的，为了开启这个功能，要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改，需增加如下几行 long_query_time = 1 log-slow-queries = /var/youpath/slow.log log-queries-not-using-indexes long_query_time 是指执行超过多久的sql会被log下来，这里是1秒。 log-slow-queries 设置把日志写在那里，可以为空，系统会给一个缺省的文件host_name-slow.log，我生成的log就在mysql的data目录 log-queries-not-using-indexes 就是字面意思，log下来没有使用索引的query。 把上述参数打开，运行一段时间，就可以关掉了，省得影响生产环境。 接下来就是分析了，我这里的文件名字叫host-slow.log。 先mysqldumpslow –help以下，俺主要用的是 -s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default -t NUM just show the top n queries -g PATTERN grep: only consider stmts that include this string -s，是order的顺序，说明写的不够详细，俺用下来，包括看了代码，主要有 c,t,l,r和ac,at,al,ar，分别是按照query次数，时间，lock的时间和返回的记录数来排序，前面加了a的时倒叙 -t，是top [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span></strong>有一个功能就是可以<strong>log</strong>下来运行的比较慢的sql语句，默认是没有这个<strong>log</strong>的，为了开启这个功能，要修改my.cnf或者在<strong><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span></strong>启动的时候加入一些参数。如果在my.cnf里面修改，需增加如下几行</p>
<p>long_<strong>query</strong>_time = 1<br />
<strong>log</strong>-<strong>slow</strong>-queries = /var/youpath/<strong>slow</strong>.<strong>log</strong><br />
<strong>log</strong>-queries-not-using-indexes</p>
<p>long_<strong>query</strong>_time 是指执行超过多久的sql会被<strong>log</strong>下来，这里是1秒。<br />
<strong>log</strong>-<strong>slow</strong>-queries 设置把日志写在那里，可以为空，系统会给一个缺省的文件<em>host_name</em>-<strong>slow</strong>.<strong>log</strong>，我生成的<strong>log</strong>就在<strong><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span></strong>的data目录<br />
<strong>log</strong>-queries-not-using-indexes 就是字面意思，<strong>log</strong>下来没有使用索引的<strong>query</strong>。</p>
<p>把上述参数打开，运行一段时间，就可以关掉了，省得影响生产环境。</p>
<p>接下来就是分析了，我这里的文件名字叫host-<strong>slow</strong>.<strong>log</strong>。<br />
先<strong>mysql</strong>dump<strong>slow</strong> –help以下，俺主要用的是<br />
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default<br />
-t NUM just show the top n queries<br />
-g PATTERN grep: only consider stmts that include this string</p>
<p>-s，是order的顺序，说明写的不够详细，俺用下来，包括看了代码，主要有<br />
c,t,l,r和ac,at,al,ar，分别是按照<strong>query</strong>次数，时间，lock的时间和返回的记录数来排序，前面加了a的时倒叙<br />
-t，是top n的意思，即为返回前面多少条的数据<br />
-g，后边可以写一个正则匹配模式，大小写不敏感的</p>
<p><strong>mysql</strong>dump<strong>slow</strong> -s c -t 20 host-<strong>slow</strong>.<strong>log</strong><br />
<strong>mysql</strong>dump<strong>slow</strong> -s r -t 20 host-<strong>slow</strong>.<strong>log</strong></p>
<p>上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。<br />
<strong>mysql</strong>dump<strong>slow</strong> -t 10 -s t -g “left join” host-<strong>slow</strong>.<strong>log</strong><br />
这个是按照时间返回前10条里面含有左连接的sql语句。</p>
<p>用了这个工具就可以查询出来那些sql语句是性能的瓶颈，进行优化，比如加索引，该应用的实现方式等。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/mysql/%e7%94%a8mysqldumpslow%e5%88%86%e6%9e%90mysql%e7%9a%84slow-query-logzt.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>并发连接数与pv的换算公式（转）</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e5%b9%b6%e5%8f%91%e8%bf%9e%e6%8e%a5%e6%95%b0%e4%b8%8epv%e7%9a%84%e6%8d%a2%e7%ae%97%e5%85%ac%e5%bc%8f%ef%bc%88%e8%bd%ac%ef%bc%89.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e5%b9%b6%e5%8f%91%e8%bf%9e%e6%8e%a5%e6%95%b0%e4%b8%8epv%e7%9a%84%e6%8d%a2%e7%ae%97%e5%85%ac%e5%bc%8f%ef%bc%88%e8%bd%ac%ef%bc%89.html#comments</comments>
		<pubDate>Tue, 27 Mar 2012 06:38:50 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[pv]]></category>
		<category><![CDATA[并发连接数]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=378</guid>
		<description><![CDATA[oncurrent connections ＝pv / seconds *（para connect per a page) * (time to react) * (factor) / (web hosts) &#160; Pv = concurrent connections * seconds * (web hosts)/ (para connect per a page)/ (time to react)/ (factor) &#160; concurrent connections：并发连接数 Seconds:  pv统计的总时间，单位秒，要计算一天的pv就是86400秒 para connect per a page:         页面衍生连接次数。一个HTML页面可能会请求好几次http连接，如外部的css, js, 图片等。可以估算一下，或者用10。可根据实际情况改变 time to react：http响应时间，可以使用1秒或更少。可根据实际情况改变 factor：因数，一般使用5即可。可根据实际情况计算后推出 [...]]]></description>
			<content:encoded><![CDATA[<p>oncurrent connections ＝<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/pv" title="查看 pv 的全部文章" target="_blank">pv</a></span> / seconds *（para connect per a page) * (time to react) * (factor) / (web hosts)</p>
<p>&nbsp;</p>
<p>Pv = concurrent connections * seconds * (web hosts)/ (para connect per a page)/ (time to react)/ (factor)</p>
<p>&nbsp;</p>
<p>concurrent connections：<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%b9%b6%e5%8f%91%e8%bf%9e%e6%8e%a5%e6%95%b0" title="查看 并发连接数 的全部文章" target="_blank">并发连接数</a></span></p>
<p>Seconds:  <span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/pv" title="查看 pv 的全部文章" target="_blank">pv</a></span>统计的总时间，单位秒，要计算一天的pv就是86400秒</p>
<p>para connect per a page:         页面衍生连接次数。一个HTML页面可能会请求好几次http连接，如外部的css, js, 图片等。可以估算一下，或者用10。可根据实际情况改变</p>
<p>time to react：http响应时间，可以使用1秒或更少。可根据实际情况改变</p>
<p>factor：因数，一般使用5即可。可根据实际情况计算后推出</p>
<p>web hosts：web服务器数量</p>
<p>&nbsp;</p>
<p>* para connect per a page，time to react，factor 这三个参数要根据实际情况分析计算后，确定一个适合的值</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>推算一下。单台机器1000并发的情况下，一天是1,728,000的pv(1秒响应，10个衍生连接，因子为5的情况下)</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e5%b9%b6%e5%8f%91%e8%bf%9e%e6%8e%a5%e6%95%b0%e4%b8%8epv%e7%9a%84%e6%8d%a2%e7%ae%97%e5%85%ac%e5%bc%8f%ef%bc%88%e8%bd%ac%ef%bc%89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下的/dev/shm/</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8b%e7%9a%84devshm.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8b%e7%9a%84devshm.html#comments</comments>
		<pubDate>Fri, 20 Jan 2012 03:48:22 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[tmpfs]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=375</guid>
		<description><![CDATA[/dev/shm/是linux下一个非常有用的目录，因为这个目录不在硬盘上，而是在内存里。因此在linux下，就不需要大费周折去建ramdisk，直接使用/dev/shm/就可达到很好的优化效果。 /dev /shm/需要注意的一个是容量问题，在linux下，它默认最大为内存的一半大小，使用df -h命令可以看到。但它并不会真正的占用这块内存，如果/dev/shm/下没有任何文件，它占用的内存实际上就是0字节；如果它最大为1G，里头放有 100M文件，那剩余的900M仍然可为其它应用程序所使用，但它所占用的100M内存，是绝不会被系统回收重新划分的，否则谁还敢往里头存文件呢？ 默认的最大一半内存大小在某些场合可能不够用，并且默认的inode数量很低一般都要调高些，这时可以用mount命令来管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm 在2G的机器上，将最大容量调到1.5G，并且inode数量调到1000000，这意味着大致可存入最多一百万个小文件。 &#160; 为当/dev/shm空间不够时可以占用swap的空间，所以不用担心存储空间不够用。想想看，从磁盘IO操作到内存操作，php读写SESSION的速度会快多少？只是需要注意，存储在/dev/shm的数据，在服务器重启后会全部丢失。 &#160; 默认系统就会加载/dev/shm ，它就是所谓的tmpfs，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，tmpfs 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。 tmpfs有以下优势： 1，动态文件系统的大小。 2，tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎可以是瞬间的。 3，tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载，绑定的操作。 好了讲了一些大道理，还是讲讲应用吧： 首先在/dev/stm建个tmp文件夹，然后与实际/tmp绑定 mkdir /dev/shm/tmp chmod 1777 /dev/shm/tmp mount &#8211;bind /dev/shm/tmp /tmp（&#8211;bind ） 在使用mount &#8211;bind olderdir newerdir命令来挂载一个目录到另一个目录后，newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性，除了名称。 巧用tmpfs加速你的linux服务器,就是使用虚拟磁盘来存放squid的缓存文件和php的seesion。速度快不少哦！ 默 [...]]]></description>
			<content:encoded><![CDATA[<p>/dev/shm/是linux下一个非常有用的目录，因为这个目录不在硬盘上，而是在内存里。因此在linux下，就不需要大费周折去建ramdisk，直接使用/dev/shm/就可达到很好的优化效果。<br />
/dev /shm/需要注意的一个是容量问题，在linux下，它默认最大为内存的一半大小，使用df -h命令可以看到。但它并不会真正的占用这块内存，如果/dev/shm/下没有任何文件，它占用的内存实际上就是0字节；如果它最大为1G，里头放有 100M文件，那剩余的900M仍然可为其它应用程序所使用，但它所占用的100M内存，是绝不会被系统回收重新划分的，否则谁还敢往里头存文件呢？<br />
默认的最大一半内存大小在某些场合可能不够用，并且默认的inode数量很低一般都要调高些，这时可以用mount命令来管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm</p>
<div>
<p>在2G的机器上，将最大容量调到1.5G，并且inode数量调到1000000，这意味着大致可存入最多一百万个小文件。</p>
<p>&nbsp;</p>
<p>为当/dev/shm空间不够时可以占用swap的空间，所以不用担心存储空间不够用。想想看，从磁盘IO操作到内存操作，php读写SESSION的速度会快多少？只是需要注意，存储在/dev/shm的数据，在服务器重启后会全部丢失。</p>
<p>&nbsp;</p>
<p>默认系统就会加载/dev/shm ，它就是所谓的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/tmpfs" title="查看 tmpfs 的全部文章" target="_blank">tmpfs</a></span>，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/tmpfs" title="查看 tmpfs 的全部文章" target="_blank">tmpfs</a></span> 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。<br />
tmpfs有以下优势：<br />
1，动态文件系统的大小。<br />
2，tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎可以是瞬间的。<br />
3，tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载，绑定的操作。<br />
好了讲了一些大道理，还是讲讲应用吧：<br />
首先在/dev/stm建个tmp文件夹，然后与实际/tmp绑定<br />
mkdir /dev/shm/tmp<br />
chmod 1777 /dev/shm/tmp<br />
mount &#8211;bind /dev/shm/tmp /tmp（&#8211;bind ）<br />
在使用mount &#8211;bind olderdir newerdir命令来挂载一个目录到另一个目录后，newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性，除了名称。<br />
巧用tmpfs加速你的linux服务器,就是使用虚拟磁盘来存放<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>的缓存文件和php的seesion。速度快不少哦！<br />
默 认系统就会加载/dev/shm ，它就是所谓的tmpfs，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，tmpfs 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。<br />
tmpfs有以下优势：<br />
1。动态文件系统的大小，<br />
2。tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎可以是瞬间的。<br />
3。tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载，绑定的操作。<br />
好了讲了一些大道理，大家看的烦了吧，还是讲讲我的应用吧：）<br />
首先在/dev/shm建个tmp文件夹，然后与实际/tmp绑定<br />
mkdir /dev/shm/tmp<br />
chmod 1777 /dev/shm/tmp<br />
mount &#8211;bind /dev/shm/tmp /tmp</p>
<p>1. <span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>的缓存目录设置<br />
vi /etc/<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>/squid.conf<br />
修改成<br />
cache_dir ufs /tmp 256 16 256<br />
这 里的第一个256表示使用256M内存，我觉得http://www.linuxaid.com.cn/articles/4/4 /441672019.shtml里使用ramdisk的方法还不如直接使用tmpfs，至少每次启动不用mkfs，还可以动态改变大小。这时的/tmp 实际就是/dev/shm/tmp<br />
然后重启一下服务，ok，现在所有的squid缓存文件都保存倒tmpfs文件系统里了，很快哦。</p>
<p>2. 对php性能的优化<br />
对于一个访问量大的以<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/apache" title="apache" rel="nofollow" target="_blank">apache</a></span>+php的网站，可能tmp下的临时文件都会很多，比如seesion或者一些缓存文件，那么你可以把它保存到tmpfs文件。<br />
保存seesion的方法很简单了只要修改php.ini就行了，由于我已经把/dev/stm/tmp与/tmp绑定，所以不改写也行，至于php程序产生的缓存文件那只能改自己的php程序了：）<br />
至于tmpfs的其他应用，我想大家可能通过这篇文章会有所启发。</p>
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8b%e7%9a%84devshm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>详解Linux系统内存中buffer和cache</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e8%af%a6%e8%a7%a3linux%e7%b3%bb%e7%bb%9f%e5%86%85%e5%ad%98%e4%b8%adbuffer%e5%92%8ccache.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e8%af%a6%e8%a7%a3linux%e7%b3%bb%e7%bb%9f%e5%86%85%e5%ad%98%e4%b8%adbuffer%e5%92%8ccache.html#comments</comments>
		<pubDate>Thu, 19 Jan 2012 07:50:23 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=371</guid>
		<description><![CDATA[我们一开始，先从free命令说起。free 命令相对于top提供了更简洁的查看系统内存使用情况： # free total       used       free     shared    buffers     cached Mem:       4129428    2830048    1299380          0     208524    1838492 -/+ buffers/Cache:     783032    3346396 SWAP:      4192956          0    4192956 解释下各个参数的意思： Mem：表示物理内存统计 -/+ buffers/cached：表示物理内存的缓存统计。 Swap：表示硬盘上交换分区的使用情况，这里我们不去关心。 系统的总物理内存：4129428（4096MB），但系统当前真正可用的内存并不是第一行free 标记的 2830048，它仅代表未被分配的内存。 单位为MB的查看方法： # free -m total       used       free     shared    buffers     cached Mem:          4032       2764       1268          0        203       1795 -/+ buffers/cache:        765       3267 Swap:         [...]]]></description>
			<content:encoded><![CDATA[<p>我们一开始，先从<strong>free命令</strong>说起。free 命令相对于top提供了更简洁的查看系统<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>使用情况：</p>
<p># free<br />
total       used       free     shared    buffers     cached<br />
Mem:       4129428    2830048    1299380          0     208524    1838492<br />
-/+ buffers/Cache:     783032    3346396<br />
SWAP:      4192956          0    4192956</p>
<p><strong>解释下各个参数的意思：</strong></p>
<p><strong>Mem：</strong>表示物理<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>统计<br />
<strong>-/+ buffers/cached：</strong>表示物理内存的缓存统计。<br />
<strong>Swap：</strong>表示硬盘上交换分区的使用情况，这里我们不去关心。<br />
系统的总物理内存：4129428（4096MB），但系统当前真正可用的内存并不是第一行free 标记的 2830048，它仅代表未被分配的内存。</p>
<p>单位为MB的查看方法：<br />
# free -m<br />
total       used       free     shared    buffers     cached<br />
Mem:          4032       2764       1268          0        203       1795<br />
-/+ buffers/cache:        765       3267<br />
Swap:         4094          0       4094</p>
<p>我们使用totalA、usedA、freeA、usedB、freeB等名称来代表上面统计数据的各值，A和B分别代表第一行和第二行的数据。<br />
[totalA] 4032：表示物理内存总量。<br />
[usedA] 2764：表示总计分配给缓存（包含buffers 与cache ）使用的数量，但其中可能部分缓存并未实际使用。<br />
[freeA] 1268：未被分配的内存。<br />
[sharedA] 0 ：共享内存，一般系统不会用到，这里也不讨论。<br />
[buffersA] 203：系统分配但未被使用的buffers 数量。<br />
[cachedA] 1795：系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。</p>
<p>[usedB] 771：实际使用的buffers 与cache 总量，也是实际使用的内存总量。<br />
[freeB] 3261：未被使用的buffers 与cache 和未被分配的内存之和，这就是系统当前实际可用内存。</p>
<p><strong>可以整理出如下等式：<br />
</strong>totalA = usedA + free1<br />
totalA = used2 + free2<br />
usedA = buffersA + cachedA + usedB<br />
freeB = buffersA + cachedA + freeA</p>
<p><strong>buffer 与cache 的区别<br />
</strong>A buffer is something that has yet to be &#8220;written&#8221; to disk. A cache is something that has been &#8220;read&#8221; from the disk and stored for later use.<br />
对于共享内存（Shared memory），主要用于在Unix 环境下不同进程之间共享数据，是进程间通信的一种方法，一般的应用程序不会申请使用共享内存，笔者也没有去验证共享内存对上面等式的影响。</p>
<p><strong>cache 和 buffer的区别：<br />
</strong>Cache：高速缓存，是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存，CPU直接从内存中存取数据要等待一定时间周期，Cache中保存着CPU刚用过或循环使用的一部分数据，当CPU再次使用该部分数据时可从Cache中直接调用，这样就减少了CPU的等待时间，提高了系统的效率。Cache又分为一级Cache（L1 Cache）和二级Cache（L2 Cache），L1 Cache集成在CPU内部，L2 Cache早期一般是焊在主板上，现在也都集成在CPU内部，常见的容量有256KB或512KB L2 Cache。</p>
<p>Buffer：缓冲区，一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区，可以使进程之间的相互等待变少，从而使从速度慢的设备读入数据时，速度快的设备的操作进程不发生间断。</p>
<p><strong>Free中的buffer和cache：（它们都是占用内存）：<br />
</strong>buffer : 作为buffer cache的内存，是块设备的读写缓冲区<br />
cache: 作为page cache的内存， 文件系统的cache<br />
如果 cache 的值很大，说明cache住的文件数很多。如果频繁访问到的文件都能被cache住，那么磁盘的读IO必会非常小。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e8%af%a6%e8%a7%a3linux%e7%b3%bb%e7%bb%9f%e5%86%85%e5%ad%98%e4%b8%adbuffer%e5%92%8ccache.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux 内存管理机制简介(ZT)</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6%e7%ae%80%e4%bb%8bzt.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6%e7%ae%80%e4%bb%8bzt.html#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:14:58 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=369</guid>
		<description><![CDATA[在Linux中经常发现空闲内存很少，似乎所有的内存都被系统占用了，表面感觉是内存不够用了，其实不然。这是Linux内存管理的一个优秀特性，在这方面，区别于 Windows的内存管理。主要特点是，无论物理内存有多大，Linux 都将其充份利用，将一些程序调用过的硬盘数据读入内存，利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时，才为应用程序分配内存，并不能充分利用大容量的内存空间。换句话说，每增加一些物理内存，Linux 都将能充分利用起来，发挥了硬件投资带来的好处，而Windows只将其做为摆设，即使增加8GB甚至更大。 Linux 的这一特性，主要是利用空闲的物理内存，划分出一部份空间，做为 cache 和 buffers ，以此提高数据访问性能。 1、什么是 cache ? 页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲，是通过把磁盘中的数据缓存到物理内存中，把对磁盘的访问变为对物理内存的访问。 磁盘高速缓存的价值在于两个方面：第一，访问磁盘的速度要远远低于访问内存的速度，因此，从内存访问数据比从磁盘访问速度更快。第二，数据一旦被访问，就很有可能在短期内再次被访问到。 页高速缓存是由内存中的物理页组成的，缓存中每一页都对应着磁盘中的多个块。每当内核开始执行一个页I/O操作时(通常是对普通文件中页大小的块进行磁盘操作)，首先会检查需要的数据是否在高速缓存中，如果在，那么内核就直接使用高速缓存中的数据，从而避免访问磁盘。 举个例子，当使用文本编辑器打开一个源程序文件时，该文件的数据就被调入内存。编辑该文件的过程中，越来越多的数据会相继被调入内存页。最后，当你编译它的时候，内核可以直接使用页高速缓存中的页，而不需要重新从磁盘读取该文件了。因为用户往往会反复读取或操作同一个文件，所以页高速缓存能减少大量的磁盘操作。 2、cache 如何更新? 由于页高速缓存的缓存作用，写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时，那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时，脏页被写回磁盘： ◆当空闲内存低于一个特定的阈值时，内核必须将脏页写回磁盘，以便释放内存。 ◆当脏页在内存中驻留时间超过一个特定的阈值时，内核必须将超时的脏页写回磁盘，以确保脏页不会无限期地驻留在内存中。 在2.6内核中，由一群内核线程—pdflush后台回写例程统一执行两种工作。 首先，pdflush线程在系统中的空闲内存低于一个特定的阈值时，将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时，释放脏页以重新获得内存。特定的内存阈值可以通过dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值：dirty_background_ratio还低时，内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程，随后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数，该参数指定试图写回的页面数目。函数background_writeout()会连续地写出数据，直到满足以下两个条件： ◆已经有指定的最小数目的页被写出到磁盘。 ◆空闲内存数已经回升，超过了阈值dirty_background_ratio。 上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止，除非pdflush写回了所有的脏页，没有剩下的脏页可再被写回了。 为了满足第二个目标，pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关)，将那些在内存中驻留时间过长的脏页写出，确保内存中不会有长期存在的脏页。如果系统发生崩溃，由于内存处于混乱之中，所以那些在内存中还没来得及写回磁盘的脏页就会丢失，所以周期性同步页高速缓存和磁盘非常重要。在系统启动时，内核初始化一个定时器，让它周期地唤醒pdflush线程，随后使其运行函数wb_kupdate()。 &#160;]]></description>
			<content:encoded><![CDATA[<p>在<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span>中经常发现空闲<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>很少，似乎所有的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>都被系统占用了，表面感觉是内存不够用了，其实不然。这是<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span>内存管理的一个优秀特性，在这方面，区别于 Windows的内存管理。主要特点是，无论物理内存有多大，Linux 都将其充份利用，将一些程序调用过的硬盘数据读入内存，利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时，才为应用程序分配内存，并不能充分利用大容量的内存空间。换句话说，每增加一些物理内存，Linux 都将能充分利用起来，发挥了硬件投资带来的好处，而Windows只将其做为摆设，即使增加8GB甚至更大。</p>
<p>Linux 的这一特性，主要是利用空闲的物理内存，划分出一部份空间，做为 cache 和 buffers ，以此提高数据访问性能。</p>
<p>1、什么是 cache ?</p>
<p>页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲，是通过把磁盘中的数据缓存到物理内存中，把对磁盘的访问变为对物理内存的访问。</p>
<p>磁盘高速缓存的价值在于两个方面：第一，访问磁盘的速度要远远低于访问内存的速度，因此，从内存访问数据比从磁盘访问速度更快。第二，数据一旦被访问，就很有可能在短期内再次被访问到。</p>
<p>页高速缓存是由内存中的物理页组成的，缓存中每一页都对应着磁盘中的多个块。每当内核开始执行一个页I/O操作时(通常是对普通文件中页大小的块进行磁盘操作)，首先会检查需要的数据是否在高速缓存中，如果在，那么内核就直接使用高速缓存中的数据，从而避免访问磁盘。</p>
<p>举个例子，当使用文本编辑器打开一个源程序文件时，该文件的数据就被调入内存。编辑该文件的过程中，越来越多的数据会相继被调入内存页。最后，当你编译它的时候，内核可以直接使用页高速缓存中的页，而不需要重新从磁盘读取该文件了。因为用户往往会反复读取或操作同一个文件，所以页高速缓存能减少大量的磁盘操作。</p>
<p>2、cache 如何更新?</p>
<p>由于页高速缓存的缓存作用，写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时，那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时，脏页被写回磁盘：</p>
<p>◆当空闲内存低于一个特定的阈值时，内核必须将脏页写回磁盘，以便释放内存。</p>
<p>◆当脏页在内存中驻留时间超过一个特定的阈值时，内核必须将超时的脏页写回磁盘，以确保脏页不会无限期地驻留在内存中。</p>
<p>在2.6内核中，由一群内核线程—pdflush后台回写例程统一执行两种工作。</p>
<p>首先，pdflush线程在系统中的空闲内存低于一个特定的阈值时，将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时，释放脏页以重新获得内存。特定的内存阈值可以通过dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值：dirty_background_ratio还低时，内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程，随后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数，该参数指定试图写回的页面数目。函数background_writeout()会连续地写出数据，直到满足以下两个条件：</p>
<p>◆已经有指定的最小数目的页被写出到磁盘。</p>
<p>◆空闲内存数已经回升，超过了阈值dirty_background_ratio。</p>
<p>上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止，除非pdflush写回了所有的脏页，没有剩下的脏页可再被写回了。</p>
<p>为了满足第二个目标，pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关)，将那些在内存中驻留时间过长的脏页写出，确保内存中不会有长期存在的脏页。如果系统发生崩溃，由于内存处于混乱之中，所以那些在内存中还没来得及写回磁盘的脏页就会丢失，所以周期性同步页高速缓存和磁盘非常重要。在系统启动时，内核初始化一个定时器，让它周期地唤醒pdflush线程，随后使其运行函数wb_kupdate()。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6%e7%ae%80%e4%bb%8bzt.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>squid日志内容详解</title>
		<link>http://www.linuxsee.com/squid/squid%e6%97%a5%e5%bf%97%e5%86%85%e5%ae%b9%e8%af%a6%e8%a7%a3.html</link>
		<comments>http://www.linuxsee.com/squid/squid%e6%97%a5%e5%bf%97%e5%86%85%e5%ae%b9%e8%af%a6%e8%a7%a3.html#comments</comments>
		<pubDate>Tue, 10 Jan 2012 05:34:36 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[SQUID]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=365</guid>
		<description><![CDATA[使用 #cat /var/log/squid/access.log&#124;gawk &#8216;{print $4}&#8217;&#124;sort&#124;uniq -c&#124;sort -nr 434524 TCP_IMS_HIT/304 331078 TCP_MEM_HIT/200 97985 TCP_MISS/200 79076 TCP_HIT/200 11049 TCP_IMS_HIT/200 8110 TCP_NEGATIVE_HIT/404 3666 TCP_HIT/206 3496 TCP_MISS/304 2843 TCP_MISS/302 1929 TCP_CLIENT_REFRESH_MISS/200 935 TCP_MISS/404 430 TCP_MISS/000 233 TCP_MEM_HIT/206 86 TCP_REFRESH_MISS/200 73 TCP_CLIENT_REFRESH_MISS/404 60 TCP_REFRESH_HIT/200 53 TCP_REFRESH_HIT/304 18 TCP_SWAPFAIL_MISS/200 6 TCP_SWAPFAIL_MISS/304 如果看到很多的TCP_MEM_HIT ，这表明该文件是从内存缓存读取的，squid已经起作用了！你再用浏览器打开该文件，应该是快如闪电了。。呵呵，大功告成了！还有其他类型的HIT，如TCP_HIT等等，这些是从磁盘读取的，我觉得加速的意义不大，只不过缓解了apache的压力而已。 相应于HTTP请求，下列标签可能出现在access.log文件的第四个域。 TCP_HIT Squid发现请求资源的貌似新鲜的拷贝，并将其立即发送到客户端。 TCP_MISS Squid没有请求资源的cache拷贝。 TCP_REFERSH_HIT Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。原始服务器返回304（未修改）响应，指示squid的拷贝仍旧是新鲜的。 TCP_REF_FAIL_HIT [...]]]></description>
			<content:encoded><![CDATA[<p>使用<br />
#cat /var/log/<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>/access.log|gawk &#8216;{print $4}&#8217;|sort|uniq -c|sort -nr<br />
434524 TCP_IMS_HIT/304<br />
331078 TCP_MEM_HIT/200<br />
97985 TCP_MISS/200<br />
79076 TCP_HIT/200<br />
11049 TCP_IMS_HIT/200<br />
8110 TCP_NEGATIVE_HIT/404<br />
3666 TCP_HIT/206<br />
3496 TCP_MISS/304<br />
2843 TCP_MISS/302<br />
1929 TCP_CLIENT_REFRESH_MISS/200<br />
935 TCP_MISS/404<br />
430 TCP_MISS/000<br />
233 TCP_MEM_HIT/206<br />
86 TCP_REFRESH_MISS/200<br />
73 TCP_CLIENT_REFRESH_MISS/404<br />
60 TCP_REFRESH_HIT/200<br />
53 TCP_REFRESH_HIT/304<br />
18 TCP_SWAPFAIL_MISS/200<br />
6 TCP_SWAPFAIL_MISS/304</p>
<p>如果看到很多的TCP_MEM_HIT ，这表明该文件是从内存缓存读取的，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>已经起作用了！你再用浏览器打开该文件，应该是快如闪电了。。呵呵，大功告成了！还有其他类型的HIT，如TCP_HIT等等，这些是从磁盘读取的，我觉得加速的意义不大，只不过缓解了<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/apache" title="apache" rel="nofollow" target="_blank">apache</a></span>的压力而已。</p>
<p>相应于HTTP请求，下列标签可能出现在access.log文件的第四个域。</p>
<p><strong>TCP_HIT</strong></p>
<p>Squid发现请求资源的貌似新鲜的拷贝，并将其立即发送到客户端。</p>
<p><strong>TCP_MISS</strong></p>
<p>Squid没有请求资源的cache拷贝。</p>
<p><strong>TCP_REFERSH_HIT</strong></p>
<p>Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。原始服务器返回304（未修改）响应，指示<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/squid-2" title="查看 squid 的全部文章" target="_blank">squid</a></span>的拷贝仍旧是新鲜的。</p>
<p><strong>TCP_REF_FAIL_HIT</strong></p>
<p>Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。然而，原始服务器响应失败，或者返回的响应Squid不能理解。在此情形下，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/squid-2" title="查看 squid 的全部文章" target="_blank">squid</a></span>发送现有cache拷贝（很可能是陈旧的）到客户端。</p>
<p><strong>TCP_REFRESH_MISS</strong></p>
<p>Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。原始服务器响应新的内容，指示这个cache拷贝确实是陈旧的。</p>
<p><strong>TCP_CLIENT_REFRESH_MISS</strong></p>
<p>Squid发现了请求资源的拷贝，但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器，强迫cache确认。</p>
<p><strong>TCP_IMS_HIT</strong></p>
<p>客户端发送确认请求，Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端，而不联系原始服务器。<br />
<strong><br />
TCP_SWAPFAIL_MISS</strong></p>
<p>Squid发现请求资源的有效拷贝，但从磁盘装载它失败。这时squid发送请求到原始服务器，就如同这是个cache丢失一样。</p>
<p><strong>TCP_NEGATIVE_HIT</strong></p>
<p>在对原始服务器的请求导致HTTP错误时，Squid也会cache这个响应。在短时间内对这些资源的重复请求，导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache，不会写往磁盘。下列HTTP状态码可能导致否定 cache（也遵循于其他约束）： 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。</p>
<p><strong>TCP_MEM_HIT</strong></p>
<p>Squid在内存cache里发现请求资源的有效拷贝，并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如，某些cache在内存里，但要求确认的响应，会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。</p>
<p><strong>TCP_DENIED</strong></p>
<p>因为http_access或http_reply_access规则，客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-，然而被http_reply_access拒绝的请求，在相应地方有一个有效值。</p>
<p><strong>TCP_OFFLINE_HIT</strong></p>
<p>当offline_mode激活时，Squid对任何cache响应返回cache命中，而不用考虑它的新鲜程度。</p>
<p><strong>TCP_REDIRECT</strong></p>
<p>重定向程序告诉Squid产生一个HTTP重定向到新的URI（见11.1节）。正常的，Squid不会记录这些重定向。假如要这样做，必须在编译squid前，手工定义LOG_TCP_REDIRECTS预处理指令。</p>
<p><strong>NONE</strong></p>
<p>无分类的结果用于特定错误，例如无效主机名。</p>
<p>相应于ICP查询，下列标签可能出现在access.log文件的第四域。</p>
<p><strong>UDP_HIT</strong></p>
<p>Squid在cache里发现请求资源的貌似新鲜的拷贝。</p>
<p><strong>UDP_MISS</strong></p>
<p>Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求，就可能是个cache丢失。请对比UDP_MISS_NOFETCH。</p>
<p><strong>UDP_MISS_NOFETCH</strong></p>
<p>跟UDP_MISS类似，不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项，Squid在启动并编译其内存索引时，会返回这个标签而不是UDP_MISS。</p>
<p><strong>UDP_DENIED</strong></p>
<p>因为icp_access规则，ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED，并且客户端数据库激活了（见附录A），Squid在1小时内，停止发送任何ICP响应到该客户端。若这点发生，你也可在cache.log里见到一个警告。</p>
<p><strong>UDP_INVALID</strong></p>
<p>Squid接受到无效查询（例如截断的消息、无效协议版本、URI里的空格等）。Squid发送UDP_INVALID响应到客户端。</p>
<p><span id="more-365"></span></p>
<h4>附:HTTP响应状态码</h4>
<p>Table 13-1列出了数字HTTP响应CODE和理由短句。注意Squid和其他HTTP客户端仅仅关注这些数字值。理由短句是纯解释性的，不会影响响应的意 义。对每个状态码，也提供了一个到RFC 2616的具体节的索引。注意状态码0和600是squid使用的非标准的值，不会在RFC里提到。<br />
Table 13-1. HTTP response status codes</p>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Code</td>
<td>Reason phrase</td>
<td>RFC 2616 section</td>
</tr>
<tr>
<td>0</td>
<td>No Response Received (Squid-specific)</td>
<td>N/A</td>
</tr>
<tr>
<td>1xx</td>
<td>Informational</td>
<td>10.1</td>
</tr>
<tr>
<td>100</td>
<td>Continue</td>
<td>10.1.1</td>
</tr>
<tr>
<td>101</td>
<td>Switching Protocols</td>
<td>10.1.2</td>
</tr>
<tr>
<td>2xx</td>
<td>Successful</td>
<td>10.2</td>
</tr>
<tr>
<td>200</td>
<td>OK</td>
<td>10.2.1</td>
</tr>
<tr>
<td>201</td>
<td>Created</td>
<td>10.2.2</td>
</tr>
<tr>
<td>202</td>
<td>Accepted</td>
<td>10.2.3</td>
</tr>
<tr>
<td>203</td>
<td>Non-Authoritative Information</td>
<td>10.2.4</td>
</tr>
<tr>
<td>204</td>
<td>No Content</td>
<td>10.2.5</td>
</tr>
<tr>
<td>205</td>
<td>Reset Content</td>
<td>10.2.6</td>
</tr>
<tr>
<td>206</td>
<td>Partial Content</td>
<td>10.2.7</td>
</tr>
<tr>
<td>3xx</td>
<td>Redirection</td>
<td>10.3</td>
</tr>
<tr>
<td>300</td>
<td>Multiple Choices</td>
<td>10.3.1</td>
</tr>
<tr>
<td>301</td>
<td>Moved Permanently</td>
<td>10.3.2</td>
</tr>
<tr>
<td>302</td>
<td>Found</td>
<td>10.3.3</td>
</tr>
<tr>
<td>303</td>
<td>See Other</td>
<td>10.3.4</td>
</tr>
<tr>
<td>304</td>
<td>Not Modified</td>
<td>10.3.5</td>
</tr>
<tr>
<td>305</td>
<td>Use Proxy</td>
<td>10.3.6</td>
</tr>
<tr>
<td>306</td>
<td>(Unused)</td>
<td>10.3.7</td>
</tr>
<tr>
<td>307</td>
<td>Temporary Redirect</td>
<td>10.3.8</td>
</tr>
<tr>
<td>4xx</td>
<td>Client Error</td>
<td>10.4</td>
</tr>
<tr>
<td>400</td>
<td>Bad Request</td>
<td>10.4.1</td>
</tr>
<tr>
<td>401</td>
<td>Unauthorized</td>
<td>10.4.2</td>
</tr>
<tr>
<td>402</td>
<td>Payment Required</td>
<td>10.4.3</td>
</tr>
<tr>
<td>403</td>
<td>Forbidden</td>
<td>10.4.4</td>
</tr>
<tr>
<td>404</td>
<td>Not Found</td>
<td>10.4.5</td>
</tr>
<tr>
<td>405</td>
<td>Method Not Allowed</td>
<td>10.4.6</td>
</tr>
<tr>
<td>406</td>
<td>Not Acceptable</td>
<td>10.4.7</td>
</tr>
<tr>
<td>407</td>
<td>Proxy Authentication Required</td>
<td>10.4.8</td>
</tr>
<tr>
<td>408</td>
<td>Request Timeout</td>
<td>10.4.9</td>
</tr>
<tr>
<td>409</td>
<td>Conflict</td>
<td>10.4.10</td>
</tr>
<tr>
<td>410</td>
<td>Gone</td>
<td>10.4.11</td>
</tr>
<tr>
<td>411</td>
<td>Length Required</td>
<td>10.4.12</td>
</tr>
<tr>
<td>412</td>
<td>Precondition Failed</td>
<td>10.4.13</td>
</tr>
<tr>
<td>413</td>
<td>Request Entity Too Large</td>
<td>10.4.14</td>
</tr>
<tr>
<td>414</td>
<td>Request-URI Too Long</td>
<td>10.4.15</td>
</tr>
<tr>
<td>415</td>
<td>Unsupported Media Type</td>
<td>10.4.16</td>
</tr>
<tr>
<td>416</td>
<td>Requested Range Not Satisfiable</td>
<td>10.4.17</td>
</tr>
<tr>
<td>417</td>
<td>Expectation Failed</td>
<td>10.4.18</td>
</tr>
<tr>
<td>5xx</td>
<td>Server Error</td>
<td>10.5</td>
</tr>
<tr>
<td>500</td>
<td>Internal Server Error</td>
<td>10.5.1</td>
</tr>
<tr>
<td>501</td>
<td>Not Implemented</td>
<td>10.5.2</td>
</tr>
<tr>
<td>502</td>
<td>Bad Gateway</td>
<td>10.5.3</td>
</tr>
<tr>
<td>503</td>
<td>Service Unavailable</td>
<td>10.5.4</td>
</tr>
<tr>
<td>504</td>
<td>Gateway Timeout</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/squid/squid%e6%97%a5%e5%bf%97%e5%86%85%e5%ae%b9%e8%af%a6%e8%a7%a3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过EXPLAIN分析低效SQL 的执行计划</title>
		<link>http://www.linuxsee.com/mysql/%e9%80%9a%e8%bf%87explain%e5%88%86%e6%9e%90%e4%bd%8e%e6%95%88sql-%e7%9a%84%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html</link>
		<comments>http://www.linuxsee.com/mysql/%e9%80%9a%e8%bf%87explain%e5%88%86%e6%9e%90%e4%bd%8e%e6%95%88sql-%e7%9a%84%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html#comments</comments>
		<pubDate>Thu, 29 Dec 2011 08:53:25 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[explain]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=362</guid>
		<description><![CDATA[我们可以通过explain 或者desc 获取mysql 如何执行SELECT 语句的信息，包括select 语句执行过程表如何连接和连接的次序。explain 可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。 mysql&#62; explain SELECT u.*,Y(n.Flocal) lat,X(n.Flocal) lng FROM ylx_user as u JOIN ylx_near_user AS n USING(Fuid) WHERE MBRContains(GeomFromText('Polygon((116.415584 40.006519,116.395260 40.033120,116.380138 39.999711,116.404332 39.981661,116.413262 40.019689,116.386783 40.028007,116.384629 39.987850,116.411660 39.989809,116.406896 40.029465, 116.381084 40.017357,116.415584 40.006519))'),n.Flocal) AND n.Ftype=0\G *************************** 1. row *************************** id: 1  select_type: SIMPLE table: n type: ALLpossible_keys: Fuid,Flocal key: NULL key_len: NULL [...]]]></description>
			<content:encoded><![CDATA[<p>我们可以通过<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/explain" title="查看 explain 的全部文章" target="_blank">explain</a></span> 或者desc 获取<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> 如何执行SELECT 语句的信息，包括select 语句执行过程表如何连接和连接的次序。<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/explain" title="查看 explain 的全部文章" target="_blank">explain</a></span> 可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。</p>
<pre><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span>&gt; <span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/explain" title="查看 explain 的全部文章" target="_blank">explain</a></span> SELECT u.*,Y(n.Flocal) lat,X(n.Flocal) lng FROM ylx_user as u JOIN ylx_near_user AS n USING(Fuid)</pre>
<pre> WHERE MBRContains(GeomFromText('Polygon((116.415584 40.006519,116.395260 40.033120,116.380138 39.999711,116.404332</pre>
<pre> 39.981661,116.413262 40.019689,116.386783 40.028007,116.384629 39.987850,116.411660 39.989809,116.406896 40.029465,</pre>
<pre>116.381084 40.017357,116.415584 40.006519))'),n.Flocal) AND n.Ftype=0\G

*************************** 1. row ***************************

id: 1  select_type: SIMPLE

table: n

type: ALLpossible_keys: Fuid,Flocal

key: NULL

key_len: NULL

ref: NULL

rows: 30

Extra: Using where

*************************** 2. row ***************************

id: 1  select_type: SIMPLE

table: u

type: eq_refpossible_keys: PRIMARY

key: PRIMARY

key_len: 4

ref: youlianxidb.n.Fuid

rows: 1

Extra: 2 rows in set (0.00 sec)

select_type： select 类型

table： 输出结果集的表

type： 表示表的连接类型当表中仅有一行是type的值为system是最佳的连接类型；当select操作中使用索引进行表连接时type的值为ref；</pre>
<pre>当select的表连接没有使用索引时，经常会看到type的值为ALL，表示对该表进行了全表扫描，这时需要考虑通过创建索引来提高表连接的效率。

possible_keys： 表示查询时,可以使用的索引列.

key： 表示使用的索引

key_len： 索引长度

rows： 扫描范围

Extra： 执行情况的说明和描述

确定问题，并采取相应的优化措施：经过以上步骤，基本可以确认问题出现的原因，可以根据情况采取相应的措施，进行优化提高执行的效率。</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/mysql/%e9%80%9a%e8%bf%87explain%e5%88%86%e6%9e%90%e4%bd%8e%e6%95%88sql-%e7%9a%84%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

