原文链接http://www.mysqlsupport.cn/change_innodb_page_size/
作者:吴炳锡 来源: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
========================
*/
/* 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_SHIFT14
/* Maximum number of parallel threads in a parallelized operation */
#define UNIV_MAX_PARALLELISM32
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_SHIFT12 if UNIV_PAGE_SIZ=4K
#define UNIV_PAGE_SIZE_SHIFT13 if UNIV_PAGE_SIZ=8K
#define UNIV_PAGE_SIZE_SHIFT15 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_SHIFT13
/* Maximum number of parallel threads in a parallelized operation */
#define UNIV_MAX_PARALLELISM32
重新编译,然后测试测试,再测试。Good luck!
分享到:
相关推荐
实际上,虽然MySQL官方并未提供修改InnoDB数据页大小的直接选项,但是有经验的DBA可以通过修改源代码来实现这一目标。这个过程涉及到对MySQL源代码的深入理解和编译,因此需要谨慎操作。以下是修改InnoDB数据页大小...
- **第二层优化**:优化了并发读取计数器的处理方式,通过使用缓存行大小对齐的计数器数组来减少缓存一致性问题,从而进一步提高并发性能。 2. **Buffer Pool Flushing**: - 原有的模糊检查点策略(Fuzzy ...
### MySQL InnoDB 查询优化实现分析 #### 一、目的与背景 本文旨在深入探讨 MySQL + InnoDB 存储引擎在实现查询优化时所采取的方法及其内部机制。通过具体实例和详细的技术解析,揭示 InnoDB 如何高效处理各种查询...
InnoDB数据页是MySQL数据库中InnoDB存储引擎管理数据的基本单位,每个数据页通常有16KB的大小。数据页不仅包含用户记录,还包含其他元数据信息,帮助InnoDB有效地存储和检索数据。以下是数据页结构的详细分析: 1. ...
### MySQL Innodb 参数详解与优化实践 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,其InnoDB存储引擎因其高可靠性和事务处理能力而备受青睐。为了充分发挥InnoDB的优势并针对特定场景进行性能...
数据页的大小可以通过参数 `innodb_page_size` 进行调整,该参数自 MySQL 5.6 版本起引入,允许设置为 8KB、4KB 或者默认的 16KB。在数据库初始化时就需要设定该值,一旦数据表被创建,再尝试更改此参数会导致错误。...
MySQL 中 InnoDB 存储引擎使用 buffer pool 来缓存从磁盘读取到内存的数据页。Buffer pool 通常由数个内存块加上一组控制结构体对象组成。内存块的个数取决于 buffer pool instance 的个数,但是在 5.7 版本中开始...
- **物理逻辑日志**:记录了对数据页所做的物理更改,用于崩溃恢复。 - **没有 Oracle 归档重做日志**:InnoDB 不支持归档重做日志,所有重做日志文件都会循环使用。 #### 表空间的内部组织结构 表空间内部由多...
在Windows平台上对MySQL进行优化配置是一项重要的任务,它不仅能够提升数据库系统的性能,还能确保数据处理的效率与安全性。本文将详细介绍如何针对Windows平台下的MySQL服务器进行合理的配置优化,帮助读者更好地...
- **MySQL配置文件优化**:修改`my.cnf`文件,优化如`innodb_buffer_pool_size`、`query_cache_size`等关键设置。 - **第三方配置工具**:利用如MySQLTuner、pt-query-digest等工具进行自动化调优。 6. **服务器...
重做日志(Redo Log)用于记录事务对数据页的更改,确保在系统崩溃时能够恢复未完成的事务。此外,还有undo日志,用于回滚事务。 InnoDB的缓冲池(Buffer Pool)是内存中的一大块区域,用于缓存数据和索引页,减少...
- **监控和调整InnoDB缓冲池大小**:InnoDB缓冲池是InnoDB表数据和索引的缓存区域,适当增大缓冲池的大小可以显著提高查询性能。 - **定期维护表结构**:定期执行`OPTIMIZE TABLE`操作可以帮助整理表结构,减少碎片...
深入理解这些InnoDB的关键特性,可以帮助你在设计和优化MySQL数据库时做出更明智的决策。通过jb51.net提供的资源,你将有机会深入了解InnoDB的工作机制,并学习如何利用这些特性来提升数据库的性能和稳定性。无论是...
MySQL的InnoDB存储引擎在处理大量数据和高并发事务时,其性能调优至关重要。以下是一些关于如何配置和优化InnoDB性能的关键提示: 1. **监控InnoDB状态**: 使用`SHOW INNODB STATUS`命令可以查看InnoDB引擎的状态...
- 缓冲池(如InnoDB Buffer Pool):对于处理大量数据的MySQL实例,增大InnoDB Buffer Pool的大小可以减少磁盘I/O,提高性能。但要注意,过度配置可能导致内存不足,影响其他系统进程。 - 查询缓存(Query Cache)...
6. **页大小**:InnoDB默认的页大小为16KB,这是其物理存储的基本单位。数据、索引和其他元数据都存储在这些页中。 7. **自增ID**:InnoDB表有一个特殊的内置列,即自动增长列(通常为主键),每次插入新行时,该列...
优化MySQL数据库通常涉及多个方面,如使用合适的数据类型和大小、合理设计数据库表结构、优化SQL语句、合理利用索引以及调整MySQL的配置参数等。例如,通过EXPLAIN关键字可以分析SQL查询的执行计划,从而发现是否...
标题《XtraDB、InnoDB 内部结构示意图》表明文章将重点介绍MySQL数据库中XtraDB和InnoDB存储引擎的内部架构。...文章还对比了标准InnoDB与XtraDB在配置和特性上的差异,帮助读者更好地理解和优化MySQL数据库的性能。
- **InnoDB数据文件和日志文件的位置与大小**:可以通过设置参数来指定InnoDB表空间的存储位置和大小,以优化I/O性能。 5. **日志管理**: - **重做日志(innodb_log_file_size)**:记录事务的更改,用于崩溃...