北京pk赛车官网下载:修改Innodb的多少页大小以优化MySQL的秘诀,数据页大小优化MySQL

我们知道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

更改Innodb 数据页大小优化MySQL

/* DATABASE VERSION CONTROL ========================*/ /* 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 UNIV_PAGE_SIZE: */#define UNIV_PAGE_SIZE_SHIFT 14 /* Maximum number of parallel threads in a parallelized operation */#define UNIV_MAX_PARALLELISM 32

更改Innodb 数据页大小优化MySQL

2009年12月13日
Posted by wubx

     作者:吴炳锡 来源: 联系方式:
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   ========================*/ /* 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 UNIV_PAGE_SIZE: */#define UNIV_PAGE_SIZE_SHIFT 14 /* Maximum number of parallel threads in a parallelized operation */#define UNIV_MAX_PARALLELISM 32

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

#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

例子:
 更改innodb的数据页为8K,相应修改为:

/*   DATABASE VERSION CONTROL   ========================*/ /* The universal page size of the database */#define UNIV_PAGE_SIZE          8192  /* NOTE! Currently, this has to be a     power of 2 *//* The 2-logarithm of UNIV_PAGE_SIZE: */#define UNIV_PAGE_SIZE_SHIFT 13 /* Maximum number of parallel threads in a parallelized operation */#define UNIV_MAX_PARALLELISM 32

重新编译,然后测试测试,再测试。Good luck!

Updated: 2009年12月13日 at 14:27
标签:innodb页大小
◀ Innodb如何使用内存
Innodb 文件表空间结构 ▶

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

ABOUT THE AUTHOR

北京pk赛车官网下载 1

#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

wubx

例子: 更改innodb的数据页为8K,相应修改为:

Comments

  1. 北京pk赛车官网下载 2rj03hou
    2010年07月23日 20:43
innodb plugin已经可以设置page size,通过设置page
size来实现block的压缩功能。  
对了,请问最终你有没有进行测试?测试结果能否公布?


回复  
  1. 北京pk赛车官网下载 3ruochen
    2010年04月8日 14:41
xtradb准备支持多page size,在创建数据库时可以指定,其他的很多特性
/* DATABASE VERSION CONTROL ========================*/ /* The universal page size of the database */#define UNIV_PAGE_SIZE 8192 /* NOTE! Currently, this has to be a power of 2 *//* The 2-logarithm of UNIV_PAGE_SIZE: */#define UNIV_PAGE_SIZE_SHIFT 13 /* Maximum number of parallel threads in a parallelized operation */#define UNIV_MAX_PARALLELISM 32

重新编译,然后测试测试,再测试。Good luck!

发表评论

电子邮件地址不会被公开。 必填项已用*标注