<?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>MySQL支持 &#187; MySQL高级技术</title>
	<atom:link href="http://www.mysqlsupport.cn/category/adv/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mysqlsupport.cn</link>
	<description>MySQL支持，提供专业技术支持性能调优，架构设计</description>
	<lastBuildDate>Wed, 26 Oct 2011 12:23:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>更改Innodb 数据页大小优化MySQL</title>
		<link>http://www.mysqlsupport.cn/change_innodb_page_size/</link>
		<comments>http://www.mysqlsupport.cn/change_innodb_page_size/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 06:24:25 +0000</pubDate>
		<dc:creator>wubx</dc:creator>
				<category><![CDATA[Innodb]]></category>
		<category><![CDATA[MySQL优化]]></category>
		<category><![CDATA[MySQL高级技术]]></category>
		<category><![CDATA[innodb页大小]]></category>

		<guid isPermaLink="false">http://www.mysqlsupport.cn/?p=105</guid>
		<description><![CDATA[     作者：吴炳锡　来源：http://www.mysqlsupport.cn/ 联系方式： wubingxi#gmail.com 转载请注明作/译者和出处，并且不能用于商业用途，违者必究。          我们知道Innodb的数据页是16K,而且是一个硬性的规定，系统里没更改的办法，希望将来MySQL也能也Oracle一样支持多种数据页的大小。 但实际应用中有时16K显的有点大了，特别是很多业务在Oracle或是SQL SERVER运行的挺好的情况下迁到了MySQL上发现IO增长太明显的情况下， 就会想到更改数据页大小了。 　　实际上innodb的数据页大小也是可以更改的，只是需要在源码层去更改，然后重新rebuild一下MySQL.     更改办法：     (以MySQL-5.1.38源码为例）     位置在storage/innobase/include/univ.i ，在univ.i中查找：UNIV_PAGE_SIZE /*    DATABASE VERSION CONTROL    ======================== */ &#160; /* The universal page size of the database */ #define UNIV_PAGE_SIZE          (2 * 8192) /* NOTE! Currently, this has to be a      power of 2 */ /* The 2-logarithm of [...]]]></description>
			<content:encoded><![CDATA[<p>     <strong>作者：吴炳锡　来源：http://www.mysqlsupport.cn/ 联系方式： wubingxi#gmail.com 转载请注明作/译者和出处，并且不能用于商业用途，违者必究。</strong><br />
         我们知道Innodb的数据页是16K,而且是一个硬性的规定，系统里没更改的办法，希望将来MySQL也能也Oracle一样支持多种数据页的大小。<br />
但实际应用中有时16K显的有点大了，特别是很多业务在Oracle或是SQL SERVER运行的挺好的情况下迁到了MySQL上发现IO增长太明显的情况下，<br />
就会想到更改数据页大小了。<br />
　　实际上innodb的数据页大小也是可以更改的，只是需要在源码层去更改，然后重新rebuild一下MySQL.<br />
    更改办法：<br />
    (以MySQL-5.1.38源码为例）<br />
    位置在storage/innobase/include/univ.i ，在univ.i中查找：UNIV_PAGE_SIZE</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
   DATABASE VERSION CONTROL
   ========================
*/</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The universal page size of the database */</span>
<span style="color: #339933;">#define UNIV_PAGE_SIZE          (2 * 8192) /* NOTE! Currently, this has to be a</span>
     power of <span style="color: #0000dd;">2</span> <span style="color: #339933;">*/</span>
<span style="color: #808080; font-style: italic;">/* The 2-logarithm of UNIV_PAGE_SIZE: */</span>
<span style="color: #339933;">#define UNIV_PAGE_SIZE_SHIFT 14</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Maximum number of parallel threads in a parallelized operation */</span>
<span style="color: #339933;">#define UNIV_MAX_PARALLELISM 32</span></pre></div></div>

<p>   UNIV_PAGE_SIZE就是数据页大小，默认的是16K. 后面的备注里标明，该值是可以设置必须为2的次方。对于该值可以设置成4k,8k,16k,32K,64K，在大也没意义了。<br />
同时更改了UNIV_PAGE_SIZE后需要更改 UNIV_PAGE_SIZE_SHIFT 该值是2的多少次方为UNIV_PAGE_SIZE，所以设置数据页分别情况如下：</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">#define UNIV_PAGE_SIZE_SHIFT 12  if UNIV_PAGE_SIZ=4K
#define UNIV_PAGE_SIZE_SHIFT 13  if UNIV_PAGE_SIZ=8K
#define UNIV_PAGE_SIZE_SHIFT 15  if UNIV_PAGE_SIZ=32K</pre></div></div>

<p>例子：<br />
　更改innodb的数据页为8K,相应修改为：</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
   DATABASE VERSION CONTROL
   ========================
*/</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The universal page size of the database */</span>
<span style="color: #339933;">#define UNIV_PAGE_SIZE          8192   /* NOTE! Currently, this has to be a</span>
     power of <span style="color: #0000dd;">2</span> <span style="color: #339933;">*/</span>
<span style="color: #808080; font-style: italic;">/* The 2-logarithm of UNIV_PAGE_SIZE: */</span>
<span style="color: #339933;">#define UNIV_PAGE_SIZE_SHIFT 13</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Maximum number of parallel threads in a parallelized operation */</span>
<span style="color: #339933;">#define UNIV_MAX_PARALLELISM 32</span></pre></div></div>

<p>重新编译，然后测试测试，再测试。Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mysqlsupport.cn/change_innodb_page_size/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Innodb共享表空间VS独立表空间</title>
		<link>http://www.mysqlsupport.cn/innodb%e5%85%b1%e4%ba%ab%e8%a1%a8%e7%a9%ba%e9%97%b4vs%e7%8b%ac%e7%ab%8b%e8%a1%a8%e7%a9%ba%e9%97%b4/</link>
		<comments>http://www.mysqlsupport.cn/innodb%e5%85%b1%e4%ba%ab%e8%a1%a8%e7%a9%ba%e9%97%b4vs%e7%8b%ac%e7%ab%8b%e8%a1%a8%e7%a9%ba%e9%97%b4/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 08:12:52 +0000</pubDate>
		<dc:creator>wubx</dc:creator>
				<category><![CDATA[Innodb]]></category>
		<category><![CDATA[MySQL高级技术]]></category>

		<guid isPermaLink="false">http://www.mysqlsupport.cn/?p=54</guid>
		<description><![CDATA[使用Innodb将要面对两种表空间的管理，一种共享表空间管理（默认的），另一种是独立表空间管理，那选择那种比较好一点呢？在这里我将给出一些我的意见。]]></description>
			<content:encoded><![CDATA[<p><strong>作者：吴炳锡　来源：</strong><a href="../"><strong>http://www.mysqlsupport.cn/</strong></a><strong> </strong><strong>联系方式：</strong><strong>select unhex(’777562696E67786940676D61696C2E636F6D’); </strong><strong>载请注明作</strong><strong>/</strong><strong>译者和出处，并且不能用于商业用途，违者必究。</strong></p>
<p>在使用Innodb引擎时将要面对两种表空间的管理选择的问题，Innodb有两种管理表空间的方法：</p>
<p>1．  共享表空间（也可以拆分成多个小的表空间）</p>
<p>2．  独立表空间每一个表有一个独立的表空间。</p>
<p>我个人推荐使用独立表空间。在性能和运维上独立表空间比共享的表空间有很多优势。下面我将分别说明一下两种表空间管理的特点。</p>
<p><strong>共享表空间：</strong></p>
<p><strong>优点：</strong></p>
<p>可以放表空间分成多个文件存放到各个磁盘上（表空间文件大小不受表大小的限制，如一个表可以分布在不同步的文件上）。数据和文件放在一起方便管理。</p>
<p><strong>缺点：</strong></p>
<p>所有的数据和索引存放到一个文件中以为着将有一个很常大的文件，虽然可以把一个大文件分成多个小文件，但是多个表及索引在表空间中混合存储，这样对于一个表做了大量删除操作后表空间中将会有大量的空隙，特别是对于统计分析，日值系统这类应用最不适合用共享表空间。</p>
<p>我们知道共享表空间管理会出现表空间分配后不能回缩的问题，当出现临时建索引或是创建一个临时表的操作表空间扩大后，就是删除相关的表也没办法回缩那部分空间了。我们存在磁盘监控时，也许就报警不断了，但实际上MySQL还可以运行良好。另外，当磁盘上占用较多时性能也不是太好。</p>
<p>这种情况处理只能是是建一个新的Slave从主库上Dump出来，然后在Dump到从库中，动作较大。</p>
<p>对于InnoDB Hot Backup备份的操作（或是直接冷备），每次需要CP的文件比较大。如果现在有180G的表空间，但实际数据只有50多G，那么我们将面对每次需要拷180G的数据。</p>
<p>这种方式也许mysqldump是一个好的处理方式了。</p>
<p><strong>独立表空间：</strong></p>
<p>在配置文件（my.cnf）中设置： innodb_file_per_table</p>
<p>优点：</p>
<p>1．  每个表都有自已独立的表空间。</p>
<p>2．  每个表的数据和索引都会存在自已的表空间中。</p>
<p>3．  可以实现单表在不同的数据库中移动。</p>
<p>4．  空间可以回收（除drop table操作处，表空不能自已回收）</p>
<p>a)         Drop table操作自动回收表空间，如果对于统计分析或是日值表，删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。</p>
<p>b)         对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。</p>
<p>c)         对于使用独立表空间的表，不管怎么删除，表空间的碎片不会太严重的影响性能，而且还有机会处理。</p>
<p><strong>缺点：</strong></p>
<p>单表增加过大，如超过100个G。</p>
<p>对于单表增长过大的问题，如果使用共享表空间可以把文件分开，但有同样有一个问题，如果访问的范围过大同样会访问多个文件，一样会比较慢。对于独立表空间也有一个解决办法是：使用分区表，也可以把那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发，当一个表超过100个G有可能响应也是较慢了，对于独立表空间还容易发现问题早做处理。</p>
<p><strong>备份：</strong></p>
<p>InnoDB Hot Backup（冷备）的表空间cp不会面对很多无用的copy了。而且利用innodb hot backup及表空间的管理命令可以实现单现移动。</p>
<p><strong>监控：</strong></p>
<p>可以更好从系统上监控数据的大小，每个表的大小。</p>
<p><strong>另外推荐使用独立表空间的原因：</strong></p>
<p>从性能上对比共享表空间和独立表空间：</p>
<p>共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。这里也有一个TIPS当启用独立表空间时，请合理调整一下：innodb_open_files 。</p>
<p>从Linux系统处理上出发：</p>
<p>文件系统fsync一大片更新数据，对系统io冲击较大。若分隔成多个小数据fsync，能够减少对读的影响。 同时从mysql代码，发现mysql保证两次fsync之间至少有20ms的sleep，这样的话，若将一次fsync变成多次小数据操作，应该能够减少慢查询的比例。所以对于大量更新操作的系统不太适合用共享表空间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mysqlsupport.cn/innodb%e5%85%b1%e4%ba%ab%e8%a1%a8%e7%a9%ba%e9%97%b4vs%e7%8b%ac%e7%ab%8b%e8%a1%a8%e7%a9%ba%e9%97%b4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

