<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/rss.xsl" type="text/xsl" media="screen"?>
<!--åå®¢åå«æ¥å¿ï¼æ¯äºèç½ä¸ä¸ç§ä¸ªäººä¹¦ååäººéäº¤æµçå·¥å·ãéè¿åå®¢è®°å½ä¸å·¥ä½ãå­¦ä¹ ãçæ´»åå¨±ä¹çç¹æ»´ï¼çè³è§ç¹åè¯è®ºï¼ä»èå¨ç½ä¸å»ºç«ä¸ä¸ªå®å¨å±äºèªå·±çä¸ªäººå¤©å°ãå»ºç«åå®¢ï¼æå©äºä»äººå¨äºèç½ä¸æ´å¥½å°è®¤è¯æ¨ï¼ä¹æå©äºæ¨æ´å¥½çåå«äººäº¤æµãåå®¢ä¸çæ¯ä¸ä¸ªå¼æ¾åå±äº«çä¸çãæçåå®¢ç±æçå¬å¸å¼åï¼ç®åæ¯åè´¹æå¡ã--> 
<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:ppp="http://blog.sohu.com/ppp/"
	>

	<channel>
		<title>Data &#38;#38; Architecture DBA</title>
		<link>http://zhaolinjnu.blog.sohu.com/</link>
		<description><![CDATA[Welcome to my world]]></description>
		<pubDate>Tue, 23 Jun 2009 22:41:17 +0800</pubDate>
		<ppp:ebi>438b535792</ppp:ebi>
		<generator>搜狐博客</generator>
		<image>
			<title>http://blog.sohu.com</title>
			<url>http://js.pp.sohu.com/ppp/blog/images/common/logo_150_60.gif</url>
			<link>http://blog.sohu.com/</link>
			<width>100</width>
			<height>43</height>
			<description>搜狐博客</description>
		</image>
		<item>
			<title>淘宝开放平台（Taobao Open Platform）</title>
			<link>http://zhaolinjnu.blog.sohu.com/119205658.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/119205658.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Tue, 23 Jun 2009 22:41:17 +0800</pubDate>
			<category>互联网</category>
			<guid>http://zhaolinjnu.blog.sohu.com/119205658.html</guid>
			<description><![CDATA[<p>淘宝开放平台Beta于2009年6月22日起，正式开始对外公测.要了解更多详情，请查看网址：<a href="http://open.taobao.com/">http://open.taobao.com/</a></p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1864.img.pp.sohu.com.cn/images/blog/2009/6/23/22/9/122ba17cc17g215.jpg" border="0" /></p>]]></description>
		</item>
		    
		
		<item>
			<title>利用innodb_table_monitor来trace innodb内部信息</title>
			<link>http://zhaolinjnu.blog.sohu.com/119143540.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/119143540.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Tue, 23 Jun 2009 09:51:11 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/119143540.html</guid>
			<description><![CDATA[<p>Mysql不像ORACLE，提供各种各样的dump方式 ，可以了解数据库的各种内存结构，数据存储结构。mysql只有少量的一些trace方式，下面向大家介绍如何通过innodb_table_monitor来窥视innodb存储引擎表及其索引的存储方式。这篇文章，也纠正上一篇文章《INNODB与ORACLE单行存储长度对比》中存在的问题，上文中将oracle中一个table的大小实际上与mysql(table+primary index)进行了比较，这个比较本身就是不公平的，对大家的误导表示歉意。</p>
<p>创建数据库<br />create database dc_test<br />character set gbk;</p>
<p>创建测试表test1<br />CREATE TABLE `test1` (<br />&nbsp; `id` int(11) NOT NULL auto_increment,<br />&nbsp; `title` varchar(50) NOT NULL,<br />&nbsp; `user_id` int(11) NOT NULL,<br />&nbsp; `gmt_create` datetime NOT NULL,<br />&nbsp; `gmt_modified` datetime NOT NULL,<br />&nbsp; PRIMARY KEY&nbsp; (`id`),<br />&nbsp; KEY `idx_test1_userid` (`user_id`,`gmt_create`)<br />) ENGINE=InnoDB&nbsp; DEFAULT CHARSET=gbk</p>
<p>重复写入数据<br />mysql&gt; insert into test1(title,user_id,gmt_create,gmt_modified) values('this is a test',1001,now(),now());<br />Query OK, 1 row affected (0.00 sec)</p>
<p><br />mysql&gt; insert into test1(title,user_id,gmt_create,gmt_modified) select title,user_id,gmt_create,gmt_modified from test1;<br />Query OK, 786432 rows affected (13.65 sec)<br />Records: 786432&nbsp; Duplicates: 0&nbsp; Warnings: 0</p>
<p>mysql&gt; select count(*) from test1;<br />+----------+<br />| count(*) |<br />+----------+<br />|&nbsp; 1572864 | <br />+----------+<br />1 row in set (0.59 sec)</p>
<p>创建一张只有主键的测试表<br />CREATE TABLE `test2` (<br />&nbsp; `id` int(11) NOT NULL auto_increment,<br />&nbsp; `title` varchar(50) NOT NULL,<br />&nbsp; `user_id` int(11) NOT NULL,<br />&nbsp; `gmt_create` datetime NOT NULL,<br />&nbsp; `gmt_modified` datetime NOT NULL,<br />&nbsp; PRIMARY KEY&nbsp; (`id`)<br />) ENGINE=InnoDB DEFAULT CHARSET=gbk</p>
<p>创建一张没有主键的测试表test3<br />CREATE TABLE `test3` (<br />&nbsp; `id` int(11) NOT NULL,<br />&nbsp; `title` varchar(50) NOT NULL,<br />&nbsp; `user_id` int(11) NOT NULL,<br />&nbsp; `gmt_create` datetime NOT NULL,<br />&nbsp; `gmt_modified` datetime NOT NULL<br />) ENGINE=InnoDB DEFAULT CHARSET=gbk</p>
<p>创建innodb_table_monitor表，通知innodb存储引擎将数据输出到/etc/my.cnf中定义的log-error文件里<br />mysql&gt; create table innodb_table_monitor(a int) engine=innodb;<br />Query OK, 0 rows affected (0.05 sec)</p>
<p><br />===========================================<br />090623&nbsp; 8:15:25 INNODB TABLE MONITOR OUTPUT<br />===========================================<br />--------------------------------------<br />TABLE: name dc_test/innodb_table_monitor, id 0 24, columns 5, indexes 1, appr.rows 0<br />&nbsp; COLUMNS: a: DATA_INT len 4 prec 0; DB_ROW_ID: DATA_SYS prtype 256 len 6 prec 0; DB_TRX_ID: DATA_SYS prtype 257 len 6 prec 0; DB_ROLL_PTR: DATA_SYS prtype 258 len 7 prec 0; <br />&nbsp; INDEX: name GEN_CLUST_INDEX, id 0 28, fields 0/4, type 1<br />&nbsp;&nbsp; root page 50, appr.key vals 0, leaf pages 1, size pages 1<br />&nbsp;&nbsp; FIELDS:&nbsp; DB_ROW_ID DB_TRX_ID DB_ROLL_PTR a<br />&nbsp;&nbsp; --<br />&nbsp;&nbsp; <br />--------------------------------------<br />TABLE: name dc_test/test1, id 0 22, columns 9, indexes 2, appr.rows 1573185<br />&nbsp; COLUMNS: id: DATA_INT len 4 prec 0; title: type 12 len 100 prec 0; user_id: DATA_INT len 4 prec 0; gmt_create: DATA_INT len 8 prec 0; gmt_modified: DATA_INT len 8 prec 0; DB_ROW_ID: DATA_SYS prtype 256 len 6 prec 0; DB_TRX_ID: DATA_SYS prtype 257 len 6 prec 0; DB_ROLL_PTR: DATA_SYS prtype 258 len 7 prec 0; <br />&nbsp; INDEX: name PRIMARY, id 0 25, fields 1/7, type 3<br />&nbsp;&nbsp; root page 57, appr.key vals 1573185, leaf pages 5959, size pages 5991&nbsp; --注意这个值<br />&nbsp;&nbsp; FIELDS:&nbsp; id DB_TRX_ID DB_ROLL_PTR title user_id gmt_create gmt_modified<br />&nbsp; INDEX: name idx_test1_userid, id 0 26, fields 2/3, type 0<br />&nbsp;&nbsp; root page 62, appr.key vals 9, leaf pages 2093, size pages 2279<br />&nbsp;&nbsp; FIELDS:&nbsp; user_id gmt_create id&nbsp;&nbsp; <br />&nbsp;&nbsp; --主键与表的数据是存放在一起的,所以primary index(size pages 5991) 比 second index(size pages 2279) 大;从索引字段上看，second index(idx_test1_userid)包含primary indexed columns(id)<br />--------------------------------------<br />TABLE: name dc_test/test2, id 0 14, columns 9, indexes 1, appr.rows 0<br />&nbsp; COLUMNS: id: DATA_INT len 4 prec 0; title: type 12 len 100 prec 0; user_id: DATA_INT len 4 prec 0; gmt_create: DATA_INT len 8 prec 0; gmt_modified: DATA_INT len 8 prec 0; DB_ROW_ID: DATA_SYS prtype 256 len 6 prec 0; DB_TRX_ID: DATA_SYS prtype 257 len 6 prec 0; DB_ROLL_PTR: DATA_SYS prtype 258 len 7 prec 0; <br />&nbsp; INDEX: name PRIMARY, id 0 16, fields 1/7, type 3<br />&nbsp;&nbsp; root page 63, appr.key vals 0, leaf pages 1, size pages 1<br />&nbsp;&nbsp; FIELDS:&nbsp; id DB_TRX_ID DB_ROLL_PTR title user_id gmt_create gmt_modified<br />&nbsp;&nbsp; --主键与表的数据是存放在一起的<br />&nbsp;&nbsp; <br />--------------------------------------<br />TABLE: name dc_test/test3, id 0 17, columns 9, indexes 1, appr.rows 0<br />&nbsp; COLUMNS: id: DATA_INT len 4 prec 0; title: type 12 len 100 prec 0; user_id: DATA_INT len 4 prec 0; gmt_create: DATA_INT len 8 prec 0; gmt_modified: DATA_INT len 8 prec 0; DB_ROW_ID: DATA_SYS prtype 256 len 6 prec 0; DB_TRX_ID: DATA_SYS prtype 257 len 6 prec 0; DB_ROLL_PTR: DATA_SYS prtype 258 len 7 prec 0; <br />&nbsp; INDEX: name GEN_CLUST_INDEX, id 0 19, fields 0/8, type 1<br />&nbsp;&nbsp; root page 213, appr.key vals 0, leaf pages 1, size pages 1<br />&nbsp;&nbsp; FIELDS:&nbsp; DB_ROW_ID DB_TRX_ID DB_ROLL_PTR id title user_id gmt_create gmt_modified<br />&nbsp;&nbsp; --在创建表时，没有定义主键，innodb会在内部创建一个主键索引<br />----------------------------------<br />END OF INNODB TABLE MONITOR OUTPUT<br />==================================</p>
<p>关于上面一些特殊字段中的含义<br />DB_TRX_ID - this field is managed by InnoDB internally and contains a ID of transaction which changed a record last time <br />DB_ROLL_PTR - one more internal InnoDB field (TODO: find out what is it used for). <br />DB_ROW_ID - this internally used field should be the first field in tables without primary keys (it is an auto-increment field used by InnoDB to identify rows in such tables) </p>
<p>test1表大小为5991 pages,与show table status like 'test1'中的Data_length相比，数据计算证明完全相同<br />mysql&gt; show table status like 'test1'\G<br />*************************** 1. row ***************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name: test1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Engine: InnoDB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version: 10<br />&nbsp;&nbsp;&nbsp;&nbsp; Row_format: Compact<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rows: 1573185&nbsp; --这个是抽样值，不是精确值<br />&nbsp;Avg_row_length: 62<br />&nbsp;&nbsp;&nbsp; Data_length: 98156544 <br />Max_data_length: 0<br />&nbsp;&nbsp; Index_length: 37339136<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Data_free: 0<br />&nbsp;Auto_increment: 1572865<br />&nbsp;&nbsp;&nbsp; Create_time: 2009-06-22 12:37:17<br />&nbsp;&nbsp;&nbsp; Update_time: NULL<br />&nbsp;&nbsp;&nbsp;&nbsp; Check_time: NULL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collation: gbk_chinese_ci<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Checksum: NULL<br />&nbsp;Create_options: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Comment: InnoDB free: 871424 kB<br />1 row in set (0.00 sec)</p>
<p>mysql&gt; select 5991*16*1024;<br />+--------------+<br />| 5991*16*1024 |<br />+--------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp; 98156544 | <br />+--------------+<br />1 row in set (0.00 sec)</p>
<p>参考文档:<br /><a href="http://code.google.com/p/innodb-tools/wiki/InnodbRecoveryHowto">http://code.google.com/p/innodb-tools/wiki/InnodbRecoveryHowto</a><br /></p>]]></description>
		</item>
		    
		
		<item>
			<title>西湖边的荷花开了</title>
			<link>http://zhaolinjnu.blog.sohu.com/119020181.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/119020181.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Sun, 21 Jun 2009 11:52:39 +0800</pubDate>
			<category>生活</category>
			<guid>http://zhaolinjnu.blog.sohu.com/119020181.html</guid>
			<description><![CDATA[<p>今天起了个早,跟老婆去了西湖边,看看西湖里一片一片的荷花...</p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1834.img.pp.sohu.com.cn/images/blog/2009/6/21/11/11/122ad703f02g215.jpg" border="0" />老婆的照片pic1:</p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1834.img.pp.sohu.com.cn/images/blog/2009/6/21/11/14/122ad6bb15bg214.jpg" border="0" />pic2:</p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1814.img.pp.sohu.com.cn/images/blog/2009/6/21/11/15/122ad7426e5g215.jpg" border="0" />pic3:</p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1804.img.pp.sohu.com.cn/images/blog/2009/6/21/11/16/122ad7504dfg215.jpg" border="0" />在westlake做早操的我,哈哈</p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1844.img.pp.sohu.com.cn/images/blog/2009/6/21/11/18/122ad76da18g215.jpg" border="0" /><br /></p>]]></description>
		</item>
		    
		
		<item>
			<title>key-value分布式存储系统</title>
			<link>http://zhaolinjnu.blog.sohu.com/118890710.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/118890710.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Fri, 19 Jun 2009 10:57:13 +0800</pubDate>
			<category>互联网</category>
			<guid>http://zhaolinjnu.blog.sohu.com/118890710.html</guid>
			<description><![CDATA[<p><font color="#000000">key-value分布式存储系统，许多大的互联网公司都有自己的产品，每家产品在实现方式上也有一些不同。下面是其中一种表现形式，在单个数据结点上，包含两种文件：一，索引文件；二，数据文件</font></p>
<p><font color="#000000"><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1844.img.pp.sohu.com.cn/images/blog/2009/6/19/10/9/122a2d9e4f6g213.jpg" border="0" /></font></p>
<p><font color="#000000">如果有一个key,如何获取value值?包括如下的几个步骤：</font></p>
<p><font color="#000000">1.如果key为字符型，计算key的md5,取其前几个字节，map到对应的数据结点.如果key为数字类型，可以通过取模的方式来hash化。这也是我们通常在做数据库水平拆分sharding时，常采用的做法。key-value分布式存储系统，通常用来存储文件，如果保存的文件个数比较多，hash的粒度会比较大，以保证单数据结点的数据比较小。为了数据安全，一份数据在写入时，会向多个数据结点复制，采用这种办法，也可提高数据的并发读取性能。</font></p>
<p><font color="#000000">2.查找index文件,应尽量保证索引文件cache到内存中</font></p>
<p><font color="#000000">3.查找data文件</font></p>
<p>参考文章：</p>
<p><font color="#000000">http://project-voldemort.com/blog/ </font></p>]]></description>
		</item>
		    
		
		<item>
			<title>淘宝旺店隆重上线</title>
			<link>http://zhaolinjnu.blog.sohu.com/118358538.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/118358538.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Thu, 11 Jun 2009 19:38:12 +0800</pubDate>
			<category>互联网</category>
			<guid>http://zhaolinjnu.blog.sohu.com/118358538.html</guid>
			<description><![CDATA[<p><font color="#000000">&nbsp;&nbsp;&nbsp; 淘宝旺店是淘宝网提供给商家的独立网店系统。商家无需技术背景，就能在淘宝店的基础上轻松拥有属于自己的独立网店，拥于独立的域名, 便于企业推广，提高商家企业形象。淘宝旺店不同于以前的淘宝旺铺，后者是挂在taobao下面的二级域名。淘宝旺店的一个典型成功案例是优衣库:http://www.uniqlo.cn/ ,首页风格完全是优衣库自己的风格，满足了一些大商家非常个性化的需求，商品详情页面也与淘宝的商品详情页面，有一些差异。优衣库仍然基于淘宝的商品管理，与交易系统，与现在taobao自己的页面是基于同样的数据平台之上的。</font></p>
<p><a href="http://www.taobao.com/go/act/university/20090609.php" target="_blank"><font color="#000000"><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1823.img.pp.sohu.com.cn/images/blog/2009/6/11/19/14/1227b57300fg213.jpg" border="0" /></font></a><br /><font color="#000000">个人理解，淘宝旺店的产品目标用户应该是定位在高端卖家。这个差异化产品的推出，大家也可感受到淘宝战略方向的变化。淘宝越来越平台化，为个体，企业级卖家提供各种电子商务接入服务。</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; 大家可以上优衣库中国网站，体验一下。以上观点，只代表我本人，不代表官方任何立场。</font></p>]]></description>
		</item>
		    
		
		<item>
			<title>今年优秀高考作文推荐</title>
			<link>http://zhaolinjnu.blog.sohu.com/118232667.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/118232667.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Wed, 10 Jun 2009 09:10:42 +0800</pubDate>
			<category>生活</category>
			<guid>http://zhaolinjnu.blog.sohu.com/118232667.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; 在高考作文里，读不懂中国。作文题大都以歌颂时代主旋律为主，离经判道的文章经常得不了高分。外国的高考题目考察思想，中国的高考题目考察政治。考生最善长的格式：总分总，阅卷老师最喜欢的也是这种格式，看起来，一目了然，平均一篇作文阅卷时间不超过20秒。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 以下是腾讯网上公布的一些优秀作文，读起来别有一番风味：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://view.news.qq.com/a/20090609/000005.htm" target="_blank">合肥考生的《弯道超越》</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://view.news.qq.com/a/20090609/000003.htm" target="_blank">北京考生的《我有一双隐形的翅膀》</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 希望看到越来越多这样的文章...</p>]]></description>
		</item>
		    
		
		<item>
			<title>INNODB与ORACLE单行存储长度对比</title>
			<link>http://zhaolinjnu.blog.sohu.com/117889403.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/117889403.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Sun, 7 Jun 2009 15:08:09 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/117889403.html</guid>
			<description><![CDATA[<p><font color="#000000">众所周知，mysql innodb存储引擎与oracle非常相似,支持事务，row-locking,经过实际测试，innodb与oracle一个比较大的差异点为，在此测试用例下，相同数据，innodb单行存储长度大概是oracle单行存储长度的1.8倍。<br />测试的表，常见的各种类型都有,number,varchar2,date<br />--首先在oracle中做测试 , 在oracle数据库中此表单行长度平均为458字节<br />09:49:45 danchen@ test_oracle&gt;select blocks from dba_extents where segment_name='test_dc' and rownum&lt;2;</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; BLOCKS<br />----------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1280</font></p>
<p><font color="#000000">1 row selected.</font></p>
<p><font color="#000000">09:52:55 danchen@ test_oracle&gt;select /*+ rowid(u)*/&nbsp; count(*) from test_dc u where rowid&gt;=CHARTOROWID('AAADQdAA6AAADcJAAA') and rowid&lt;=CHARTOROWID('AAADQdAA6AAADwICcQ');</font></p>
<p><font color="#000000">&nbsp; COUNT(*)<br />----------</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; 22852</font></p>
<p><font color="#000000">09:54:55 danchen@ test_oracle&gt;select 1280*8*1024/22852 bytes from dual;</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; BYTES<br />----------<br />458.855242</font></p>
<p><font color="#000000">--在mysql作对比测试<br />root@test_mysql 09:47:47&gt;select count(*) from test_dc_181;<br />+----------+<br />| count(*) |<br />+----------+<br />|&nbsp;&nbsp; 128928 | <br />+----------+<br />1 row in set (0.08 sec)</font></p>
<p><font color="#000000">root@test_mysql 09:45:57&gt;show table status like 'test_dc_181'\G;<br />*************************** 1. row ***************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name: test_dc_181<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Engine: InnoDB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version: 10<br />&nbsp;&nbsp;&nbsp;&nbsp; Row_format: Compact<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rows: 85668&nbsp;&nbsp; --统计信息不准确<br />&nbsp;Avg_row_length: 1122<br />&nbsp;&nbsp;&nbsp; Data_length: 96141312<br />Max_data_length: 0<br />&nbsp;&nbsp; Index_length: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Data_free: 0<br />&nbsp;Auto_increment: NULL<br />&nbsp;&nbsp;&nbsp; Create_time: 2009-05-27 11:23:55<br />&nbsp;&nbsp;&nbsp; Update_time: NULL<br />&nbsp;&nbsp;&nbsp;&nbsp; Check_time: NULL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collation: gbk_chinese_ci<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Checksum: NULL<br />&nbsp;Create_options: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Comment: InnoDB free: 292984832 kB<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">ERROR: <br />No query specified</font></p>
<p><br /><font color="#000000">--重新分析一下,发现执行分析操作时间非常快，数据也比较准确，估计mysql的分析的算法原理为基于抽样的统计，比如说一个page里有多少记录，总的page数是多少,两者相乘即可得到行数。<br />root@test_mysql 09:46:01&gt;analyze table test_dc_181;<br />+---------------------+---------+----------+----------+<br />| Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Op&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Msg_type | Msg_text |<br />+---------------------+---------+----------+----------+<br />| test_mysql.test_dc_181 | analyze | status&nbsp;&nbsp; | OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />+---------------------+---------+----------+----------+<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">root@test_mysql 09:46:46&gt;show table status like 'test_dc_181'\G;<br />*************************** 1. row ***************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name: test_dc_181<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Engine: InnoDB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version: 10<br />&nbsp;&nbsp;&nbsp;&nbsp; Row_format: Compact<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rows: 115074<br />&nbsp;Avg_row_length: 835<br />&nbsp;&nbsp;&nbsp; Data_length: 96141312<br />Max_data_length: 0<br />&nbsp;&nbsp; Index_length: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Data_free: 0<br />&nbsp;Auto_increment: NULL<br />&nbsp;&nbsp;&nbsp; Create_time: 2009-05-27 11:23:55<br />&nbsp;&nbsp;&nbsp; Update_time: NULL<br />&nbsp;&nbsp;&nbsp;&nbsp; Check_time: NULL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collation: gbk_chinese_ci<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Checksum: NULL<br />&nbsp;Create_options: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Comment: InnoDB free: 292984832 kB<br />1 row in set (0.00 sec)</font></p>
<p><font color="#000000">ERROR: <br />No query specified</font></p>
<p><font color="#000000">--在mysql innodb的表中平均单行长度为835字节</font></p>
<p><font color="#000000">root@test_mysql 09:46:50&gt;select 96141312/115074;<br />+-----------------+<br />| 96141312/115074 |<br />+-----------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 835.4738 | <br />+-----------------+<br />1 row in set (0.00 sec)</font></p>
<p><br /><font color="#000000">--在此测试用例下，同一行记录，在oracle与mysql存储空间对比为1.8:1,在其它大多数情况下，oracle的数据迁移到mysql数据库，所用的空间都要大许多，具体大多少，各位需要经过测试，以使容量估计更加准确。<br />root@test_mysql 09:48:14&gt;select 835.4738/458.855242 ;<br />+---------------------+<br />| 835.4738/458.855242 |<br />+---------------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.82077859 | <br />+---------------------+<br />1 row in set (0.00 sec)<br /></font></p><br />]]></description>
		</item>
		    
		
		<item>
			<title>facebook: efficient storage of billions of photos</title>
			<link>http://zhaolinjnu.blog.sohu.com/117690708.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/117690708.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Tue, 2 Jun 2009 17:16:32 +0800</pubDate>
			<category>互联网</category>
			<guid>http://zhaolinjnu.blog.sohu.com/117690708.html</guid>
			<description><![CDATA[<p><font color="#000000">&nbsp;written by <span><a href="http://www.facebook.com/people/Peter-Vajgel/1080434538">Peter Vajgel</a>,因为此blog标题长度有限制，所以标题名称有所修改。</span></font></p>
<p><span><font color="#000000">&nbsp;&nbsp; The Photos application is one of Facebook&rsquo;s most popular features. Up to date, users have uploaded over 15 billion photos which makes Facebook the biggest photo sharing website. For each uploaded photo, Facebook generates and stores four images of different sizes, which translates to a total of 60 billion images and 1.5PB of storage. The current growth rate is 220 million new photos per week, which translates to 25TB of additional storage consumed weekly. At the peak there are 550,000 images served per second. These numbers pose a significant challenge for the Facebook photo storage infrastructure.<br /><br /></font></span></p>
<h1><font color="#000000">NFS photo infrastructure</font></h1>
<p><br /><font color="#000000">The old photo infrastructure consisted of several tiers: </font></p>
<ul>
<li><font color="#000000">Upload tier receives users&rsquo; photo uploads, scales the original images and saves them on the NFS storage tier. </font>
</li><li><font color="#000000">Photo serving tier receives HTTP requests for photo images and serves them from the NFS storage tier. </font>
</li><li><font color="#000000">NFS storage tier built on top of commercial storage appliances.</font></li></ul>
<p><font color="#000000">Since each image is stored in its own file, there is an enormous amount of metadata generated on the storage tier due to the namespace directories and file inodes. The amount of metadata far exceeds the caching abilities of the NFS storage tier, resulting in multiple I/O operations per photo upload or read request. The whole photo serving infrastructure is bottlenecked on the high metadata overhead of the NFS storage tier, which is one of the reasons why Facebook relies heavily on CDNs to serve photos. Two additional optimizations were deployed in order to mitigate this problem to some degree:<br /></font></p>
<ul>
<li><font color="#000000">Cachr: a caching server tier caching smaller Facebook &quot;profile&quot; images. </font>
</li><li><font color="#000000">NFS file handle cache - deployed on the photo serving tier eliminates some of the NFS storage tier metadata overhead</font></li></ul>
<h1><font color="#000000">Haystack Photo Infrastructure</font></h1>
<p><br /><font color="#000000">The new photo infrastructure merges the photo serving tier and storage tier into one physical tier. It implements a HTTP based photo server which stores photos in a generic object store called Haystack. The main requirement for the new tier was to eliminate any unnecessary metadata overhead for photo read operations, so that each read I/O operation was only reading actual photo data (instead of filesystem metadata). Haystack can be broken down into these functional layers - </font></p>
<ul>
<li><font color="#000000">HTTP server </font>
</li><li><font color="#000000">Photo Store </font>
</li><li><font color="#000000">Haystack Object Store </font>
</li><li><font color="#000000">Filesystem </font>
</li><li><font color="#000000">Storage</font></li></ul>
<p><font color="#000000">In the following sections we look closely at each of the functional layers from the bottom up.<br /><br /></font></p>
<h1><font color="#000000">Storage</font></h1>
<p><br /><font color="#000000">Haystack is deployed on top of commodity storage blades. The typical hardware configuration of a 2U storage blade is &ndash; </font></p>
<ul>
<li><font color="#000000">2 x quad-core CPUs </font>
</li><li><font color="#000000">16GB &ndash; 32GB memory </font>
</li><li><font color="#000000">hardware raid controller with 256MB &ndash; 512MB of NVRAM cache </font>
</li><li><font color="#000000">12+ 1TB SATA drives</font></li></ul>
<p><font color="#000000">Each storage blade provides around 10TB of usable space, configured as a RAID-6 partition managed by the hardware RAID controller. RAID-6 provides adequate redundancy and excellent read performance while keeping the storage cost down. The poor write performance is partially mitigated by the RAID controller NVRAM write-back cache. Since the reads are mostly random, the NVRAM cache is fully reserved for writes. The disk caches are disabled in order to guarantee data consistency in the event of a crash or a power loss.<br /><br /></font></p>
<h1><font color="#000000">Filesystem</font></h1>
<p><br /><font color="#000000">Haystack object stores are implemented on top of files stored in a single filesystem created on top of the 10TB volume.<br /><br />Photo read requests result in read() system calls at known offsets in these files, but in order to execute the reads, the filesystem must first locate the data on the actual physical volume. Each file in the filesystem is represented by a structure called an inode which contains a block map that maps the logical file offset to the physical block offset on the physical volume. For large files, the block map can be quite large depending on the type of the filesystem in use.<br /><br />Block based filesystems maintain mappings for each logical block, and for large files, this information will not typically fit into the cached inode and is stored in indirect address blocks instead, which must be traversed in order to read the data for a file. There can be several layers of indirection, so a single read could result in several I/Os depending on whether or not the indirect address blocks are cached.<br /><br />Extent based filesystems maintain mappings only for contiguous ranges of blocks (extents). A block map for a contiguous large file could consist of only one extent which would fit in the inode itself. However, if the file is severely fragmented and its blocks are not contiguous on the underlying volume, its block map can grow large as well. With extent based filesystems, fragmentation can be mitigated by aggressively allocating a large chunk of space whenever growing the physical file.<br /><br />Currently, the filesystem of choice is XFS, an extent based filesystem providing efficient file preallocation.<br /><br /></font></p>
<h1><font color="#000000">Haystack Object Store</font></h1>
<p><br /><font color="#000000">Haystack is a simple log structured (append-only) object store containing needles representing the stored objects. A Haystack consists of two files &ndash; the actual haystack store file containing the needles, plus an index file. The following figure shows the layout of the haystack store file:<br /></font><font color="#000000"><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1823.img.pp.sohu.com.cn/images/blog/2009/6/2/17/9/1224c63295cg213.jpg" border="0" />The first 8KB of the haystack store is occupied by the superblock. Immediately following the superblock are needles, with each needle consisting of a header, the data, and a footer:<br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1853.img.pp.sohu.com.cn/images/blog/2009/6/2/17/10/1224c63ac59g213.jpg" border="0" />A needle is uniquely identified by its &lt;Offset, Key, Alternate Key, Cookie&gt; tuple, where the offset is the needle offset in the haystack store. Haystack doesn&rsquo;t put any restriction on the values of the keys, and there can be needles with duplicate keys. Following figure shows the layout of the index file -<br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1843.img.pp.sohu.com.cn/images/blog/2009/6/2/17/10/1224c643a84g213.jpg" border="0" /><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1873.img.pp.sohu.com.cn/images/blog/2009/6/2/17/10/1224c622fdbg215.jpg" border="0" />There is a corresponding index record for each needle in the haystack store file, and the order of the needle index records must match the order of the associated needles in the haystack store file. The index file provides the minimal metadata required to locate a particular needle in the haystack store file. Loading and organizing index records into a data structure for efficient lookup is the responsibility of the Haystack application (Photo Store in our case). The index file is not critical, as it can be rebuilt from the haystack store file if required. The main purpose of the index is to allow quick loading of the needle metadata into memory without traversing the larger Haystack store file, since the index is usually less than 1% the size of the store file.<br /><br /></font></p>
<h2><font color="#000000">Haystack Write Operation</font></h2>
<p><br /><font color="#000000">A Haystack write operation synchronously appends new needles to the haystack store file. After the needles are committed to the larger Haystack store file, the corresponding index records are then written to the index file. Since the index file is not critical, the index records are written asynchronously for faster performance.<br /><br />The index file is also periodically flushed to the underlying storage to limit the extent of the recovery operations caused by hardware failures. In the case of a crash or a sudden power loss, the haystack recovery process discards any partial needles in the store and truncates the haystack store file to the last valid needle. Next, it writes missing index records for any trailing orphan needles at the end of the haystack store file.<br /><br />Haystack doesn&rsquo;t allow overwrite of an existing needle offset, so if a needle&rsquo;s data needs to be modified, a new version of it must be written using the same &lt;Key, Alternate Key, Cookie&gt; tuple. Applications can then assume that among the needles with duplicate keys, the one with the largest offset is the most recent one.<br /><br /></font></p>
<h2><font color="#000000">Haystack Read Operation</font></h2>
<p><br /><font color="#000000">The parameters passed to the haystack read operation include the needle offset, key, alternate key, cookie and the data size. Haystack then adds the header and footer lengths to the data size and reads the whole needle from the file. The read operation succeeds only if the key, alternate key and cookie match the ones passed as arguments, if the data passes checksum validation, and if the needle has not been previously deleted (see below).<br /><br /></font></p>
<h2><font color="#000000">Haystack Delete Operation</font></h2>
<p><br /><font color="#000000">The delete operation is simple &ndash; it marks the needle in the haystack store as deleted by setting a &ldquo;deleted&rdquo; bit in the flags field of the needle. However, the associated index record is not modified in any way so an application could end up referencing a deleted needle. A read operation for such a needle will see the &ldquo;deleted&rdquo; flag and fail the operation with an appropriate error. The space of a deleted needle is not reclaimed in any way. The only way to reclaim space from deleted needles is to compact the haystack (see below).<br /><br /></font></p>
<h1><font color="#000000">Photo Store Server.</font></h1>
<p><br /><font color="#000000">Photo Store Server is responsible for accepting HTTP requests and translating them to the corresponding Haystack store operations. In order to minimize the number of I/Os required to retrieve photos, the server keeps an in-memory index of all photo offsets in the haystack store file. At startup, the server reads the haystack index file and populates the in-memory index. With hundreds of millions of photos per node (and the number will only grow with larger capacity drives), we need to make sure that the index will fit into the available memory. This is achieved by keeping a minimal amount of metadata in memory, just the information required to locate the images.<br /><br />When a user uploads a photo, it is assigned a unique 64-bit id. The photo is then scaled down to 4 different sizes. Each scaled image has the same random cookie and 64-bit key, and the logical image size (large, medium, small, thumbnail) is stored in the alternate key. The upload server then calls the photo store server to store all four images in the Haystack.<br /><br />The in-memory index keeps the following information for each photo:<br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1813.img.pp.sohu.com.cn/images/blog/2009/6/2/17/12/1224c635e7dg215.jpg" border="0" />&nbsp;Haystack uses the open source Google sparse hash data structure to keep the in-memory index small, since it only has 2 bits of overhead per entry.<br /><br /></font></p>
<h2><font color="#000000">Photo Store Write/Modify Operation</font></h2>
<p><br /><font color="#000000">A write operation writes photos to the haystack and updates the in-memory index with the new entries. If the index already contains records with the same keys then this is a modification of existing photos and only the index records offsets are modified to reflect the location of the new images in the haystack store file. Photo store always assumes that if there are duplicate images (images with the same key) it is the one stored at a larger offset which is valid.<br /><br /></font></p>
<h2><font color="#000000">Photo Store Read Operation</font></h2>
<p><br /><font color="#000000">The parameters passed to a read operation include haystack id and a photo key, size and cookie. The server performs a lookup in the in-memory index based on the photo key and retrieves the offset of the needle containing the requested image. If found it calls the haystack read operation to get the image. As noted above haystack delete operation doesn&rsquo;t update the haystack index file record. Therefore a freshly populated in-memory index can contain stale entries for the previously deleted photos. Read of a previously deleted photo will fail and the in-memory index is updated to reflect that by setting the offset of the particular image to zero.<br /><br /></font></p>
<h2><font color="#000000">Photo Store Delete Operation</font></h2>
<p><br /><font color="#000000">After calling the haystack delete operation the in-memory index is updated by setting the image offset to zero signifying that the particular image has been deleted.<br /><br /></font></p>
<h2><font color="#000000">Compaction</font></h2>
<p><br /><font color="#000000">Compaction is an online operation which reclaims the space used by the deleted and duplicate needles (needles with the same key). It creates a new haystack by copying needles while skipping any duplicate or deleted entries. Once done it swaps the files and in-memory structures.<br /><br /></font></p>
<h1><font color="#000000">HTTP Server</font></h1>
<p><br /><font color="#000000">The HTTP framework we use is the simple evhttp server provided with the open source libevent library. We use multiple threads, with each thread being able to serve a single HTTP request at a time. Because our workload is mostly I/O bound, the performance of the HTTP server is not critical.<br /><br /></font></p>
<h1><font color="#000000">Summary</font></h1>
<p><br /><font color="#000000">Haystack presents a generic HTTP-based object store containing needles that map to stored opaque objects. Storing photos as needles in the haystack eliminates the metadata overhead by aggregating hundreds of thousands of images in a single haystack store file. This keeps the metadata overhead very small and allows us to store each needle&rsquo;s location in the store file in an in-memory index. This allows retrieval of an image&rsquo;s data in a minimal number of I/O operations, eliminating all unnecessary metadata overhead. <br /><br /><i>Peter Vajgel, Doug Beaver and Jason Sobel are infrastructure engineers at Facebook.</i></font></p>
<p><em><font color="#000000">原文网址：</font><a href="http://www.facebook.com/note.php?note_id=76191543919&ref=mf"><font color="#000000">http://www.facebook.com/note.php?note_id=76191543919&amp;ref=mf</font></a></em></p>]]></description>
		</item>
		    
		
		<item>
			<title>Google购物搜索</title>
			<link>http://zhaolinjnu.blog.sohu.com/117283861.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/117283861.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Wed, 27 May 2009 15:46:46 +0800</pubDate>
			<category>互联网</category>
			<guid>http://zhaolinjnu.blog.sohu.com/117283861.html</guid>
			<description><![CDATA[<p>google低调进入电子商务购物搜索领域，大家可以通过下面的网址去试用一下：<a href="http://www.google.cn/products">http://www.google.cn/products</a></p>
<p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://1873.img.pp.sohu.com.cn/images/blog/2009/5/27/15/3/1222d008609g215.jpg" border="0" /></p>
<p>我试验了几把，搜索结果taobao上的商品基本上都是排在第一位的。但是如果越来越多的人都是通过google的购物搜索，直接转到taobao的item页面,后果是相当严重的。这种严重性在于不仅淘宝失去了自身的搜索流量，而且还被别人控制了咽喉。除了购物搜索之外，在google的产品线中还包括博客搜索，图片搜索，音乐搜索，视频搜索，学术搜索等等，这些垂直类的搜索，提高了google在每一个方面的搜索精度，更加强化了google在每个垂直领域内的竞争实力。每个搜索产品的推出，依靠其强大的搜索技术实力，以及出色的产品，不断危协着每一个领域内的其它公司,也更加强化其在互联网搜索领域内的霸主地位。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个优秀的技术驱动创新型企业，总是在不断的技术与产品创新中，给我们带来不一样的震撼。</p>]]></description>
		</item>
		    
		
		<item>
			<title>mysql5.4版本的改进点</title>
			<link>http://zhaolinjnu.blog.sohu.com/116766172.html</link>
			<comments>http://zhaolinjnu.blog.sohu.com/116766172.html#comment</comments>
			<dc:creator>Data &#38;#38; Architecture DBA</dc:creator>
			<pubDate>Wed, 20 May 2009 11:33:14 +0800</pubDate>
			<category>My SQL</category>
			<guid>http://zhaolinjnu.blog.sohu.com/116766172.html</guid>
			<description><![CDATA[<p>在mysql5.0版本的基础之上，加上许多google开发的patch,就成了mysql5.4版本。5.4有如下的一些比较重要的new feature：</p>
<p>1.Scalability Improvements</p>
<p>MySQL 5.4 modifications improve performance on SMP systems to increase scalability on multi-core systems. The changes affect <code>InnoDB</code> locking, memory management, and thread concurrency. Much of this work is based on a patch developed by Google, about which more information can be found here: </p><pre><a href="http://code.google.com/p/google-mysql-tools/wiki/SmpPerformance" target="_top">http://code.google.com/p/google-mysql-tools/wiki/SmpPerformance
</a></pre><pre>2.<code>InnoDB</code> I/O Subsystem Changes</pre><pre><p>MySQL 5.4 changes to the <code>InnoDB</code> I/O subsystem enable more effective use of available I/O capacity. </p><p>The changes also provide more control over configuration of the I/O subsystem. Much of this work </p><p>is based on patches developed by Google, about which more information can be found here: </p><pre><a href="http://code.google.com/p/google-mysql-tools/wiki/InnodbAsyncIo" target="_top">http://code.google.com/p/google-mysql-tools/wiki/InnodbAsyncIo</a>
<a href="http://code.google.com/p/google-mysql-tools/wiki/InnodbIoTuning" target="_top">http://code.google.com/p/google-mysql-tools/wiki/InnodbIoTuning</a>
The patch makes the number of background I/O threads configurable via system variables: </pre><pre><code>    innodb_read_io_threads</code> controls the number of threads to use for read prefetch requests. </pre><pre><code>    innodb_write_io_threads</code> controls the number of threads to use for writing dirty pages from the buffer cache to disk. </pre><pre>The default for both variables is 8.</pre><pre>随着磁盘IOPS能力越来越高，比如说SSD的出现，在5.4的mysql版本中，还增加了一个参数来表示系统可以提供的IOPS为多少，这个参数为：</pre><pre><code>innodb_io_capacity</code> </pre><pre>还有一个新引入的参数<code>innodb_extra_dirty_writes,这个参数是跟<code>innodb_max_dirty_pages_pct一起配合使用,新引入的这个参数是对脏页刷新</code></code></pre><pre><code><code>控制的一个重要补充。当数据库脏页比率低于<code>innodb_max_dirty_pages_pct时，如果数据库处于相对空闲状态，数据库也会把脏页刷到磁盘上。</code></code></code></pre><pre><code><code><code></code></code></code>&nbsp;</pre><pre><code><code><code>3.提高了在Solaris平台使用大页的支持</code></code></code></pre><pre><code><code><code>4.show innodb status输出有一些补充，主要是后台线程，SEMAPHORES等等。</code></code></code></pre><pre><code><code><code></code></code></code>&nbsp;</pre><pre><code><code><code>当前5.4处于beta版，想尝鲜的，可以到如下的地址去下载：</code></code></code></pre><pre><code><code><code><a href="http://dev.mysql.com/downloads/mysql/5.4.html">http://dev.mysql.com/downloads/mysql/5.4.html</a></code></code></code></pre></pre>]]></description>
		</item>
		    
		
	</channel>
</rss>
