<?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>GzV8.com &#187; 默认分类</title>
	<atom:link href="http://www.gzv8.com/archives/category/%e9%bb%98%e8%ae%a4%e5%88%86%e7%b1%bb/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gzv8.com</link>
	<description>互联网引擎</description>
	<lastBuildDate>Thu, 06 Jan 2011 04:08:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mysql 升级到 5.5 GA 时，PHP 5.2.6 编译出错！已解决！</title>
		<link>http://www.gzv8.com/archives/356</link>
		<comments>http://www.gzv8.com/archives/356#comments</comments>
		<pubDate>Thu, 06 Jan 2011 03:54:47 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=356</guid>
		<description><![CDATA[最近经常有人问我 MySQL Query Cache 相关的问题，就整理一点 MySQL Query Cache 的内容，以供参考。
顾名思义，MySQL Query Cache 就是用来缓存和 Query 相关的数据的。具体来说，Query Cache 缓存了我们客户端提交给 MySQL 的 SELECT 语句以及该语句的结果集。大概来讲，就是将 SELECT 语句和语句的结果做了一个 HASH 映射关系然后保存在一定的内存区域中。
在大部分的 MySQL 分发版本中，Query Cache 功能默认都是打开的，我们可以通过调整 MySQL Server 的参数选项打开该功能。主要由以下5个参数构成：

query_cache_limit：允许 Cache 的单条 Query 结果集的最大容量，默认是1MB，超过此参数设置的 Query 结果集将不会被 Cache
query_cache_min_res_unit：设置 Query Cache 中每次分配内存的最小空间大小，也就是每个 Query 的 Cache 最小占用的内存空间大小
query_cache_size：设置 Query Cache 所使用的内存大小，默认值为0，大小必须是1024的整数倍，如果不是整数倍，MySQL 会自动调整降低最小量以达到1024的倍数
query_cache_type：控制 Query Cache 功能的开关，可以设置为0(OFF),1(ON)和2(DEMAND)三种，意义分别如下：

0(OFF)：关闭 Query Cache 功能，任何情况下都不会使用 [...]]]></description>
			<content:encoded><![CDATA[<p>最近经常有人问我 MySQL Query Cache 相关的问题，就整理一点 MySQL Query Cache 的内容，以供参考。</p>
<p>顾名思义，MySQL Query Cache 就是用来缓存和 Query 相关的数据的。具体来说，Query Cache 缓存了我们客户端提交给 MySQL 的 SELECT 语句以及该语句的结果集。大概来讲，就是将 SELECT 语句和语句的结果做了一个 HASH 映射关系然后保存在一定的内存区域中。</p>
<p>在大部分的 MySQL 分发版本中，Query Cache 功能默认都是打开的，我们可以通过调整 MySQL Server 的参数选项打开该功能。主要由以下5个参数构成：</p>
<ul>
<li>query_cache_limit：允许 Cache 的单条 Query 结果集的最大容量，默认是1MB，超过此参数设置的 Query 结果集将不会被 Cache</li>
<li>query_cache_min_res_unit：设置 Query Cache 中每次分配内存的最小空间大小，也就是每个 Query 的 Cache 最小占用的内存空间大小</li>
<li>query_cache_size：设置 Query Cache 所使用的内存大小，默认值为0，大小必须是1024的整数倍，如果不是整数倍，MySQL 会自动调整降低最小量以达到1024的倍数</li>
<li>query_cache_type：控制 Query Cache 功能的开关，可以设置为0(OFF),1(ON)和2(DEMAND)三种，意义分别如下：
<ul>
<li>0(OFF)：关闭 Query Cache 功能，任何情况下都不会使用 Query Cache</li>
<li>1(ON)：开启 Query Cache 功能，但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后，将不使用Query Cache</li>
<li>2(DEMAND)：开启 Query Cache 功能，但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后，才使用 Query Cache</li>
</ul>
</li>
<li>query_cache_wlock_invalidate：控制当有写锁定发生在表上的时刻是否先失效该表相关的 Query Cache，如果设置为 1(TRUE)，则在写锁定的同时将失效该表相关的所有 Query Cache，如果设置为0(FALSE)则在锁定时刻仍然允许读取该表相关的 Query Cache。</li>
</ul>
<p><strong>Query Cache 如何处理子查询的？</strong><br />
这是我遇到的最为常见的一个问题。其实 Query Cache 是以客户端请求提交的 Query 为对象来处理的，只要客户端请求的是一个 Query，无论这个 Query 是一个简单的单表查询还是多表 Join，亦或者是带有子查询的复杂 SQL，都被当作成一个 Query，不会被分拆成多个 Query 来进行 Cache。所以，存在子查询的复杂 Query 也只会产生一个Cache对象，子查询不会产生单独的Cache内容。UNION[ALL] 类型的语句也同样如此。</p>
<p><strong>Query Cache 是以 block 的方式存储的数据块吗？</strong><br />
不是，Query Cache 中缓存的内容仅仅只包含该 Query 所需要的结果数据，是结果集。当然，并不仅仅只是结果数据，还包含与该结果相关的其他信息，比如产生该 Cache 的客户端连接的字符集，数据的字符集，客户端连接的 Default Database等。</p>
<p><strong>Query Cache 为什么效率会非常高，即使所有数据都可以 Cache 进内存的情况下，有些时候也不如使用 Query Cache 的效率高？</strong><br />
Query Cache 的查找，是在 MySQL 接受到客户端请求后在对 Query 进行权限验证之后，SQL 解析之前。也就是说，当 MySQL 接受到客户端的SQL后，仅仅只需要对其进行相应的权限验证后就会通过 Query Cache 来查找结果，甚至都不需要经过 Optimizer 模块进行执行计划的分析优化，更不许要发生任何存储引擎的交互，减少了大量的磁盘 IO 和 CPU 运算，所以效率非常高。</p>
<p><strong>客户端提交的 SQL 语句大小写对 Query Cache 有影响吗？</strong><br />
有，由于 Query Cache 在内存中是以 HASH 结构来进行映射，HASH 算法基础就是组成 SQL 语句的字符，所以必须要整个 SQL 语句在字符级别完全一致，才能在 Query Cache 中命中，即使多一个空格也不行。</p>
<p><strong>一个 SQL 语句在 Query Cache 中的内容，在什么情况下会失效？</strong><br />
为了保证 Query Cache 中的内容与是实际数据绝对一致，当表中的数据有任何变化，包括新增，修改，删除等，都会使所有引用到该表的 SQL 的 Query Cache 失效。</p>
<p><strong>为什么我的系统在开启了 Query Cache 之后整体性能反而下降了？</strong><br />
当开启了 Query Cache 之后，尤其是当我们的 query_cache_type 参数设置为 1 以后，MySQL 会对每个 SELECT 语句都进行 Query Cache 查找，查找操作虽然比较简单，但仍然也是要消耗一些 CPU 运算资源的。而由于 Query Cache 的失效机制的特性，可能由于表上的数据变化比较频繁，大量的 Query Cache 频繁的被失效，所以 Query Cache 的命中率就可能比较低下。所以有些场景下，Query Cache 不仅不能提高效率，反而可能造成负面影响。</p>
<p><strong>如何确认一个系统的 Query Cache 的运行是否健康，命中率如何，设置量是否足够？</strong><br />
MySQL 提供了一系列的 Global Status 来记录 Query Cache 的当前状态，具体如下：</p>
<p>mysql&gt; SHOW VARIABLES LIKE &#8216;%query_cache%&#8217;;</p>
<ul>
<li>Qcache_free_blocks：目前还处于空闲状态的 Query Cache 中内存 Block 数目</li>
<li>Qcache_free_memory：目前还处于空闲状态的 Query Cache 内存总量</li>
<li>Qcache_hits：Query Cache 命中次数</li>
<li>Qcache_inserts：向 Query Cache 中插入新的 Query Cache 的次数，也就是没有命中的次数</li>
<li>Qcache_lowmem_prunes：当 Query Cache 内存容量不够，需要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数</li>
<li>Qcache_not_cached：没有被 Cache 的 SQL 数，包括无法被 Cache 的 SQL 以及由于 query_cache_type 设置的不会被 Cache 的 SQL</li>
<li>Qcache_queries_in_cache：目前在 Query Cache 中的 SQL 数量</li>
<li>Qcache_total_blocks：Query Cache 中总的 Block 数量</li>
</ul>
<p>可以根据这几个状态计算出 Cache 命中率，计算出 Query Cache 大小设置是否足够，总的来说，我个人不建议将 Query Cache 的大小设置超过256MB，这也是业界比较常用的做法。<br />
<strong><br />
MySQL Cluster 是否可以使用 Query Cache？</strong><br />
其实在我们的生产环境中也没有使用 MySQL Cluster，所以我也没有在 MySQL Cluster 环境中使用 Query Cache 的实际经验，只是 MySQL 文档中说明确实可以在 MySQL Cluster 中使用 Query Cache。从 MySQL Cluster 的原理来分析，也觉得应该可以使用，毕竟 SQL 节点和数据节点比较独立，各司其职，只是 Cache 的失效机制会要稍微复杂一点。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/356/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>res://ieframe.dll/acr_error.htm错误解决办法&#124;ie8网站还原错误真正可行解决方法</title>
		<link>http://www.gzv8.com/archives/346</link>
		<comments>http://www.gzv8.com/archives/346#comments</comments>
		<pubDate>Sat, 23 Oct 2010 05:45:39 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=346</guid>
		<description><![CDATA[
ie8网站还原错误真正可行解决方法，今天上午打开电脑，提示更新系统补丁，于是就把推荐的最重要的三个补丁安装了。上QQ打开QQ空间IE8浏览器页面突然快速切换，然后马上出现网站还原错误，网址头部出现res://ieframe.dll /acr_error.htm，经测试QQ空间等互动性网站都会出现这个问题。
使用了IE修复，但还是不行，在网上查了下也没有解决方法，只看到一篇文章说重装IE8可以解决这个问题。但既然是重装IE，我想这也不能算作解决方法。经过初步判断，怀疑是上午更新补丁产生的问题，其中最有可能的补丁就是：Internet Explorer 8 的 JSON 互操作性。
ie8网站还原错误真正可行解决方法，上微软官网查看了该补丁的介绍：根据新的 ECMAScript（第五版标准），安装本更新程序可以提高 Internet Explorer 8 的 JSON 互操作性。安装本更新程序之后，可能必须重新启动计算机。
解决方法：删除Internet Explorer 8 的 JSON 互操作性这个补丁，该补丁编号KB976662。首先进入控制面板——添加/删除程序——显示更新——找到编号KB976662——删除。
ie8网站还原错误真正可行解决方法，删除后需要重新启动，经测试QQ空间等互动性网站打开正常。以上方法系原创，在WIN7 64+IE8下测试可行。

]]></description>
			<content:encoded><![CDATA[<div id="nwnr">
<p>ie8网站还原错误真正可行解决方法，今天上午打开电脑，提示更新系统补丁，于是就把推荐的最重要的三个补丁安装了。上QQ打开QQ空间IE8浏览器页面突然快速切换，然后马上出现<span style="font-family: Arial;">网站还原错误，网址头部出现<span style="font-family: Arial;">res://ieframe.dll /acr_error.htm，</span>经测试QQ空间等互动性网站都会出现这个问题。</p>
<p>使用了IE修复，但还是不行，在网上查了下也没有解决方法，只看到一篇文章说重装IE8可以解决这个问题。但既然是重装IE，我想这也不能算作解决方法。经过初步判断，怀疑是上午更新补丁产生的问题，其中最有可能的补丁就是：<span style="font-family: Arial;">Internet Explorer 8 的 JSON 互操作性。</span></span></p>
<p>ie8网站还原错误真正可行解决方法，上微软官网查看了该补丁的介绍：根据新的 ECMAScript（第五版标准），安装本更新程序可以提高 Internet Explorer 8 的 JSON 互操作性。安装本更新程序之后，可能必须重新启动计算机。</p>
<p>解决方法：删除Internet Explorer 8 的 JSON 互操作性这个补丁，该补丁编号KB976662。首先进入控制面板——添加/删除程序——显示更新——找到编号KB976662——删除。</p>
<p>ie8网站还原错误真正可行解决方法，删除后需要重新启动，经测试QQ空间等互动性网站打开正常。以上方法系原创，在WIN7 64+IE8下测试可行。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/346/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>据说&#8230;Nginx 的 Writing 高上来后压下去的方法。</title>
		<link>http://www.gzv8.com/archives/339</link>
		<comments>http://www.gzv8.com/archives/339#comments</comments>
		<pubDate>Wed, 30 Jun 2010 04:20:11 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=339</guid>
		<description><![CDATA[vi /etc/sysctl.conf
加多一行
net.ipv4.tcp_keepalive_time = 90
保存退出，sysctl -p
观察成效中&#8230;.
观察了数天，没用！！！
于是直接升级到 Nginx 0.8.45 问题解决
]]></description>
			<content:encoded><![CDATA[<p>vi /etc/sysctl.conf</p>
<p>加多一行</p>
<p>net.ipv4.tcp_keepalive_time = 90</p>
<p>保存退出，sysctl -p</p>
<p>观察成效中&#8230;.</p>
<p>观察了数天，没用！！！</p>
<p>于是直接升级到 Nginx 0.8.45 问题解决</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/339/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ffmpeg命令使用详解</title>
		<link>http://www.gzv8.com/archives/331</link>
		<comments>http://www.gzv8.com/archives/331#comments</comments>
		<pubDate>Fri, 07 May 2010 06:32:13 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=331</guid>
		<description><![CDATA[ffmpeg真得太棒了，刚接触就感受到了它的强大，轻松几条命令就可以完成你的工作。
把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi：
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024&#215;768 -author skypp -vcodec mpeg4 darkdoor.avi
ffmpeg还支持mov格式：
$ ffmpeg  -i darkdoor.%3d.jpg darkdoor.mov
要查看你的ffmpeg支持哪些格式，可以用如下命令：
$ ffmpeg -formats &#124; less
还可以把视频文件导出成jpg序列帧：
$ ffmpeg -i bc-cinematic-en.avi example.%d.jpg
debian下安装ffmpeg很简单：
＃apt-get install ffmpeg
######################################
下面是转来的使用说明，慢慢研究吧，嘿嘿
######################################
ffmpeg使用语法
ffmpeg使用语法：
ffmpeg [[options][`-i' input_file]]&#8230; {[options] output_file}&#8230;
如果没有输入文件，那么视音频捕捉就会起作用。
作为通用的规则，选项一般用于下一个特定的文件。如果你给 –b 64选项，改选会设置下一个视频速率。对于原始输入文件，格式选项可能是需要的。
缺省情况下，ffmpeg试图尽可能的无损转换，采用与输入同样的音频视频参数来输出。
3．选项
a) 通用选项
-L license
-h 帮助
-fromats 显示可用的格式，编解码的，协议的。。。
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-comment string [...]]]></description>
			<content:encoded><![CDATA[<div id="art">ffmpeg真得太棒了，刚接触就感受到了它的强大，轻松几条命令就可以完成你的工作。</p>
<p>把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi：<br />
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024&#215;768 -author skypp -vcodec mpeg4 darkdoor.avi</p>
<p>ffmpeg还支持mov格式：<br />
$ ffmpeg  -i darkdoor.%3d.jpg darkdoor.mov</p>
<p>要查看你的ffmpeg支持哪些格式，可以用如下命令：<br />
$ ffmpeg -formats | less</p>
<p>还可以把视频文件导出成jpg序列帧：<br />
$ ffmpeg -i bc-cinematic-en.avi example.%d.jpg</p>
<p>debian下安装ffmpeg很简单：<br />
＃apt-get install ffmpeg</p>
<p>######################################<br />
下面是转来的使用说明，慢慢研究吧，嘿嘿<br />
######################################</p>
<h3>ffmpeg使用语法</h3>
<p>ffmpeg使用语法：</p>
<p>ffmpeg [[options][`-i' input_file]]&#8230; {[options] output_file}&#8230;</p>
<p>如果没有输入文件，那么视音频捕捉就会起作用。</p>
<p>作为通用的规则，选项一般用于下一个特定的文件。如果你给 –b 64选项，改选会设置下一个视频速率。对于原始输入文件，格式选项可能是需要的。</p>
<p>缺省情况下，ffmpeg试图尽可能的无损转换，采用与输入同样的音频视频参数来输出。</p>
<p>3．选项</p>
<p>a) 通用选项</p>
<p>-L license</p>
<p>-h 帮助</p>
<p>-fromats 显示可用的格式，编解码的，协议的。。。</p>
<p>-f fmt 强迫采用格式fmt</p>
<p>-I filename 输入文件</p>
<p>-y 覆盖输出文件</p>
<p>-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持</p>
<p>-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持</p>
<p>-title string 设置标题</p>
<p>-author string 设置作者</p>
<p>-copyright string 设置版权</p>
<p>-comment string 设置评论</p>
<p>-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项（比特率，编解码以及缓冲区大小）自动设置 ，只需要输入如下的就可以了：<br />
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg</p>
<p>-hq 激活高质量设置</p>
<p>-itsoffset offset 设置以秒为基准的时间偏移，该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳，定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持</p>
<p>b) 视频选项</p>
<p>-b bitrate 设置比特率，缺省200kb/s</p>
<p>-r fps 设置帧频 缺省25</p>
<p>-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用：<br />
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576</p>
<p>-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777</p>
<p>-croptop size 设置顶部切除带大小 像素单位</p>
<p>-cropbottom size –cropleft size –cropright size</p>
<p>-padtop size 设置顶部补齐的大小 像素单位</p>
<p>-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数，红:绿:兰排列，比如 000000代表黑色)</p>
<p>-vn 不做视频记录</p>
<p>-bt tolerance 设置视频码率容忍度kbit/s</p>
<p>-maxrate bitrate设置最大视频码率容忍度</p>
<p>-minrate bitreate 设置最小视频码率容忍度</p>
<p>-bufsize size 设置码率控制缓冲区大小</p>
<p>-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。</p>
<p>-sameq 使用同样视频质量作为源（VBR）</p>
<p>-pass n 选择处理遍数（1或者2）。两遍编码非常有用。第一遍生成统计信息，第二遍生成精确的请求的码率</p>
<p>-passlogfile file 选择两遍的纪录文件名为file<br />
c)高级视频选项</p>
<p>-g gop_size 设置图像组大小</p>
<p>-intra 仅适用帧内编码</p>
<p>-qscale q 使用固定的视频量化标度(VBR)</p>
<p>-qmin q 最小视频量化标度(VBR)</p>
<p>-qmax q 最大视频量化标度(VBR)</p>
<p>-qdiff q 量化标度间最大偏差 (VBR)</p>
<p>-qblur blur 视频量化标度柔化(VBR)</p>
<p>-qcomp compression 视频量化标度压缩(VBR)</p>
<p>-rc_init_cplx complexity 一遍编码的初始复杂度</p>
<p>-b_qfactor factor 在p和b帧间的qp因子</p>
<p>-i_qfactor factor 在p和i帧间的qp因子</p>
<p>-b_qoffset offset 在p和b帧间的qp偏差</p>
<p>-i_qoffset offset 在p和i帧间的qp偏差</p>
<p>-rc_eq equation 设置码率控制方程 默认tex^qComp</p>
<p>-rc_override override 特定间隔下的速率控制重载</p>
<p>-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full</p>
<p>-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC</p>
<p>-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM</p>
<p>-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE</p>
<p>-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)</p>
<p>-bf frames 使用frames B 帧，支持mpeg1,mpeg2,mpeg4</p>
<p>-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD</p>
<p>-4mv 使用4个运动矢量 仅用于mpeg4</p>
<p>-part 使用数据划分 仅用于mpeg4</p>
<p>-bug param 绕过没有被自动监测到编码器的问题</p>
<p>-strict strictness 跟标准的严格性</p>
<p>-aic 使能高级帧内编码 h263+</p>
<p>-umv 使能无限运动矢量 h263+</p>
<p>-deinterlace 不采用交织方法</p>
<p>-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织，但是损失更大</p>
<p>-psnr 计算压缩帧的psnr</p>
<p>-vstats 输出视频编码统计到vstats_hhmmss.log</p>
<p>-vhook module 插入视频处理模块 module 包括了模块名和参数，用空格分开</p>
<p>D)音频选项</p>
<p>-ab bitrate 设置音频码率</p>
<p>-ar freq 设置音频采样率</p>
<p>-ac channels 设置通道 缺省为1</p>
<p>-an 不使能音频纪录</p>
<p>-acodec codec 使用codec编解码</p>
<p>E)音频/视频捕获选项</p>
<p>-vd device 设置视频捕获设备。比如/dev/video0</p>
<p>-vc channel 设置视频捕获通道 DV1394专用</p>
<p>-tvstd standard 设置电视标准 NTSC PAL(SECAM)</p>
<p>-dv1394 设置DV1394捕获</p>
<p>-av device 设置音频设备 比如/dev/dsp<br />
F)高级选项</p>
<p>-map file:stream 设置输入流映射</p>
<p>-debug 打印特定调试信息</p>
<p>-benchmark 为基准测试加入时间</p>
<p>-hex 倾倒每一个输入包</p>
<p>-bitexact 仅使用位精确算法 用于编解码测试</p>
<p>-ps size 设置包大小，以bits为单位</p>
<p>-re 以本地帧频读数据，主要用于模拟捕获设备</p>
<p>-loop 循环输入流。只工作于图像流，用于ffserver测试</p></div>
<div>原文:http://blog.chinaunix.net/u/16166/showart_239248.html</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/331/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ImageMagick 安装笔记</title>
		<link>http://www.gzv8.com/archives/328</link>
		<comments>http://www.gzv8.com/archives/328#comments</comments>
		<pubDate>Fri, 07 May 2010 01:47:43 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=328</guid>
		<description><![CDATA[为了要把 PDF 转换做JPG，装了这个家伙。
一开始是用编译包安装的，没注意别的。
直接就 ./configure &#38;&#38; make &#38;&#38; make install 了
于是在转换的时候报错：
CRIT: rangecheck in .setuserparams
Operand stack:
    &#8211;nostringval&#8211;  &#8211;nostringval&#8211;  &#8211;nostringval&#8211;
convert: Postscript delegate failed `a215108.pdf&#8217;:  @ error/pdf.c/ReadPDFImage/648.
convert: missing an image filename `a215108.jpg&#8217; @ error/convert.c/ConvertImageCommand/2970.
查了好久原因，原来还必须安装 PDF 解析库
下载页面：http://www.imagemagick.org/download/delegates/
先编译安装 ghostscript-8.70.tar.gz
然后下载 ghostscript-fonts-std-8.11.tar.gz 里边是相关的字体文件
解压到路径：/usr/local/share/ghostscript/fonts
然后再次转换试试看。
]]></description>
			<content:encoded><![CDATA[<p>为了要把 PDF 转换做JPG，装了这个家伙。<br />
一开始是用编译包安装的，没注意别的。</p>
<p>直接就 ./configure &amp;&amp; make &amp;&amp; make install 了</p>
<p>于是在转换的时候报错：</p>
<p>CRIT: rangecheck in .setuserparams<br />
Operand stack:<br />
    &#8211;nostringval&#8211;  &#8211;nostringval&#8211;  &#8211;nostringval&#8211;<br />
convert: Postscript delegate failed `a215108.pdf&#8217;:  @ error/pdf.c/ReadPDFImage/648.<br />
convert: missing an image filename `a215108.jpg&#8217; @ error/convert.c/ConvertImageCommand/2970.</p>
<p>查了好久原因，原来还必须安装 PDF 解析库<br />
下载页面：<a href="http://www.imagemagick.org/download/delegates/">http://www.imagemagick.org/download/delegates/</a></p>
<p>先编译安装 ghostscript-8.70.tar.gz<br />
然后下载 ghostscript-fonts-std-8.11.tar.gz 里边是相关的字体文件<br />
解压到路径：/usr/local/share/ghostscript/fonts<br />
然后再次转换试试看。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/328/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>检查 TCMalloc 是否生效的方法的问题</title>
		<link>http://www.gzv8.com/archives/303</link>
		<comments>http://www.gzv8.com/archives/303#comments</comments>
		<pubDate>Tue, 20 Apr 2010 03:24:29 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=303</guid>
		<description><![CDATA[TCMalloc (google-perftools) 是用于优化C++写的多线程应用，比glibc 2.3的malloc快。这个模块可以用来让MySQL在高并发下内存占用更加稳定。
安装方法请看：http://www.oschina.net/bbs/thread/4467
一般装完这个东东后，可以通过下面的方法来检测是否生效
/usr/sbin/lsof -n &#124; grep tcmalloc
如果安装生效，那么会显示如下信息
mysqld 25580 mysql  mem       REG        3,1  1477689    1655725 /usr/local/lib/libtcmalloc.so.0.0.0
以上方法仅用于 X32 位。 
而，X64 位系统必须安装 libunwind ，(其实在X64 OS下使用TCMalloc，必须安装libunwind) 而版本推荐是 0.99
然后，需要创建软连接 ln -s /usr/local/lib/libunwind.so.7 /usr/lib64/
跟着，编辑 mysqld_safe  ，确认在最上一行添加有 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
最后，重新启动 mysql 并再次用 /usr/sbin/lsof -n &#124; grep tcmalloc 命令检测。
得出结果：
mysqld    27683     mysql  mem       REG                8,1    1675447    9830428 /usr/local/lib/libtcmalloc.so.0.0.0
]]></description>
			<content:encoded><![CDATA[<p>TCMalloc (<a href="http://code.google.com/p/google-perftools/">google-perftools</a>) 是用于优化C++写的多线程应用，比glibc 2.3的malloc快。这个模块可以用来让MySQL在高并发下内存占用更加稳定。</p>
<p>安装方法请看：<a href="http://www.oschina.net/bbs/thread/4467">http://www.oschina.net/bbs/thread/4467</a></p>
<p>一般装完这个东东后，可以通过下面的方法来检测是否生效</p>
<p>/usr/sbin/lsof -n | grep tcmalloc</p>
<p>如果安装生效，那么会显示如下信息</p>
<p>mysqld 25580 mysql  mem       REG        3,1  1477689    1655725 /usr/local/lib/libtcmalloc.so.0.0.0</p>
<p>以上方法仅用于 X32 位。 </p>
<p>而，X64 位系统必须安装 libunwind ，(其实在X64 OS下使用TCMalloc，必须安装libunwind) 而版本推荐是 0.99</p>
<p>然后，需要创建软连接 ln -s /usr/local/lib/libunwind.so.7 /usr/lib64/</p>
<p>跟着，编辑 mysqld_safe  ，确认在最上一行添加有 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so</p>
<p>最后，重新启动 mysql 并再次用 /usr/sbin/lsof -n | grep tcmalloc 命令检测。</p>
<p>得出结果：</p>
<p>mysqld    27683     mysql  mem       REG                8,1    1675447    9830428 /usr/local/lib/libtcmalloc.so.0.0.0</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/303/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Win7 下的 HP 1522nf 网络打印机 问题.</title>
		<link>http://www.gzv8.com/archives/295</link>
		<comments>http://www.gzv8.com/archives/295#comments</comments>
		<pubDate>Fri, 16 Apr 2010 08:23:12 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=295</guid>
		<description><![CDATA[我用的是 Win7 X64 位的系统。
今天在安装网络打印机的时候出了个怪问题。
该打印机是 HP 激光打印一体机 m1522nf  从惠普网上下了驱动，对准了型号及操作系统版本。
驱动倒顺利装上了&#8230;但在 word 打印的时候，发现纸张都乱格了。
一查之后，居然 纸张大小 选择的是 信纸 。

点其下拉菜单，只有寥寥几个选项。就是看不见往常的 A4 ，B3 之类的尺寸。
原以为是 word 的问题，但就算用Win7自带的写字板都一样..
重复下了好几个驱动，折腾了半天！还是搞不定。
最后打电话到 HP 的售后服务。
工程师指路:

到打印机属性，选择高级。
选择新驱动程序。


然后选择厂商 HP
打印机型号 HP LaserJet 3050 PCL5
下一步直到完成即可！！！

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gzv8.com/wp-content/uploads/2010/04/3.jpg"></a>我用的是 Win7 X64 位的系统。<br />
今天在安装网络打印机的时候出了个怪问题。</p>
<p>该打印机是 HP 激光打印一体机 m1522nf  从惠普网上下了驱动，对准了型号及操作系统版本。<br />
驱动倒顺利装上了&#8230;但在 word 打印的时候，发现纸张都乱格了。<br />
一查之后，居然 纸张大小 选择的是 信纸 。</p>
<p><a href="http://www.gzv8.com/wp-content/uploads/2010/04/1.jpg"><img title="1" src="http://www.gzv8.com/wp-content/uploads/2010/04/1-300x181.jpg" alt="" width="300" height="181" /></a></p>
<p>点其下拉菜单，只有寥寥几个选项。就是看不见往常的 A4 ，B3 之类的尺寸。<br />
原以为是 word 的问题，但就算用Win7自带的写字板都一样..<br />
重复下了好几个驱动，折腾了半天！还是搞不定。</p>
<p>最后打电话到 HP 的售后服务。<br />
工程师指路:</p>
<p><a href="http://www.gzv8.com/wp-content/uploads/2010/04/2.jpg"><img class="alignnone size-full wp-image-297" title="2" src="http://www.gzv8.com/wp-content/uploads/2010/04/2.jpg" alt="" width="477" height="566" /></a></p>
<p>到打印机属性，选择高级。<br />
选择新驱动程序。</p>
<p><a href="http://www.gzv8.com/wp-content/uploads/2010/04/1.jpg"></a></p>
<p><a href="http://www.gzv8.com/wp-content/uploads/2010/04/3.jpg"><img class="alignnone size-full wp-image-298" title="3" src="http://www.gzv8.com/wp-content/uploads/2010/04/3.jpg" alt="" width="592" height="476" /></a></p>
<p>然后选择厂商 HP<br />
打印机型号 HP LaserJet 3050 PCL5</p>
<p>下一步直到完成即可！！！</p>
<p><a href="http://www.gzv8.com/wp-content/uploads/2010/04/3.jpg"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/295/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下Mercurial (hg)配置说明</title>
		<link>http://www.gzv8.com/archives/272</link>
		<comments>http://www.gzv8.com/archives/272#comments</comments>
		<pubDate>Mon, 22 Mar 2010 07:43:52 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=272</guid>
		<description><![CDATA[今天从源代码安装了mercurial，本来可以用命令很简单的安装：
sudo apt-get install mercurial，但是安装以后发现版本比较老，所以决定从源代码安装。
官方网站：http://mercurial.selenic.com/wiki/
下载下来解压缩以后，里面有个README文件，打开以后按照说明来：
Basic install:
$ make                  
$ make install   
$ hg debuginstall 
$ hg          
安装完成后执行 hg debuginstall 时出现了错误：
hg &#8211;version
abort: couldn&#8217;t find mercurial libraries in [/usr/local/bin /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/dist-packages /usr/lib/python2.6/dist-packages/PIL /usr/lib/python2.6/dist-packages/gst-0.10 /var/lib/python-support/python2.6 /usr/lib/python2.6/dist-packages/gtk-2.0 /var/lib/python-support/python2.6/gtk-2.0 /usr/local/lib/python2.6/dist-packages]
(check your install and PYTHONPATH)
解决方法：
export PYTHONPATH=/usr/local/lib/python2.4/site-packages
或者：
把上面的加到这两个文件中的一个： .bashrc、/etc/profile。然后就可以正常使用了。

 添加配置文件
此时再运行hg debuginstall ，会出现
Checking username&#8230;
no username supplied (see &#8220;hg help config&#8221;)
(specify a username in your .hgrc file)
1 problems [...]]]></description>
			<content:encoded><![CDATA[<p>今天从源代码安装了mercurial，本来可以用命令很简单的安装：<br />
sudo apt-get install mercurial，但是安装以后发现版本比较老，所以决定从源代码安装。</p>
<p>官方网站：<a href="http://mercurial.selenic.com/wiki/">http://mercurial.selenic.com/wiki/</a><br />
下载下来解压缩以后，里面有个README文件，打开以后按照说明来：</p>
<p>Basic install:</p>
<p>$ make                  <br />
$ make install   <br />
$ hg debuginstall <br />
$ hg          </p>
<p>安装完成后执行 hg debuginstall 时出现了错误：</p>
<p>hg &#8211;version<br />
abort: couldn&#8217;t find mercurial libraries in [/usr/local/bin /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/dist-packages /usr/lib/python2.6/dist-packages/PIL /usr/lib/python2.6/dist-packages/gst-0.10 /var/lib/python-support/python2.6 /usr/lib/python2.6/dist-packages/gtk-2.0 /var/lib/python-support/python2.6/gtk-2.0 /usr/local/lib/python2.6/dist-packages]<br />
(check your install and PYTHONPATH)</p>
<p>解决方法：<br />
export PYTHONPATH=/usr/local/lib/python2.4/site-packages<br />
或者：<br />
把上面的加到这两个文件中的一个： .bashrc、/etc/profile。然后就可以正常使用了。<br />
<strong></strong></p>
<p><strong> 添加配置文件</strong></p>
<p>此时再运行hg debuginstall ，会出现</p>
<p>Checking username&#8230;</p>
<p>no username supplied (see &#8220;hg help config&#8221;)</p>
<p>(specify a username in your .hgrc file)</p>
<p>1 problems detected, please check your install!</p>
<p>这是由于配置文件的原因</p>
<p>通过man hgrc会看到一些说明。默认是去一些位置找配置文件的。如果没有，就创建。源码中contrib文件夹下提供了一个sample.hgrc，可以拷贝过来修改</p>
<p># cp sample.hgrc /root/.hgrc</p>
<p># vim /root/.hgrc</p>
<p>这里改一下：</p>
<p>### show changed files and be a bit more verbose if True </p>
<p># verbose = True </p>
<p>### username data to appear in comits</p>
<p>### it usually takes the form: Joe User &lt;<a href="mailto:joe.user@host.com">joe.user@host.com</a>&gt; </p>
<p>username = Joe Who &lt;<a href="mailto:j.user@example.com">j.user@example.com</a>&gt;</p>
<p>verbose = True </p>
<p>### &#8212; Extensions</p>
<p>再运行hg debuginstall ，出现这个提示就可以了</p>
<p>Checking encoding (UTF-8)&#8230;</p>
<p>Checking extensions&#8230;</p>
<p>Checking templates&#8230;</p>
<p>Checking patch&#8230;</p>
<p>patching file hg-debuginstall-wCOuEs</p>
<p>Checking commit editor&#8230;</p>
<p>Checking username&#8230;</p>
<p>No problems detected</p>
<p>运行hg，出现</p>
<p>分布式软件配置管理工具 &#8211; 水银 (版本 1.5.0) </p>
<p>版权所有 (C) 2005-2009 Matt Mackall &lt;<a href="mailto:mpm@selenic.com">mpm@selenic.com</a>&gt; 和其他人。</p>
<p>这是自由软件，具体参见版权条款。这里没有任何担保，甚至没有适合</p>
<p>特定目的的隐含的担保。</p>
<p>REF: </p>
<p>unixinstall</p>
<p><a href="http://mercurial.selenic.com/wiki/UnixInstall">http://mercurial.selenic.com/wiki/UnixInstall</a></p>
<p>hgrc</p>
<p><a href="http://www.selenic.com/mercurial/hgrc.5.html">http://www.selenic.com/mercurial/hgrc.5.html</a></p>
<p>这个工具在国内很少人使用，所以中文资料匮乏．只有官方的website上有一些少得可怜的中文资料了．不过总体上来说，hg还是比较好用的。</p>
<p>接下来开始 HG 的使用</p>
<p><strong>1.建立用户hgrepo</strong></p>
<p>其它用户将用这个账户用hg<a href="http://server.chinaitlab.com/" target="_blank">服务器</a>push代码。</p>
<p>useradd hgrepo -d /home/hgrepo # add user hgrepo<br />
passwd hgrepo</p>
<p><strong>2.建立hg代码仓库</strong></p>
<p>如果代码仓库名称为project.hg,则可用如下命令。</p>
<p>cd /home/hgrepo<br />
mkdir project.hg<br />
cd project.hg<br />
hg init # 初始化代码仓库<br />
建立一个<a href="http://softtest.chinaitlab.com/" target="_blank">测试</a>文件</p>
<p>echo &#8220;hello, mercurial&#8221; &gt; sample.txt<br />
hg add  # add<br />
hg ci     # check in</p>
<p><strong>3. 打开http</strong></p>
<p>打开一个端口，让远程用户可以clone仓库中的代码.<br />
在打开端口前请确定文件权限正确。</p>
<p>更改文件权限<br />
chown hgrepo.hgrepo /home/hgrepo/project.hg -R<br />
chmod og+rw /home/hgrepo/project.hg -R<br />
打开端口</p>
<p>cd  /home/hgrepo/project.hg -R<br />
hg serve -p 8002 &amp;<br />
可将上面两行加入/etc/rc.local这样就可以在开机的时候自动运行了。</p>
<p><strong>4.使用hg</strong></p>
<p>完成步骤3以后，我们就可以使用了。</p>
<p>clone到本地</p>
<p>例如你的服务器的名字为test.</p>
<p>hg clone <a href="http://test:8002/">http://test:8002</a><br />
然后在本地目录就会出现一个project.hg的一个copy.</p>
<p>修改Client端的配置</p>
<p>更改.hg/hgrc，加上default-push和username</p>
<p>[paths]<br />
default = <a href="http://test:8002/">http://test:8002</a><br />
default-push = ssh://hgrepo@test//home/hgrepo/project.hg/<br />
[ui]<br />
username=shaohui.zheng<br />
这样你就可用hg push 向服务器提交code了。这时服务器会问你passward,这个password就是用户hgrepo的password.</p>
<p>Good Luck.</p>
<p>官方网站</p>
<p><a href="http://www.selenic.com/mercurial/">http://www.selenic.com/mercurial/</a>　</p>
<p>另外还有个 Windows 下的客户端与其配合使用</p>
<p><strong>TortoiseHg</strong></p>
<p><a href="http://www.oschina.net/p/tortoisehg">http://www.oschina.net/p/tortoisehg</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/272/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux 命令 “ls ” 的用法</title>
		<link>http://www.gzv8.com/archives/267</link>
		<comments>http://www.gzv8.com/archives/267#comments</comments>
		<pubDate>Mon, 15 Mar 2010 06:38:45 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=267</guid>
		<description><![CDATA[ls
　　ls 命令可以说是linux下最常用的命令之一。它有众多的选项，其中有很多是很有用的，你是否熟悉呢？下面列出了 ls 命令的绝大多数选项。
　　-a 列出目录下的所有文件，包括以 . 开头的隐含文件。
　　-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
　　-c 输出文件的 i 节点的修改时间，并以此排序。
　　-d 将目录象文件一样显示，而不是显示其下的文件。
　　-e 输出时间的全部信息，而不是输出简略信息。
　　-f -U 对输出的文件不排序。
　　-g 无用。
　　-i 输出文件的 i 节点的索引信息。
　　-k 以 k 字节的形式表示文件的大小。
　　-l 列出文件的详细信息。
　　-m 横向输出文件名，并以“，”作分格符。
　　-n 用数字的 UID,GID 代替名称。
　　-o 显示文件的除组信息外的详细信息。
　　-p -F 在每个文件名后附上一个字符以说明该文件的类型，“*”表示可执行的普通
　　文件；“/”表示目录；“@”表示符号链接；“&#124;”表示FIFOs；“=”表示套
　　接字(sockets)。
　　-q 用?代替不可输出的字符。
　　-r 对目录反向排序。
　　-s 在每个文件名后输出该文件的大小。
　　-t 以时间排序。
　　-u 以文件上次被访问的时间排序。
　　-x 按列输出，横向排序。
　　-A 显示除 “.”和“..”外的所有文件。
　　-B 不输出以 “~”结尾的备份文件。
　　-C 按列输出，纵向排序。
　　-G 输出文件的组的信息。
　　-L 列出链接文件名而不是链接到的文件。
　　-N 不限制文件长度。
　　-Q 把输出的文件名用双引号括起来。
　　-R 列出所有子目录下的文件。
　　-S 以文件大小排序。
　　-X 以文件的扩展名(最后一个 . 后的字符)排序。
　　-1 一行只输出一个文件。
　　&#8211;color=no 不显示彩色文件名
　　&#8211;help 在标准输出上显示帮助信息。
　　&#8211;version 在标准输出上输出版本信息并退出。
　　只列出子目录
　　1. ls [...]]]></description>
			<content:encoded><![CDATA[<p>ls</p>
<p>　　ls 命令可以说是linux下最常用的命令之一。它有众多的选项，其中有很多是很有用的，你是否熟悉呢？下面列出了 ls 命令的绝大多数选项。</p>
<p>　　-a 列出目录下的所有文件，包括以 . 开头的隐含文件。</p>
<p>　　-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。</p>
<p>　　-c 输出文件的 i 节点的修改时间，并以此排序。</p>
<p>　　-d 将目录象文件一样显示，而不是显示其下的文件。</p>
<p>　　-e 输出时间的全部信息，而不是输出简略信息。</p>
<p>　　-f -U 对输出的文件不排序。</p>
<p>　　-g 无用。</p>
<p>　　-i 输出文件的 i 节点的索引信息。</p>
<p>　　-k 以 k 字节的形式表示文件的大小。</p>
<p>　　-l 列出文件的详细信息。</p>
<p>　　-m 横向输出文件名，并以“，”作分格符。</p>
<p>　　-n 用数字的 UID,GID 代替名称。</p>
<p>　　-o 显示文件的除组信息外的详细信息。</p>
<p>　　-p -F 在每个文件名后附上一个字符以说明该文件的类型，“*”表示可执行的普通</p>
<p>　　文件；“/”表示目录；“@”表示符号链接；“|”表示FIFOs；“=”表示套</p>
<p>　　接字(sockets)。</p>
<p>　　-q 用?代替不可输出的字符。</p>
<p>　　-r 对目录反向排序。</p>
<p>　　-s 在每个文件名后输出该文件的大小。</p>
<p>　　-t 以时间排序。</p>
<p>　　-u 以文件上次被访问的时间排序。</p>
<p>　　-x 按列输出，横向排序。</p>
<p>　　-A 显示除 “.”和“..”外的所有文件。</p>
<p>　　-B 不输出以 “~”结尾的备份文件。</p>
<p>　　-C 按列输出，纵向排序。</p>
<p>　　-G 输出文件的组的信息。</p>
<p>　　-L 列出链接文件名而不是链接到的文件。</p>
<p>　　-N 不限制文件长度。</p>
<p>　　-Q 把输出的文件名用双引号括起来。</p>
<p>　　-R 列出所有子目录下的文件。</p>
<p>　　-S 以文件大小排序。</p>
<p>　　-X 以文件的扩展名(最后一个 . 后的字符)排序。</p>
<p>　　-1 一行只输出一个文件。</p>
<p>　　&#8211;color=no 不显示彩色文件名</p>
<p>　　&#8211;help 在标准输出上显示帮助信息。</p>
<p>　　&#8211;version 在标准输出上输出版本信息并退出。</p>
<p>　　只列出子目录</p>
<p>　　1. ls -F | grep /$ 或者 alias sub = &#8220;ls -F | grep /$&#8221;(linux)</p>
<p>　　2. ls -l | grep &#8220;^d&#8221; 或者 ls -lL | grep &#8220;^d&#8221; (Solaris)</p>
<p>　　计算当前目录下的文件数和目录数</p>
<p>　　下面命令可以分别计算当前目录下的文件和目录个数：</p>
<p>　　# ls -l * |grep &#8220;^-&#8221;|wc -l &#8212;- to count files</p>
<p>　　# ls -l * |grep &#8220;^d&#8221;|wc -l &#8212;&#8211; to count dir</p>
<p>　　显示彩色目录列表</p>
<p>　　打开/etc/bashrc, 加入如下一行:</p>
<p>　　alias ls=&#8221;ls &#8211;color&#8221;</p>
<p>　　下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:</p>
<p>　　1. 蓝色&#8211;&gt;目录</p>
<p>　　2. 绿色&#8211;&gt;可执行文件</p>
<p>　　3. 红色&#8211;&gt;压缩文件</p>
<p>　　4. 浅蓝色&#8211;&gt;链接文件</p>
<p>　　5. 灰色&#8211;&gt;其他文件</p>
<p>　　ls -tl &#8211;time-style=full-iso sshd</p>
<p>　　ls -ctl &#8211;time-style=long-iso</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/267/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyISAM和Innodb比较</title>
		<link>http://www.gzv8.com/archives/265</link>
		<comments>http://www.gzv8.com/archives/265#comments</comments>
		<pubDate>Mon, 15 Mar 2010 03:28:34 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[默认分类]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=265</guid>
		<description><![CDATA[浅谈MySQL存储引擎 InnoDB和MyISAM 以及行锁注意事项   
2010-02-21 18:21  
  
MyISAM 是MySQL中默认的存储引擎，一般来说不是有太多人关心这个东西。决定使用什么样的存储引擎是一个很tricky的事情，但是还是值我们去研究一下，这里的文章只考虑 MyISAM 和InnoDB这两个，因为这两个是最常见的。   
  
下面先让我们回答一些问题：   
◆你的数据库有外键吗？   
◆你需要事务支持吗？   
◆你需要全文索引吗？   
◆你经常使用什么样的查询模式？   
◆你的数据有多大？   
  
myisam只有索引缓存   
  
innodb不分索引文件数据文件 innodb buffer   
  
myisam只能管理索引，在索引数据大于分配的资源时，会由操作系统来cache；数据文件依赖于操作系统的cache。innodb不管是索引还是数据，都是自己来管理   
  
思考上面这些问题可以让你找到合适的方向，但那并不是绝对的。如果你需要事务处理或是外键，那么InnoDB 可能是比较好的方式。如果你需要全文索引，那么通常来说 MyISAM是好的选择，因为这是系统内建的，然而，我们其实并不会经常地去测试两百万行记录。所以，就算是慢一点，我们可以通过使用Sphinx从InnoDB中获得全文索引。   
  
数据的大小，是一个影响你选择什么样存储引擎的重要因素，大尺寸的数据集趋向于选择InnoDB方式，因为其支持事务处理和故障恢复。数据库的在小决定了故障恢复的时间长短，InnoDB可以利用事务日志进行数据恢复，这会比较快。而MyISAM可能会需要几个小时甚至几天来干这些事，InnoDB只需要几分钟。   
  
您操作数据库表的习惯可能也会是一个对性能影响很大的因素。比如： COUNT() 在 MyISAM 表中会非常快，而在InnoDB 表下可能会很痛苦。而主键查询则在InnoDB下会相当相当的快，但需要小心的是如果我们的主键太长了也会导致性能问题。大批的inserts 语句在MyISAM下会快一些，但是updates 在InnoDB 下会更快一些——尤其在并发量大的时候。   
  
所以，到底你检使用哪一个呢？根据经验来看，如果是一些小型的应用或项目，那么MyISAM 也许会更适合。当然，在大型的环境下使用MyISAM 也会有很大成功的时候，但却不总是这样的。如果你正在计划使用一个超大数据量的项目，而且需要事务处理或外键支持，那么你真的应该直接使用InnoDB方式。但需要记住InnoDB 的表需要更多的内存和存储，转换100GB 的MyISAM 表到InnoDB 表可能会让你有非常坏的体验。   
  
===========================================================   
  
MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚，不具有原子性。如果执行大量的SELECT，MyISAM是更好的选择。   
  
InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑，应该使用InnoDB表,   
  
对于支持事物的InnoDB类型的标，影响速度的主要原因是AUTOCOMMIT默认设置是打开的，而且程序没有显式调用BEGIN 开始事务，导致每插入一条都自动Commit，严重影响了速度。可以在执行sql前调用begin，多条sql形成一个事物（即使autocommit打开也可以），将大大提高性能。   
  
===============================================================   
  
InnoDB和MyISAM是在使用MySQL最常用的两个表类型，各有优缺点，视具体应用而定。下面是已知的两者之间的差别，仅供参考。   
  
innodb   
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level)，提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation)，因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。   
  
InnoDB 的设计目标是处理大容量数据库系统，它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上，InnoDB 是一套放在 MySQL 后台的完整数据库系统，InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里，可能包含多个文件，这与其它的不一样，举例来说，在 MyISAM 中，表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小，一般为 2 GB。   
InnoDB所有的表都保存在同一个数据文件 ibdata1 中（也可能是多个文件，或者是独立的表空间文件）,相对来说比较不好备份，免费的方案可以是拷贝数据文件、备份 binlog，或者用 mysqldump。   
  
  
MyISAM   
MyISAM 是MySQL缺省存贮引擎 .   
  
每张MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。   
  
因为MyISAM相对简单所以在效率上要优于InnoDB..小型应用使用MyISAM是不错的选择.   
  
MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦   
  
以下是一些细节和具体实现的差别：   
  
1.InnoDB不支持FULLTEXT类型的索引。   
2.InnoDB 中不保存表的具体行数，也就是说，执行select count(*) from table时，InnoDB要扫描一遍整个表来计算有多少行，但是MyISAM只要简单的读出保存好的行数即可。注意的是，当count(*)语句包含 where条件时，两种表的操作是一样的。   
3.对于AUTO_INCREMENT类型的字段，InnoDB中必须包含只有该字段的索引，但是在MyISAM表中，可以和其他字段一起建立联合索引。   
4.DELETE FROM table时，InnoDB不会重新建立表，而是一行一行的删除。   
5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的，解决方法是首先把InnoDB表改成MyISAM表，导入数据后再改成InnoDB表，但是对于使用的额外的InnoDB特性（例如外键）的表不适用。   
  
另外，InnoDB表的行锁也不是绝对的，如果在执行一个SQL语句时MySQL不能确定要扫描的范围，InnoDB表同样会锁全表，例如update table set num=1 where name like “%aaa%”   
  
任何一种表都不是万能的，只用恰当的针对业务类型来选择合适的表类型，才能最大的发挥MySQL的性能优势。   
  
===============================================================   
  
  
以下是InnoDB和MyISAM的一些联系和区别！   
  
1. 4.0以上mysqld都支持事务，包括非max版本。3.23的需要max版本mysqld才能支持事务。   
  
2. 创建表时如果不指定type则默认为myisam，不支持事务。   
可以用 show create table tablename 命令看表的类型。   
  
2.1 对不支持事务的表做start/commit操作没有任何效果，在执行commit前已经提交，测试：   
执行一个msyql：   
use test;   
drop table if exists tn;   
create table tn (a varchar(10)) type=myisam;   
drop table if exists ty;   
create table ty (a varchar(10)) type=innodb;   
  
begin;   
insert into tn values(&#8216;a&#8217;);   
insert into ty values(&#8216;a&#8217;);   
select * from tn;   
select * from ty; [...]]]></description>
			<content:encoded><![CDATA[<li>浅谈MySQL存储引擎 InnoDB和MyISAM 以及行锁注意事项   </li>
<li>2010-02-21 18:21  </li>
<li>  </li>
<li>MyISAM 是MySQL中默认的存储引擎，一般来说不是有太多人关心这个东西。决定使用什么样的存储引擎是一个很tricky的事情，但是还是值我们去研究一下，这里的文章只考虑 MyISAM 和InnoDB这两个，因为这两个是最常见的。   </li>
<li>  </li>
<li>下面先让我们回答一些问题：   </li>
<li>◆你的数据库有外键吗？   </li>
<li>◆你需要事务支持吗？   </li>
<li>◆你需要全文索引吗？   </li>
<li>◆你经常使用什么样的查询模式？   </li>
<li>◆你的数据有多大？   </li>
<li>  </li>
<li>myisam只有索引缓存   </li>
<li>  </li>
<li>innodb不分索引文件数据文件 innodb buffer   </li>
<li>  </li>
<li>myisam只能管理索引，在索引数据大于分配的资源时，会由操作系统来cache；数据文件依赖于操作系统的cache。innodb不管是索引还是数据，都是自己来管理   </li>
<li>  </li>
<li>思考上面这些问题可以让你找到合适的方向，但那并不是绝对的。如果你需要事务处理或是外键，那么InnoDB 可能是比较好的方式。如果你需要全文索引，那么通常来说 MyISAM是好的选择，因为这是系统内建的，然而，我们其实并不会经常地去测试两百万行记录。所以，就算是慢一点，我们可以通过使用Sphinx从InnoDB中获得全文索引。   </li>
<li>  </li>
<li>数据的大小，是一个影响你选择什么样存储引擎的重要因素，大尺寸的数据集趋向于选择InnoDB方式，因为其支持事务处理和故障恢复。数据库的在小决定了故障恢复的时间长短，InnoDB可以利用事务日志进行数据恢复，这会比较快。而MyISAM可能会需要几个小时甚至几天来干这些事，InnoDB只需要几分钟。   </li>
<li>  </li>
<li>您操作数据库表的习惯可能也会是一个对性能影响很大的因素。比如： COUNT() 在 MyISAM 表中会非常快，而在InnoDB 表下可能会很痛苦。而主键查询则在InnoDB下会相当相当的快，但需要小心的是如果我们的主键太长了也会导致性能问题。大批的inserts 语句在MyISAM下会快一些，但是updates 在InnoDB 下会更快一些——尤其在并发量大的时候。   </li>
<li>  </li>
<li>所以，到底你检使用哪一个呢？根据经验来看，如果是一些小型的应用或项目，那么MyISAM 也许会更适合。当然，在大型的环境下使用MyISAM 也会有很大成功的时候，但却不总是这样的。如果你正在计划使用一个超大数据量的项目，而且需要事务处理或外键支持，那么你真的应该直接使用InnoDB方式。但需要记住InnoDB 的表需要更多的内存和存储，转换100GB 的MyISAM 表到InnoDB 表可能会让你有非常坏的体验。   </li>
<li>  </li>
<li>===========================================================   </li>
<li>  </li>
<li>MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚，不具有原子性。如果执行大量的SELECT，MyISAM是更好的选择。   </li>
<li>  </li>
<li>InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑，应该使用InnoDB表,   </li>
<li>  </li>
<li>对于支持事物的InnoDB类型的标，影响速度的主要原因是AUTOCOMMIT默认设置是打开的，而且程序没有显式调用BEGIN 开始事务，导致每插入一条都自动Commit，严重影响了速度。可以在执行sql前调用begin，多条sql形成一个事物（即使autocommit打开也可以），将大大提高性能。   </li>
<li>  </li>
<li>===============================================================   </li>
<li>  </li>
<li>InnoDB和MyISAM是在使用MySQL最常用的两个表类型，各有优缺点，视具体应用而定。下面是已知的两者之间的差别，仅供参考。   </li>
<li>  </li>
<li>innodb   </li>
<li>InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level)，提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation)，因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。   </li>
<li>  </li>
<li>InnoDB 的设计目标是处理大容量数据库系统，它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上，InnoDB 是一套放在 MySQL 后台的完整数据库系统，InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里，可能包含多个文件，这与其它的不一样，举例来说，在 MyISAM 中，表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小，一般为 2 GB。   </li>
<li>InnoDB所有的表都保存在同一个数据文件 ibdata1 中（也可能是多个文件，或者是独立的表空间文件）,相对来说比较不好备份，免费的方案可以是拷贝数据文件、备份 binlog，或者用 mysqldump。   </li>
<li>  </li>
<li>  </li>
<li>MyISAM   </li>
<li>MyISAM 是MySQL缺省存贮引擎 .   </li>
<li>  </li>
<li>每张MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。   </li>
<li>  </li>
<li>因为MyISAM相对简单所以在效率上要优于InnoDB..小型应用使用MyISAM是不错的选择.   </li>
<li>  </li>
<li>MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦   </li>
<li>  </li>
<li>以下是一些细节和具体实现的差别：   </li>
<li>  </li>
<li>1.InnoDB不支持FULLTEXT类型的索引。   </li>
<li>2.InnoDB 中不保存表的具体行数，也就是说，执行select count(*) from table时，InnoDB要扫描一遍整个表来计算有多少行，但是MyISAM只要简单的读出保存好的行数即可。注意的是，当count(*)语句包含 where条件时，两种表的操作是一样的。   </li>
<li>3.对于AUTO_INCREMENT类型的字段，InnoDB中必须包含只有该字段的索引，但是在MyISAM表中，可以和其他字段一起建立联合索引。   </li>
<li>4.DELETE FROM table时，InnoDB不会重新建立表，而是一行一行的删除。   </li>
<li>5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的，解决方法是首先把InnoDB表改成MyISAM表，导入数据后再改成InnoDB表，但是对于使用的额外的InnoDB特性（例如外键）的表不适用。   </li>
<li>  </li>
<li>另外，InnoDB表的行锁也不是绝对的，如果在执行一个SQL语句时MySQL不能确定要扫描的范围，InnoDB表同样会锁全表，例如update table set num=1 where name like “%aaa%”   </li>
<li>  </li>
<li>任何一种表都不是万能的，只用恰当的针对业务类型来选择合适的表类型，才能最大的发挥MySQL的性能优势。   </li>
<li>  </li>
<li>===============================================================   </li>
<li>  </li>
<li>  </li>
<li>以下是InnoDB和MyISAM的一些联系和区别！   </li>
<li>  </li>
<li>1. 4.0以上mysqld都支持事务，包括非max版本。3.23的需要max版本mysqld才能支持事务。   </li>
<li>  </li>
<li>2. 创建表时如果不指定type则默认为myisam，不支持事务。   </li>
<li>可以用 show create table tablename 命令看表的类型。   </li>
<li>  </li>
<li>2.1 对不支持事务的表做start/commit操作没有任何效果，在执行commit前已经提交，测试：   </li>
<li>执行一个msyql：   </li>
<li>use test;   </li>
<li>drop table if exists tn;   </li>
<li>create table tn (a varchar(10)) type=myisam;   </li>
<li>drop table if exists ty;   </li>
<li>create table ty (a varchar(10)) type=innodb;   </li>
<li>  </li>
<li>begin;   </li>
<li>insert into tn values(&#8216;a&#8217;);   </li>
<li>insert into ty values(&#8216;a&#8217;);   </li>
<li>select * from tn;   </li>
<li>select * from ty;   </li>
<li>都能看到一条记录   </li>
<li>  </li>
<li>执行另一个mysql：   </li>
<li>use test;   </li>
<li>select * from tn;   </li>
<li>select * from ty;   </li>
<li>只有tn能看到一条记录   </li>
<li>然后在另一边   </li>
<li>commit;   </li>
<li>才都能看到记录。   </li>
<li>  </li>
<li>3. 可以执行以下命令来切换非事务表到事务（数据不会丢失），innodb表比myisam表更安全：   </li>
<li>   alter table tablename type=innodb;   </li>
<li>  </li>
<li>3.1 innodb表不能用repair table命令和myisamchk -r table_name   </li>
<li>但可以用check table，以及mysqlcheck [OPTIONS] database [tables]   </li>
<li>  </li>
<li>==============================================================   </li>
<li>  </li>
<li>mysql中使用select for update的必须针对InnoDb，并且是在一个事务中，才能起作用。   </li>
<li>  </li>
<li>select的条件不一样，采用的是行级锁还是表级锁也不一样。   </li>
<li>转http://www.neo.com.tw/archives/900 的说明   </li>
<li>  </li>
<li>由于InnoDB 预设是Row-Level Lock，所以只有「明确」的指定主键，MySQL 才会执行Row lock (只锁住被选取的资料例) ，否则MySQL 将会执行Table Lock (将整个资料表单给锁住)。   </li>
<li>  </li>
<li>  </li>
<li>举个例子:   </li>
<li>  </li>
<li>假设有个表单products ，里面有id 跟name 二个栏位，id 是主键。   </li>
<li>  </li>
<li>例1: (明确指定主键，并且有此笔资料，row lock)   </li>
<li>  </li>
<li>SELECT * FROM products WHERE id=&#8217;3&#8242; FOR UPDATE;   </li>
<li>  </li>
<li>例2: (明确指定主键，若查无此笔资料，无lock)   </li>
<li>  </li>
<li>SELECT * FROM products WHERE id=&#8217;-1&#8242; FOR UPDATE;   </li>
<li>  </li>
<li>例2: (无主键，table lock)   </li>
<li>  </li>
<li>SELECT * FROM products WHERE name=&#8217;Mouse&#8217; FOR UPDATE;   </li>
<li>  </li>
<li>例3: (主键不明确，table lock)   </li>
<li>  </li>
<li>SELECT * FROM products WHERE id&lt;&gt;&#8217;3&#8242; FOR UPDATE;   </li>
<li>  </li>
<li>例4: (主键不明确，table lock)   </li>
<li>  </li>
<li>SELECT * FROM products WHERE id LIKE &#8217;3&#8242; FOR UPDATE;   </li>
<li>  </li>
<li>注1:   </li>
<li>FOR UPDATE 仅适用于InnoDB，且必须在交易区块(BEGIN/COMMIT)中才能生效。  </li>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/265/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

