2016-11-10 11 views
0

毎分テーブルの選択カウント(*)を使用すると、Cassandraが約150Kの書き込みを大幅に増加させるシナリオを経験しました毎秒。Cassandraで選択カウント(*)に影響を与える

誰もこの奇妙な行動を説明できますか? SelectクエリでCassandraの書き込み回数が大幅に増加するのはなぜですか?

ありがとうございます!

+0

これは少し奇妙です。 C *が書き込み回数を増やさなければならない理由については何の指摘もありません。どのように測定しましたか? – xmas79

+0

これが起こる理由は想像もできません。もっと多くの可能性がありますが、別のプロセスがある... – RussS

+0

"書き込み"という用語を明確にすることは可能ですか?ディスク書き込みとCassandraの突然変異を区別するだけです。書き込み要求がnodetool tpstatsでバックアップされていて、突然変異がなくなっていますか?または、ディスクキューイングを監視していますか?毎秒150Kの突然変異は、多くのトラフィックです。 – suiterdev

答えて

0

その読み取り修理が変異を送信する場合は、

org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBackground

org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBlocking

メトリクスをチェックすると、あなたが見ることができます。カウント(*)を処理するためにすべてのデータを読み取っていると、データが矛盾している場合に多くの読み取り修復が発生します。その場合、テーブル(ALTER TABLE)のread_repair_chancedclocal_read_repair_chanceを下げると、負荷が軽減されます。

他の可能性が高い可能性がある:

  • あなたは、いくつかの%として(グローバルまたはテーブルの上に)有効をトレースしています。
  • DSEを使用していて、低速クエリが有効になっている場合。
+0

クリスおかげで! カサンドラはこれらの選択クエリで複数のリード修復を実行しましたが、これは私が経験していた問題の根本的な原因である可能性が高いです。 – GPSS

0

可能な説明がthe write path of an updateで見つけることができます。書き込み時には

、カサンドラは、重複するレコードが存在するかどうかチェックせずにデータベースにそれぞれの新しい行を追加します。このポリシーにより、同じ行の多くのバージョンがデータベースに存在する可能性があります。

次に、2つの以上のノード上の各行の

ほとんどCassandraのインストールストアのレプリカ。各ノードは、独立して圧縮を実行します。これは、古いバージョンの行が1つのノードから削除されたとしても、その行がまだ別のノードに存在する可能性があることを意味します。

そして最後に:

カサンドラは、リード処理時に比較の別のラウンドを行い、このためです。クライアントが特定の主キーを持つデータを要求すると、Cassandraは1つまたは複数のレプリカから行の多くのバージョンを取得します。

関連する問題