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".
我的问题是
- 什么是索引扫描(这是寻找要使用的适当索引的扫描吗?
- 是什么导致了这样的错误
- 查询这种规模的数据集是否超出了 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>
。)
我在 couchbase 4.1.0 上遇到一个问题 运行 通过 CBQ 查询大约 2000 万份文档。执行我的查询时,此错误会在 2 分钟超时后打印出来:
"code": 12015,
"msg": "Index scan timed out - cause: Index scan timed out".
我的问题是
- 什么是索引扫描(这是寻找要使用的适当索引的扫描吗?
- 是什么导致了这样的错误
- 查询这种规模的数据集是否超出了 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>
。)