「DeviceID」や「DayOfYear」などの列に 2 つのセカンダリ インデックスを持つ Cassandra 0.8 を使用しています。日付の範囲内でデバイスのデータを取得するために、これら 2 つのインデックスがあります。日付フィルターを取得するたびに、これを DayOfYear に変換し、.net Thrift API を使用してインデックス付きスライスを使用して検索します。現在、DB もアップグレードできません。
私の問題は、通常、現在の日付の get_indexed_slices クエリを使用して行を取得する際に問題がないことです (現在の日付を使用)。しかし、昨日の日付 (インデックス付きの列の 1 つ) をクエリすると、初めてクエリを実行するときにタイムアウトが発生します。ほとんどの場合、2 回目にクエリを実行すると返され、3 回目には 100% 返されます。
これらの列は両方とも、列ファミリーで double データ型として作成され、通常、1 分間に 1 レコードを取得します。クラスターに 3 つのノードがあり、nodetool のレポートではノードが稼働中であることが示されていますが、nodetool からの負荷分散レポートは次のようになっています。
Starting NodeTool
Address DC Rack Status State Load Owns
YAMLでの私の設定は以下の通りです。
xxx.xx.xxx.xx datacenter1 rack1 Up Normal 7.59 GB 51.39%
xxx.xx.xxx.xx datacenter1 rack1 Up Normal 394.24 MB 3.81%
xxx.xx.xxx.xx datacenter1 rack1 Up Normal 4.42 GB 44.80%
hinted_handoff_enabled: true
max_hint_window_in_ms: 3600000 # one hour
hinted_handoff_throttle_delay_in_ms: 50
partitioner: org.apache.cassandra.dht.RandomPartitioner
commitlog_sync: periodic
commitlog_sync_period_in_ms: 120000
flush_largest_memtables_at: 0.75
reduce_cache_sizes_at: 0.85
reduce_cache_capacity_to: 0.6
concurrent_reads: 32
concurrent_writes: 24
sliced_buffer_size_in_kb: 64
rpc_keepalive: true
rpc_server_type: sync
thrift_framed_transport_size_in_mb: 15
thrift_max_message_length_in_mb: 16
incremental_backups: true
snapshot_before_compaction: false
column_index_size_in_kb: 64
in_memory_compaction_limit_in_mb: 64
multithreaded_compaction: false
compaction_throughput_mb_per_sec: 16
compaction_preheat_key_cache: true
rpc_timeout_in_ms: 50000
index_interval: 128
不足している可能性のあるものはありますか?設定に問題はありませんか?