4

使用 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/
4

2 回答 2

4

消息“too long wal write”表示将更新写入 .xlog 文件之间的时间过长(“too much”在这里表示“超过 Tarantool 的配置参数too_long_threshold中指定的时间”)。

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

要弄清楚原因性质,atop以 1 秒的间隔启动并检查在“太长”事件期间发生了什么:disk util意味着磁盘问题;cpu util表示应用问题。

对于慢速磁盘问题,推荐的解决方案是将更改分批写入预写日志,其中每个批次都包含在单个事务中。这将为每个事务提供一次磁盘写入。在这种情况下,您将不需要收益(请参阅后面的注释fiber.yield)。

典型的应用问题如下:

  • 你发射了太多的光纤(因此,由于连续的光纤切换,在下一次 WAL 写入之前可能会经过太多时间);

  • 您在耗时的操作(例如进行全扫描搜索、删除大量记录等)中没有任何收益。

产量说明:

  • 您需要使用fiber.yield()进行明确的产量。
  • 您无需将耗时的操作转移到专用光纤;你也可以在主循环中启动它们,比如说 require('fiber')偶尔在你的程序周期中产生控制(虽然不是太频繁,每个指定的时间间隔几次too_long_threshold就足够了)。

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

于 2019-06-13T15:06:09.633 回答
3

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

其中大多数与缓慢的虚拟环境有关(使用了 openvz),这表明 io 计时不足。

这个问题也与Tarantool sphia make slow selections有关吗?

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

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

谢谢。

于 2016-03-28T10:39:07.683 回答