IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

更改Innodb 数据页大小优化MySQL

MySQL支持 2009-12-13 18:04:08 累计浏览 2,727 次
本机暂存

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

同分类推荐文章

  1. 注意:StarRocks 3.5.x 滚动升级触发 MV 全量刷新问题 (2026-07-24 16:00:00)
  2. 快速处理 ORA-01210: data file header is media corrupt 故障 (2026-07-24 07:38:56)
  3. 记录block 0损坏,数据文件大量坏块,使用不当数据库版本恢复等各种操作之后的故障处理 (2026-07-03 21:47:20)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,347)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,453)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,231)
  4. Mysql监控指南 (累计阅读 21,439)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,651)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,109)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,601)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 12,164)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,817)
  10. 深入浅出INNODB MVCC机制与原理 (累计阅读 9,731)