我有2个数据库服务器在3节点代理上以Active-Failover模式运行,都在RocksDB上运行3.4.5版,并且出现意外的领导者/跟随者交换机问题。
由于某种原因,运行某个查询会导致集群对切换角色。问题是我在日志中找不到任何指向 为什么 的情况。我一直在浏览TRACE
日志,但看不到任何看起来不合适的地方。
我的问题是: 是什么原因导致集群切换角色?
作为参考,我正在同步两个集合,每个集合具有大约40万条记录,并用Perm_Collection
中的数据更新永久集合(Temp_Collection
)。同样,无论是从Foxx,aragosh还是通过WebUI运行查询,都会发生切换。这是explain
计划:
Query String:
FOR t IN Temp_Collection
LET d = UNSET(t, ['_id','_rev'])
UPSERT { _key: t._key }
INSERT d
REPLACE d
IN Perm_Collection
Execution plan:
Id NodeType Est. Comment
1 SingletonNode 1 * ROOT
2 EnumerateCollectionNode 402798 - FOR t IN Temp_Collection /* full collection scan */
10 SubqueryNode 402798 - LET #5 = ... /* subquery */
4 SingletonNode 1 * ROOT
13 IndexNode 1 - FOR #3 IN Perm_Collection /* primary index scan */
8 LimitNode 1 - LIMIT 0, 1
9 ReturnNode 1 - RETURN #3
3 CalculationNode 402798 - LET d = UNSET(t, [ "_id", "_rev" ]) /* simple expression */ /* collections used: t : Temp_Collection */
11 CalculationNode 402798 - LET $OLD = #5[0] /* simple expression */
12 UpsertNode 0 - UPSERT $OLD INSERT d REPLACE d IN Perm_Collection
Indexes used:
By Type Collection Unique Sparse Selectivity Fields Ranges
13 primary Perm_Collection true false 100.00 % [ `_key` ] (#3.`_key` == t.`_key`)
12 primary Perm_Collection true false n/a [ `_key` ] $OLD
Functions used:
Name Deterministic Cacheable Uses V8
UNSET true true false
Optimization rules applied:
Id RuleName
1 remove-data-modification-out-variables
2 use-indexes
3 remove-filter-covered-by-index
4 remove-unnecessary-calculations-2
5 move-calculations-down
Write query options:
Option Value
ignoreErrors false
waitForSync false
nullMeansRemove false
mergeObjects true
ignoreDocumentNotFound false
readCompleteInput false
useIsRestore false
consultAqlWriteFilter false
exclusive false
overwrite false
ignoreRevs true
同样,我不是在寻求有关此特定查询的帮助,只是试图揭示系统选择切换角色的原因。我尝试使用INSERT ... OPTIONS { overwrite: true }
,但失败,结果相同。
到目前为止,我发明的唯一解释与“慢”查询有关。该查询需要很长时间才能运行(超过2分钟),因此系统可能认为引擎已锁定? Foxx服务可能会超时吗?