NEW  New: cqlint (lint + format), cql-migrate and cqlprof → see the benchmarks

cqlprof

Cassandra has no EXPLAIN, but it has tracing. cqlprof reads the trace and says where the time and the work went.

$ cargo install cqlprof
Output

A trace, explained

Example

5,000 deleted rows in one partition

SELECT * FROM pf.q WHERE pk = 1
  client latency   p50 1.11 ms   p99 1.95 ms
  trace (scylla)   server 833 µs, 1 replica targeted
  work             10 live row(s), 2990 tombstone(s)
  warning [PROF001] scanned 2990 tombstones to return 10 live rows

Findings

from the trace, not from guessing

PROF001 tombstone-scanPROF002 many-sstablesPROF003 large-readPROF004 slow-statementPROF005 tail-latencyPROF006 lightweight-transaction

Engines

trace parsing tested on real traces

ScyllaDBCassandra 5.0Cassandra 4.x
Safe to run

Bounded and read-only by default

SELECT
only reads run; writes need --allow-writes
1 page
a missing LIMIT cannot scan the table
sampled
? markers get values from a real row
p50 / p99
untraced repetitions, first run dropped
Use

One command

cqlprof -e "SELECT * FROM shop.orders WHERE customer = 1"
cqlprof queries/*.cql -k shop --repeat 100 --format json