首页 > 数据库 > MySQL > 正文

修改Innodb的数据页大小以优化MySQL的方法

2024-07-24 13:07:15
字体:
来源:转载
供稿:网友

这篇文章主要介绍了修改Innodb的数据页大小以优化MySQL的方法,Innodb是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

 

 
  1. /* 
  2. DATABASE VERSION CONTROL 
  3. ======================== 
  4. */ 
  5.  
  6. /* The universal page size of the database */ 
  7. #define UNIV_PAGE_SIZE (2 * 8192) /* NOTE! Currently, this has to be a 
  8. power of 2 */ 
  9. /* The 2-logarithm of UNIV_PAGE_SIZE: */ 
  10. #define UNIV_PAGE_SIZE_SHIFT 14 
  11.  
  12. /* Maximum number of parallel threads in a parallelized operation */ 
  13. #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,所以设置数据页分别情况如下:

 

 
  1. #define UNIV_PAGE_SIZE_SHIFT 12 if UNIV_PAGE_SIZ=4K 
  2. #define UNIV_PAGE_SIZE_SHIFT 13 if UNIV_PAGE_SIZ=8K 
  3. #define UNIV_PAGE_SIZE_SHIFT 15 if UNIV_PAGE_SIZ=32K 

例子:

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

 

 
  1. /* 
  2. DATABASE VERSION CONTROL 
  3. ======================== 
  4. */ 
  5.  
  6. /* The universal page size of the database */ 
  7. #define UNIV_PAGE_SIZE 8192 /* NOTE! Currently, this has to be a 
  8. power of 2 */ 
  9. /* The 2-logarithm of UNIV_PAGE_SIZE: */ 
  10. #define UNIV_PAGE_SIZE_SHIFT 13 
  11.  
  12. /* Maximum number of parallel threads in a parallelized operation */ 
  13. #define UNIV_MAX_PARALLELISM 32 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表