Cassandra

Cassandra 查詢在不同時間執行不同

  • January 24, 2019

我在生產中使用 apache-cassandra-2.0.12,具有網路拓撲策略和 ReplicationFactor:集群中的 3 個,2 個 DC,每個包含 4 個節點

在分析讀取請求的響應時間時,我們發現一些查詢的執行速度比實際慢。例如:考慮下表

Create ColumnFamily "Employee"
(
 empID bigint,
 uniqueID text,
 col1 text,
 col2 text,
 col3 text,
 primary key (empID,uniqueID)
)

此 CF 包含超過 5K 行整體的數據,並且每個員工包含最少 100K 列和最多 1000K 列

因此,在此 CF 中,以下查詢的響應時間會不時發生巨大差異

SELECT * form "Employee" where empID = xxx and uniqueID = 'value';

有時上述查詢的響應時間超過 3 秒,而實際上應該在 50 毫秒內

我當時監控了節點的負載(壓縮時間、磁碟使用率等)、CPU 和記憶體。所有這些參數都是正常的。

有什麼我錯過的或者這是 cassandra 的正常行為嗎?

注意:我在這個 CF 中沒有任何墓碑列

primary key (empID,uniqueID)

此 CF 包含超過 5K 行整體的數據,並且每個員工包含最少 100K 列和最多 1000K 列

每個分區的行數太多了。我的猜測是查詢大分區時會發生查詢速度減慢。這完全取決於數據單元值大小和數據寬度,但作為一般規則,我不會為每個分區建模超過 10k-30k 行。

為了測試這一點,您可以nodetool tablehistorgrams在您的表上執行以測量諸如最大單元數和分區大小之類的東西。然後使用 對小型和大型分區執行您的查詢TRACING ON,我相信您會看到差異。

基本上,嘗試為較小的分區重新設計模型。

如果命中作為主節點的數據節點,並且只搜尋其他2個節點,那麼響應時間會更短。

如果請求命中非數據節點作為主節點,在複製因子為 3 的情況下,它需要從 3 個節點獲取數據,因此響應時間會更高。

CL=local_quorum

引用自:https://dba.stackexchange.com/questions/137324