首页 > 数据库 > Mysql数据库引擎innodb转换为TokuDB
2016
07-16

Mysql数据库引擎innodb转换为TokuDB

阿里云mysql数据库innodb引擎转换为tokudb

TokuDB是一个高性能、写密集型引擎,提供了更高的压缩和更好的性能 The TokuDB storage engine is for use in high-performance and write-intensive environments, offering increased compression and better performance.

使用须知
1、 TokuDB可以大幅度降低存储使用量和IOPS开销
2、 TokuDB支持在线DDL,添加/删除列和索引不会引起阻塞
3、 TokuDB无法支持外键Foreign Key
4、 TokuDB不适用于大量读取的场景

一,先安装带有tokudb引擎的mariadb数据库/install mariadb

tokudb引擎依赖ha_tokudb.so,此模块在/usr/lib64/mysql/plugin/ha_tokudb.so,因此初始化mysql:

centos系统参数调整:

启动mysql查看默认参数:

参数设置参考
https://mariadb.com/kb/en/mariadb/tokudb-system-variables/
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_variables.html

二,调整内存使用的比率及删除外键

1,阿里云的rds数据库服务器,有loose_tokudb_buffer_pool_ratio这个参数,如果数据库由innodb或者myisam转为tokudb,需要调整内存的使用比率,下面为阿里云rds的调整:

设置loose_tokudb_buffer_pool_ratio为合适的比例,也就是tokudb占用tokudb与innodb共用缓存的比例,默认在tokudb不使用的情况下是0,如果全部都用tokudb可以改为100,也可以在innodb转换tokudb前根据下面公式来计算:

更改完这个参数后再开始转换引擎,如果是一个新的数据库,此步骤忽略

2,mariadb没有loose_tokudb_buffer_pool_ratio参数,我们可以修改配置文件,如下操作,参数根据实际情况设置:

3,因为tokudb不支持外键,所以转换引擎之前删除

三,生成转换tokudb的脚本

1,直接生成alter的语句,用screen后台执行

2,如果用percona-toolkit的话,可以这样生成:

下面为生成的shell

还有几个参数对tokudb的转换速度影响较大
tokudb_cache_size: Size in bytes of the TokuDB cache,相当于innodb的innodb_buffer_pool_size
tokudb_load_save_space : default is off and should be left alone unless you are low on disk space.
tokudb_cache_size : if unset the TokuDB will allocate 50% of RAM for it’s own caching mechanism, we generally recommend leaving this setting alone. As you are running on an existing server you need to make sure that you aren’t over-committing memory between TokuDB, InnoDB, and MyISAM.

四,更改tokudb的参数

1,更改默认db引擎
set global default_storage_engine=TokuDB;

2,更改tokudb的使用内存
loose_tokudb_buffer_pool_ratio=100(阿里云rds)
tokudb_cache_size=物理内存的60%

转换完成后,数据库的占用空间是以前的30%,压缩效果挺大的,更多信息请持续关注。

可以参考的资料:

MariaDB的tokudb介绍
percona的tokudb引擎介绍
RDS TokuDB小手册
RDS MySQL空间优化最佳实践
Percona TokuDB – Documentation

最后编辑:
作者:bbotte
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。