cassandra のログ (以下を参照) によると、存在するクエリが多すぎるため、クエリが中止されてtombstones
います。これは、週に 1 回、カウンターが低すぎる行をクリーンアップ (削除) するために発生しています。これにより、数十万行が「削除」されます(そのようにtombstone
. でマークされます)。
クリーンアップ プロセス中にノードがダウンしたために、このテーブルで削除された行が再表示されてもまったく問題はないので、gc grace time
影響を受ける単一のテーブルの時間を 10 時間 (デフォルトの 10 日から短縮) に設定しました。廃棄された行は、比較的高速に完全に削除される可能性があります。
とにかく、tombstone_failure_threshold
以下の例外を避けるために非常に高く設定する必要がありました. (10 万から 1 億に増加) 私の質問は、これは必要ですか? どのタイプのクエリが中止されるかはまったくわかりません。挿入、選択、削除?
一部の選択が中止されただけであれば、それほど大きな問題ではありません。しかし、それは、クエリが時期尚早に停止し、あまりにも多くの墓石が見つかる前に収集できたライブデータを返すという点で、中止が「制限付き」を意味すると想定しています。
もっと簡単に言うと、tombstone_failure_threshold
を超えるとどうなりますか?
INFO [HintedHandoff:36] 2014-02-12 17:44:22,355 HintedHandOffManager.java (line 323) Started hinted handoff for host: fb04ad4c-xxxx-4516-8569-xxxxxxxxx with IP: /XX.XX.XXX.XX
ERROR [HintedHandoff:36] 2014-02-12 17:44:22,667 SliceQueryFilter.java (line 200) Scanned over 100000 tombstones; query aborted (see tombstone_fail_threshold)
ERROR [HintedHandoff:36] 2014-02-12 17:44:22,668 CassandraDaemon.java (line 187) Exception in thread Thread[HintedHandoff:36,1,main]
org.apache.cassandra.db.filter.TombstoneOverwhelmingException
at org.apache.cassandra.db.filter.SliceQueryFilter.collectReducedColumns(SliceQueryFilter.java:201)
at org.apache.cassandra.db.filter.QueryFilter.collateColumns(QueryFilter.java:122)
at org.apache.cassandra.db.filter.QueryFilter.collateOnDiskAtom(QueryFilter.java:80)
at org.apache.cassandra.db.filter.QueryFilter.collateOnDiskAtom(QueryFilter.java:72)
at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:297)
at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:53)
at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1516)
at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1335)
at org.apache.cassandra.db.HintedHandOffManager.doDeliverHintsToEndpoint(HintedHandOffManager.java:351)
at org.apache.cassandra.db.HintedHandOffManager.deliverHintsToEndpoint(HintedHandOffManager.java:309)
at org.apache.cassandra.db.HintedHandOffManager.access$300(HintedHandOffManager.java:92)
at org.apache.cassandra.db.HintedHandOffManager$4.run(HintedHandOffManager.java:530)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
言及するのを忘れました。Cassandra バージョンの実行2.0.4