Hi,
Following my previous Read query timing out, I'm now running in another timeout
issue, on cassandra 2.1.11.
Still with the same schema from the Akka Persistence Cassandra journal:
CREATE TABLE akka.messages (
persistence_id text,
partition_nr bigint,
sequence_nr bigint,
message blob,
used boolean static,
PRIMARY KEY ((persistence_id, partition_nr), sequence_nr)
) WITH CLUSTERING ORDER BY (sequence_nr ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class':
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression':
'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 216000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
The following query:
SELECT used from akka.messages WHERE
persistence_id = 'player-SW11f03e20b8802000' AND
partition_nr = 0;
times out, or when the timeout is increased (or using a faster cassandra
cluster), it reports the following trace:
activity
| timestamp | source |
source_elapsed
-----------------------------------------------------------------------------------------------------+----------------------------+----------------+----------------
Execute CQL3 query | 2015-11-11 19:38:34.424000 | 192.168.169.10 |
0
READ message received from /192.168.169.10
[MessagingService-Incoming-/192.168.169.10] | 2015-11-11 19:38:31.621000 |
192.168.169.20 | 30
Executing single-partition query on messages
[SharedPool-Worker-1] | 2015-11-11 19:38:31.623000 | 192.168.169.20 |
221
Acquiring sstable references
[SharedPool-Worker-1] | 2015-11-11 19:38:31.624000 | 192.168.169.20 |
237
Merging memtable tombstones
[SharedPool-Worker-1] | 2015-11-11 19:38:31.625000 | 192.168.169.20 |
270
Key cache hit for sstable 15
[SharedPool-Worker-1] | 2015-11-11 19:38:31.626000 | 192.168.169.20 |
438
Seeking to partition beginning in data file
[SharedPool-Worker-1] | 2015-11-11 19:38:31.627000 | 192.168.169.20 |
445
Skipped 0/1 non-slice-intersecting sstables, included 0 due to tombstones
[SharedPool-Worker-1] | 2015-11-11 19:38:31.628000 | 192.168.169.20 |
876
Merging data from memtables and 1 sstables
[SharedPool-Worker-1] | 2015-11-11 19:38:31.628000 | 192.168.169.20 |
884
Parsing
[SharedPool-Worker-1] | 2015-11-11 19:38:34.424000 | 192.168.169.10 |
83
Preparing statement
[SharedPool-Worker-1] | 2015-11-11 19:38:34.424000 | 192.168.169.10 |
273
reading data from /192.168.169.20
[SharedPool-Worker-1] | 2015-11-11 19:38:34.425000 | 192.168.169.10 |
766
Sending READ message to /192.168.169.20
[MessagingService-Outgoing-/192.168.169.20] | 2015-11-11 19:38:34.425000 |
192.168.169.10 | 920
Read 101 live and 0 tombstone cells
[SharedPool-Worker-1] | 2015-11-11 19:38:37.837000 | 192.168.169.20 |
215791
Enqueuing response to /192.168.169.10
[SharedPool-Worker-1] | 2015-11-11 19:38:37.850000 | 192.168.169.20 |
228498
Sending REQUEST_RESPONSE message to /192.168.169.10
[MessagingService-Outgoing-/192.168.169.10] | 2015-11-11 19:38:37.851000 |
192.168.169.20 | 228572
REQUEST_RESPONSE message received from /192.168.169.20
[MessagingService-Incoming-/192.168.169.20] | 2015-11-11 19:38:40.754000 |
192.168.169.10 | 330080
Processing response from /192.168.169.20
[SharedPool-Worker-2] | 2015-11-11 19:38:40.754000 | 192.168.169.10 |
330177
Request complete | 2015-11-11 19:38:40.813963 | 192.168.169.10 |
389963
This specific key has about 1900 records of around 50/100 bytes each which
makes it quite large (compared to others), and the `used` static column is True.
I know this is a C* anti-pattern, but regularly, smaller (older) `sequence_nr`
are deleted.
I think this isn't a problem since most of the read requests are bounded by
sequence_nr (and are pretty fast), so there are certainly many tombstones (even
though the trace above doesn't tell that).
What's strange is that it seems the query scans the whole set of records, even
though it should return only the static column (whose by definition has only
one value indepedently of the number of records), so it should be pretty fast,
isn't it?
Note that using `SELECT DISTINCT` doesn't seem to change anything regarding
speed (I understand that it is the recommended way of doing this kind of
queries).
Anyone can explain me how this problem can be solved, or what could be its root
cause?
Thanks for any answers,
--
Brice Figureau