请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
首页 社区 数据库 怎么在mysql5.7中安装toku存储引擎

怎么在mysql5.7中安装toku存储引擎

猿梦 2023-1-4 07:26:36
TokuDB引擎是有Tokutek开发的一个数据库存储引擎,在设计之初便引入了独特的索引算法,在其 官网 测试中, 文章 中看到TokuDB性能比InnoDB高出很多。MySQL是一个插件式的数据库,在MySQL5.5版本之前MyISAM是MySQL的默认存储引擎,在之后的版本中默认的存储引擎变成了InnoDB。其特点是它支持事务,具有完善的崩溃恢复机制,具体的特点这里不说明,可以自行的寻找资料。这里介绍的TokuDB和InnoDB有很多相似之处:一个高性能,支持事务、MVCC、聚簇索引等。最大的不同在于TokuDB采用了一种叫做FractalTree的索引结构,使其在随机写数据的处理上有很大提升。一般来说数据库的索引结构都采用B+Tree或则类似的数据结构,InnoDB也是如此。InnoDB是以主键组织的B+Tree结构,数据按照主键顺序排列。对于顺序的自增主键有很好的性能,但是不适合随机写入,大量的随机I/O会使数据页分裂产生碎片,索引维护开销很多大。而TokuDB的Fractal Tree的索引结构很好的解决了这个问题。TokuDB解决随机写入的问题得益于其索引结构,Fractal Tree 和B-Tree的差别主要在于索引树的内部节点上,B-Tree索引的内部结构只有指向父节点和子节点的指针,而FractalTree的内部节点不仅有指向父节点和子节点的指针,还有一块Buffer区。当数据写入时会先落到这个Buffer区上,该区是一个FIFO结构,写是一个顺序的过程,和其他缓冲区一样,满了就一次性刷写数据。所以TokuDB上插入数据基本上变成了一个顺序添加的过程。TokuDB另一个特点是压缩性能和低CPU消耗,TokuDB存储引擎默认的块大小是4M,这使其有更好的压缩效率。默认支持压缩功能,不需要配置其他的东西。压缩选项有:TokuDB_Quicklz、TokuDB_Lzma、TokuDB_Zlib,同时也支持非压缩选项。TokuDB_Zlib支持的默认压缩格式。一般压缩都需要消耗更多的CPU。但TukuDB消耗的CPU资源较少。安装为了方便安装,直接在percona版本的MySQL上安装TokuDB存储引擎。Ubuntu下apt安装percona MySQL:doc/percona-server/5.6/installation/apt_repo.htmlvi /etc/apt/sources.list.d/percona.listdebapttrusty main其他:添加其他软件的更新,和本次安装无关vi /etc/apt/sources.listdebubuntutrusty main restricted universe multiversedebubuntutrusty-updates main restricted universe multiversedebubuntutrusty-security main restricted universe multiverse源添加完毕之后更新:apt-get update最后apt安装percona MySQL:apt-get install percona-server-server-5.6 percona-server-client-5.6以上percona MySQL安装完毕,接着就开始安装TokuDB。参考官网的安装说明:doc/percona-server/5.6/tokudb/tokudb_installation.html安装TokuDB的前提条件是需要支持jemalloc,需要关闭  Transparent huge pages ,执行:echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag效果:root@ptest:~# cat /sys/kernel/mm/transparent_hugepage/enabledalways madvise [never]root@ptest:~# cat /sys/kernel/mm/transparent_hugepage/defragalways madvise [never]开始apt安装TokuDB:root@ptest:~# apt-get install percona-server-tokudb-5.6安装好检查:root@ptest:~# ps_tokudb_admin --enable -uroot -pEnter password:Continuing without password...Checking if Percona server is running with jemalloc enabled...grep: /proc/5440/environ: Permission denied>> Percona server is running with jemalloc enabled.Checking transparent huge pages status on the system...>> Transparent huge pages are currently disabled on the system.Checking if thp-setting=never option is already set in config file...>> Option thp-setting=never is not set in the config file.>> (needed only if THP is not disabled permanently on the system)Checking TokuDB plugin status...>> TokuDB plugin is installed.Adding thp-setting=never option into /etc/mysql/f>> Successfuly added thp-setting=never option into /etc/mysql/f #把参数thp-setting=never加载到了f的[mysqld_safe]的选项组下通过show engines、show plugins 查看存储引擎,是否安装成功,要是没有成功则检查上面是否有错误。要是通过show engines没有TokuDB,但通过show plugins有则需要手动install:INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so';INSTALL PLUGIN tokudb_file_map SONAME 'ha_tokudb.so';INSTALL PLUGIN tokudb_fractal_tree_info SONAME 'ha_tokudb.so';INSTALL PLUGIN tokudb_fractal_tree_block_map SONAME 'ha_tokudb.so';INSTALL PLUGIN tokudb_trx SONAME 'ha_tokudb.so';INSTALL PLUGIN tokudb_locks SONAME 'ha_tokudb.so';INSTALL PLUGIN tokudb_lock_waits SONAME 'ha_tokudb.so';查看版本:>SELECT @@tokudb_version;+------------------+| @@tokudb_version |+------------------+| tokudb-7.5.6 |+------------------+以上就完成了TokuDB的安装。详细信息请见 官网 。测试:针对插入、压缩、存储引擎转换、事务、复制等日常用到的功能进行测试。1)插入和压缩性能:压缩参数: tokudb_row_formatzjy@127.0.0.1 : test 10:58:58>show create table login_log_Toku/G;*************************** 1. row *************************** Table: login_log_TokuCreate Table: CREATE TABLE `login_log_Toku` (`userID` varchar(255) NOT NULL,`tryIP` varchar(255) DEFAULT NULL,`tryTime` datetime DEFAULT NULL,`tryResult` tinyint(1) DEFAULT '0',`refferUrl` varchar(255) DEFAULT NULL,`sID` int(10) unsigned NOT NULL AUTO_INCREMENT,`authType` tinyint(1) DEFAULT '1',`type` tinyint(1) DEFAULT '1',`deviceType` varchar(64) DEFAULT '',PRIMARY KEY (`sID`),KEY `idx_tryip` (`tryIP`),KEY `idx_userid` (`userID`),KEY `idx_tryTime` (`tryTime`)) ENGINE=TokuDB DEFAULT CHARSET=utf81 row in set (0.01 sec)ERROR:No query specifiedzjy@127.0.0.1 : test 10:59:45>insert into login_log_Toku select * from login_log;Query OK, rows affected (18 min 35.63 sec)RecordsDuplicates: 0Warnings: 0zjy@127.0.0.1 : test 11:18:40>create table login_log_innodb like login_log;Query OK, 0 rows affected (0.11 sec)zjy@127.0.0.1 : test 11:27:58>insert into login_log_innodb select * from login_log;Query OK, rows affected (2 hours 1 min 34.06 sec)RecordsDuplicates: 0Warnings: 0zjy@127.0.0.1 : test 01:29:38>create table login_log_myisam like login_log;Query OK, 0 rows affected (0.15 sec)zjy@127.0.0.1 : test 08:56:30>alter table login_log_myisam engine = myisam;Query OK, 0 rows affected (0.10 sec)Records: 0Duplicates: 0Warnings: 0zjy@127.0.0.1 : test 08:56:51>insert into login_log_myisam select * from login_log;Query OK, rows affected (14 min 25.44 sec)RecordsDuplicates: 0Warnings: 0上面看到写入TokuDB表的时间远远小于InnoDB,MyISAM(堆表)的写入也比InnoDB好很多。-rw-rw---- 1 mysql mysql 8.7K5月7 23:27 login_log_innodb.frm-rw-rw---- 1 mysql mysql 9.7G5月8 03:12 login_log_innodb.ibd-rw-rw---- 1 mysql mysql 8.7K5月8 08:56 login_log_myisam.frm-rw-rw---- 1 mysql mysql 3.8G5月8 09:00 login_log_myisam.MYD-rw-rw---- 1 mysql mysql 1.7G5月8 09:11 login_log_myisam.MYI-rw-rw---- 1 mysql mysql 8.7K5月8 16:43 login_log_Toku.frm查看文件,看到InnoDB所占的空间比MyISAM大,9.7>5.5。TokuDB在数据库目录下面只保存.frm表结构定义文件,其数据保存在数据库的目录的上一层:ls -lh *toku*-rw------- 1 mysql mysql12K5月 12 17:00 log000000000005.tokulog27-rw-rw---- 1 mysql mysql64K5月8 16:43 _test_sql_c80_2a_status_34_1_1b.tokudb-rw-rw---- 1 mysql mysql 265M5月8 16:43 _test_login_log_Toku_key_idx_tryip_3c_1_1b_B_1.tokudb-rw-rw---- 1 mysql mysql 229M5月8 16:43 _test_login_log_Toku_key_idx_tryTime_3c_1_1b_B_3.tokudb-rw-rw---- 1 mysql mysql 282M5月8 16:43 _test_login_log_Toku_key_idx_userid_3c_1_1b_B_2.tokudb-rw-rw---- 1 mysql mysql 1.4G5月8 18:25 _test_login_log_Toku_main_3c_1_1b_B_0.tokudb-rw-rw---- 1 mysql mysql17K5月7 17:10 _test_ttt_main_5_1_1b_B_0.tokudb-rw-rw---- 1 mysql mysql16K5月7 17:10 _test_ttt_status_3_1_1b.tokudb-rw-rw---- 1 mysql mysql32K5月8 16:43 tokudb.directory-rw-rw---- 1 mysql mysql16K5月7 17:09 tokudb.environment-rw------- 1 mysql mysql05月7 17:09 __tokudb_lock_dont_delete_me_data-rw------- 1 mysql mysql05月7 17:09 __tokudb_lock_dont_delete_me_environment-rw------- 1 mysql mysql05月7 17:09 __tokudb_lock_dont_delete_me_logs-rw------- 1 mysql mysql05月7 17:09 __tokudb_lock_dont_delete_me_recovery-rw------- 1 mysql mysql05月7 17:09 __tokudb_lock_dont_delete_me_temp-rw-rw---- 1 mysql mysql32K5月8 16:43 tokudb.rollback从上面看出,TokuDB的索引文件和数据文件是分开的,一个索引一个文件。总共大小为2.2G,最小。其他为TokuDB的日志文件和一些元数据。
贫道孟谷蓝多*在下她洗干净衣服叫醒他!可以修改的呀选手动安装,在确定安装路径选择

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册