在我最近对MongoDB基准,我们可以看到两个引擎WiredTiger从期刊吞吐量下降和TokuMX斗争,这显然是与一个检查点间隔——因此我对应一个检查站的活动。
有趣的是,我认为我们解决InnoDB检查点问题一次,。InnoDB有很多帖子在这个问题上,大约4年前。当时我们做了很多的研究工作对修复Percona服务器雷竞技下载官网
- https://www.雷竞技下载官网percona.com/blog/2011/04/04/innodb-flushing-theory-and-solutions/
- https://www.雷竞技下载官网percona.com/blog/2011/03/31/innodb-flushing-a-lot-of-memory-and-slow-disk/
- https://www.雷竞技下载官网percona.com/blog/2011/01/03/mysql-5-5-8-in-search-of-stability/
- https://www.雷竞技下载官网percona.com/blog/2010/12/20/mysql-5-5-8-and-percona-server-being-adaptive/
但是,就像男爵说,“历史重演“…,似乎它也重复技术问题。
所以,让我们来看看什么是检查点,以及为什么它对存储引擎是一个问题。
正如你可能知道的,事务引擎写事务日志(名字你可以看到:“重做日志”,写前日志或细胞膜等),
能够执行崩溃恢复的数据库服务器崩溃或断电。保持在某种程度上恢复所需的时间(我们都希望数据库将开始快速),引擎必须限制有多少更改日志。这个事务引擎执行“检查点”,基本上同步内存的变化与相应的更改日志,所以旧的日志记录可以删除。通常结果书面更改数据库页面从记忆永久存储。
InnoDB需要一种方法来限制大小的日志文件(在总等于innodb-log-file-size * innodb-log-files-in-group),这是我的名字“规模有限的检查点”。
TokuDB和WiredTiger限制时间的变化(默认情况下60秒),这导致日志文件可能会无限的在一个给定的时间间隔(我的名字“时间有限的检查点”)。
也不同的是InnoDB“模糊检查点”的方法,不是真正的“模糊”,直到我们修复它,但是基本上没有等到我们到达大小有限,但执行“检查点”,和更密集的我们越接近日志大小限制。这允许实现或多或少地顺利吞吐量,没有显著下降的吞吐量。
与InnoDB, TokuDB(我相信)和WiredTiger(我猜测,我没有看着WiredTiger内部)等到最后一刻,严格按规定和执行检查点间隔。如果它发生在内存中数据库包含许多变化,这将导致性能摊位。这种效应也很近,影响“全速撞击墙”:用户查询得到锁,直到发动机写到内存中所有更改必须写。
RocksDB有趣的,因为它有一个不同的架构(我可以写在未来,但现在我将指向RocksDB维基与检查点),没有这个问题(它但是有自己的背景活动,如件和墓碑维护水平,但这是一个不同的主题)。
我不知道如何WiredTiger与检查点方法这一问题,但我们希望改善TokuDB少让这个痛苦的用户查询,并最终转移到“模糊检查点”模型。





