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

更改Innodb 数据页大小优化MySQL

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

     我们知道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. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

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