【原创】InnoDB 和TokuDB的读写分析与比较

php中文网
发布: 2016-06-07 17:36:28
原创
1406人浏览过

我们知道,在MySQL单机版本里面最流行的也是唯一支持全事务的引擎为INNODB。其特点是数据本身是用B-TREE来组织,数据本身即是庞大的根据主键聚簇的B-TREE索引。

我们知道,在mysql单机版本里面最流行的也是唯一支持全事务的引擎为innodb。 其特点是数据本身是用b-tree来组织,数据本身即是庞大的根据主键聚簇的b-tree索引。 所以在这点上,写入速度就会有些降低,因为要每次写入要用一次io来做索引树的重排。 特别是当数据量本身比内存大很多的情况下,cpu本身被磁盘io纠缠的做不了其他事情了。  这时我们要考虑如何减少对磁盘的io来排解cpu的处境,那么如何做呢? (当然,如果数据足够放到内存里面,这些事情大可不必考虑。)

1. 可以把INNODB 个PAGE增大?(默认16KB)但是增大也就带来了一些缺陷。 比如,对磁盘进行CHECKPOINT的时间将延后。

2. 把日志文件放到更快速的磁盘上?比如SSD?


其实这时,我们可以考虑用另外一个知名的引擎TokuDB。 谁叫MySQL 天生支持随意可插拔呢!

TokuDB 其实本身数据存储用到了B-TREE的变形版本Fractal-Tree。 Fractal-Tree 也就是在B-Tree原来的非叶子节点增加了一个缓存,无论对这个树怎么操作,都是一个模式:即父亲节点的缓存满了,,就流淌到儿子节点,然后儿子节点的缓存满了后,再次流淌到孙子节点等等一系列最后到了叶子节点,然后等到叶子节点的PAGE足够大的时候,进行CHECK POINT。当然不管如何做缓存,每次事务后,还是得首先刷新到REDO 日志,要不数据一致性就很难保证了。


接下来,这里测试下同样的环境InnoDB和TokuDB的性能差异。当然,我没有做压力测试,只是简单的手动执行了几次SQL而已。

绘蛙-创意文生图
绘蛙-创意文生图

绘蛙平台新推出的AI商品图生成工具

绘蛙-创意文生图 87
查看详情 绘蛙-创意文生图

(5.6.10-enterprise-commercial-advanced-log MySQL Enterprise Server - Advanced Edition (Commercial))

用来导入的文件大概为35M。


1. INNODB. 对应的参数: innodb_buffer_pool_size=32M bulk_insert_buffer_size=20M query_cache_size = 0 导入性能:(InnoDB在这里慢在CPU一直忙于IO置换。) mysql> load data infile '/tmp/t3_push.csv' into table t3_push; Query OK, 955527 rows affected (30 min 44.03 sec) Records: 955527 Deleted: 0 Skipped: 0 Warnings: 0 读性能:(读的性能还是很好的,这里用到5.6的ICP以及MRR特性。) mysql> select count(*) from t3_push where rank1 load data infile '/tmp/t3_push.csv' into table t3_push; Query OK, 955527 rows affected (38.72 sec) Records: 955527 Deleted: 0 Skipped: 0 Warnings: 0 调大后,其实导入性能还是不错的。


2. TokuDB. (5.5.30-tokudb-7.1.0-e-log TokuDB Enterprise Server (GPL) ) 对应的参数: tokudb_cache_size=32M tokudb_loader_memory_size=20M query_cache_size = 0 写性能:(这里IO次数很少,所以导入速度很快。) mysql> load data infile '/tmp/t3_push.csv' into table t3_push; Query OK, 955527 rows affected (19.73 sec) Records: 955527 Deleted: 0 Skipped: 0 Warnings: 0 读性能:(读的速度比INNODB稍微慢了些。) mysql> select count(*) from t3_push where rank1 select count(*) from t3_push where rank1 alter table t3_push add clustering index idx_rank2(rank2); Query OK, 0 rows affected (6.79 sec) Records: 0 Duplicates: 0 Warnings: 0 现在所有的基于索引idx_rank2 的查询都是瞬间的。 mysql> select count(*) from t3_push where rank1 select count(*) from t3_push where rank1

本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号