【发布时间】:2020-10-26 16:55:38
【问题描述】:
我在浏览文档时找不到这个问题的答案。如果我使用 couchbase 的 QUERY 节点运行查询,couchbase 是否会根据查询节点中可用的核心自动将查询拆分为多个部分,以并行运行 SQL 的每个部分。例如,如果我有如下查询
SELECT * FROM bucket1;
查询节点有8个核心,上面的查询是分成8个部分吗?
【问题讨论】:
我在浏览文档时找不到这个问题的答案。如果我使用 couchbase 的 QUERY 节点运行查询,couchbase 是否会根据查询节点中可用的核心自动将查询拆分为多个部分,以并行运行 SQL 的每个部分。例如,如果我有如下查询
SELECT * FROM bucket1;
查询节点有8个核心,上面的查询是分成8个部分吗?
【问题讨论】:
查询示例:
SELECT *
FROM bucket1
WHERE ...;
上述查询首先需要解析、准备、计划。所有这些都是串行运行的。 Plan 生成各种运算符(Authorize、IndexScan、Fetch、Filter、Projection ......)。 在执行期间,假设没有阻塞操作(如组、聚合、排序),这些运算符中的每一个都独立运行并在不同文档上并行工作。在 Fetch 中,它使用尽可能多的内核来获取数据。 检查 EXPLAIN 是否存在并行运算符。默认情况下为 1,您可以通过设置查询参数 max_parallelism 来更改它(将更改这些运算符并行运行的副本数)(每个工作不同的文档)。由于上下文切换,设置更高的值可能会产生负面影响。
以下两个链接有详细说明的图表。
https://docs.couchbase.com/server/5.0/architecture/querying-data-with-n1ql.html https://dzone.com/articles/new-performance-tricks-with-n1ql
注意:CE 版本的查询服务仅使用 4 个核心。
【讨论】: