tarantool长WAL写

时间:2016-03-25 08:22:50

标签: tarantool

使用tarantool,为什么我记录这些奇怪的消息:

2016-03-24 16:19:58.987 [5803] main/493623/http/XXX.XXX.XXX.XXX:57295 txn.cc:214 W> too long WAL write: 0.527 sec
2016-03-24 16:20:09.841 [5803] main/493714/http/XXX.XXX.XXX.XXX:57346 txn.cc:214 W> too long WAL write: 0.605 sec
2016-03-24 16:20:12.988 [5803] main/493716/http/XXX.XXX.XXX.XXX:57347 txn.cc:214 W> too long WAL write: 1.682 sec
2016-03-24 16:20:15.023 [5803] main/493717/http/XXX.XXX.XXX.XXX:37825 txn.cc:214 W> too long WAL write: 3.373 sec
2016-03-24 16:20:35.145 [5803] main/494145/http/

2 个答案:

答案 0 :(得分:2)

在使用agent-0007直接进行现场帮助和调试后,我们发现了几个问题。

其中大多数都与慢速虚拟环境(使用openvz)有关,这表明io时间不合适。

此问题也与Tarantool sphia make slow selects?

有关

此外,还有关于慢速磁盘的建议: 如果可能,请尝试将WAL和Tarantool快照或Sophia存储放在不同的磁盘上。

snap_dir wal_dir sophia_dir 选项: http://tarantool.org/doc/book/configuration/index.html#basic-parameters

感谢。

答案 1 :(得分:2)

消息“太长的沃尔码写入时间”表示在将更新写入.xlog文件之间已经花费了太多时间(这里的“太多”意味着“比Tarantool的配置参数too_long_threshold中指定的时间还长)”。 / p>

有两个常见原因:1)磁盘速度慢2)应用程序方面的问题。

要弄清原因,请以1秒的间隔启动atop并检查“过长”事件期间发生了什么:disk util表示磁盘问题; cpu util表示应用程序问题。

对于慢速磁盘问题,建议的解决方案是将更改批量写入预写日志,其中每个批次都包装在一个事务中。这将使您每个事务仅写入一个磁盘。在这种情况下,您将不需要收益(请参见有关fiber.yield的注释)。

典型的应用程序问题如下:

  • 您发射了太多的光纤(因此,由于连续的光纤切换, 下一次WAL写入之前可能要花费很多时间);

  • 您无法在耗时的操作中获得收益(例如 扫描搜索,删除大量记录等)。

关于收益的说明:

  • 您需要使用fiber.yield()明确产生收益。
  • 您无需将耗时的操作转移到专用的 纤维;您也可以在主循环中启动它们,例如 require('fiber')并偶尔在程序中进行收益控制 循环(虽然不是很频繁,但按指定的间隔几次 too_long_threshold中的数字就足够了。

在优化应用程序代码时,请记住,一个Tarantool实例只能使用一个CPU内核,因此增加CPU内核的数量是没有用的-唯一的解决方案是确保光纤之间的控制量正确。