gpt4 book ai didi

tarantool 长 WAL 写

转载 作者:行者123 更新时间:2023-12-04 12:07:09 27 4
gpt4 key购买 nike

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

最佳答案

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

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

要找出原因,请启动 atop以 1 秒的间隔检查“过长”事件期间发生的情况:disk util表示磁盘问题; cpu util意味着应用问题。

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

典型的应用问题如下:

  • 你发射了太多的光纤(所以,由于连续的光纤切换,太
    在下一次 WAL 写入之前可能会过去很长时间);
  • 在耗时的操作中您没有任何 yield (例如制作完整的
    扫描搜索、删除大量记录等)。

  • yield 注意事项:
  • 您需要使用 fiber.yield() 显式产生 yield .
  • 您无需将耗时的操作转移到专门的
    纤维;你也可以在主循环中启动它们,比如require('fiber')偶尔在你的程序中产生控制
    循环(虽然不是太频繁,每个指定的间隔多次
    too_long_threshold已经足够了)。

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

    关于tarantool 长 WAL 写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36216437/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com