修改Innodb的数据页大小以优化MySQL的方法
程序员文章站
2024-02-29 16:52:28
我们知道innodb的数据页是16k,而且是一个硬性的规定,系统里没更改的办法,希望将来mysql也能也oracle一样支持多种数据页的大小。
但实际应用中有时16k显的...
我们知道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!
推荐阅读
-
修改Innodb的数据页大小以优化MySQL的方法
-
修改Innodb的数据页大小以优化MySQL的方法
-
修改MySQL的数据库引擎为INNODB的方法
-
mysql的MyISAM 和 InnoDB 的区别?优化MYSQL数据库的方法?,myisaminnodb
-
mysql的MyISAM 和 InnoDB 的区别?优化MYSQL数据库的方法?
-
修改MySQL的数据库引擎为INNODB的方法_MySQL
-
修改MySQL的数据库引擎为INNODB的方法_MySQL
-
怎么修改MySQL的数据库引擎为INNODB的方法
-
修改Innodb的数据页大小以优化MySQL的方法实例详解
-
修改Innodb的数据页大小以优化MySQL的方法_MySQL