N1QL Error Index scan timed out - 原因:索引扫描超时

N1QL Error Index scan timed out - cause: Index scan timed out

我在 couchbase 4.1.0 上遇到一个问题 运行 通过 CBQ 查询大约 2000 万份文档。执行我的查询时,此错误会在 2 分钟超时后打印出来:

"code": 12015,

"msg": "Index scan timed out - cause: Index scan timed out".

我的问题是

  1. 什么是索引扫描(这是寻找要使用的适当索引的扫描吗?
  2. 是什么导致了这样的错误
  3. 查询这种规模的数据集是否超出了 couchbase 的能力?

索引扫描是在索引中查找查询谓词的过程。例如。如果您有一个名为 "a" 的字段和一个名为 "ix_a" 的字段索引,查询 "SELECT * FROM bucket where A = 123" 将对索引 ix_a 执行索引扫描以查找值 123 . 正如 Gerald 在评论中指出的那样,默认索引 扫描超时为 2 分钟。这可以在设置中进行调整。

此错误可能是由于索引节点过小造成的,例如 RAM 不足,因此索引主要从磁盘读取,尤其是在索引字段非常大的情况下。或者服务器正忙。在 4.1.0 中,COUNT(*) 查询还执行索引扫描,因此它会有效地遍历整个主索引并对所有项目进行计数。

查询 2000 万个项目完全在 Couchbase Server 的能力范围内,但您必须考虑正确设计索引以确保查询执行良好。

这是一个非常笼统的答案。如果您可以 post 您的查询和查询执行计划,将会有所帮助。 (要获取执行计划,运行 N1QL 中的以下命令:EXPLAIN <your query>。)