ScyllaDB Enterprise 2021.1.10

The ScyllaDB team announces ScyllaDB Enterprise 2021.1.10, a bug-fix production-ready ScyllaDB Enterprise patch release for ScyllaDB Enterprise 2021.1. ScyllaDB Enterprise customers are encouraged to upgrade to ScyllaDB Enterprise 2021.1.10 in coordination with the ScyllaDB support team.

ScyllaDB Enterprise 2021.1.10 brings focus on bug fixes, stabilization and tooling improvement.

In particular, 2021.1.10 includes improvements in reverse queries and Workload Prioritization (below)

Related Links

ARM Support

ScyllaDB Enterprise 2021.1.10 now supports ARM architecture, including:

  • EC2 ARM base AMI, ready for Graviton2
  • Running ScyllaDB Docker on ARM , including Mac M1

Reverse Queries

A reverse query is a query SELECT that uses a reverse order compared to the one used in the table schema. If no order was defined, the default order is ascending (ASC).

For example, the following table schema orders the rows in a partition by “time” in ascending order:

CREATE TABLE heartrate (
   pet_chip_id uuid,
   owner uuid,
   time timestamp,
   heart_rate int,
   PRIMARY KEY (pet_chip_id, time)
);

The following SELECT worked in ScyllaDB Enterprise 2021.1.9  but might be very inefficient:

SELECT * FROM heartrate LIMIT 1 ORDER BY time DESC

In 2021.1.10 the performance would be better, with more improvements coming in following releases.

This release include the following:

  • Reverse single-partition reads in SSTables #2023
  • Reverse order reader for memtable #9174 #9486

Workload Prioritization

Workload prioritization assures different user workloads receive CPU and IO based on their relative priority. Before this release, a single semaphore guarding memory and read permits usage for all workloads.

With this release, a separate semaphore for each workload is introduced. This improves workload isolation, so a lower priority workload cannot overtake higher priority workloads.

Alternator

  • Alternator, now fully supports nested attribute paths. Nested attribute processing happens when an item’s attribute is itself an object, and an operation modifies just one of the object’s attributes instead of the entire object. #5024 #8043
  • Alternator now supports nested attribute paths in all expressions #8066
  • Alternator now supports slow query logging capability. Queries that last longer than the specified threshold are logged in `system_traces.node_slow_log` and traced. #8292
  • Alternator: deleting a nested path with non-existent leaf should work  #10043

Performance and Stability Improvements

A list of performance and stability improvements and bug fixes below, each with open source reference, is available:

  • Performance: The Log-Structured Allocator (LSA) is the underlying memory allocator behind ScyllaDB’s cache and memtables. When memory runs out, it is called to evict objects from cache, and to defragment free memory, in order to serve new allocation requests. If memory was especially fragmented, or if the allocation request was large, this could take a long while, causing a latency spike. To combat this, a new background reclaim service is added which evicts and defragments memory ahead of time and maintains a watermark of free, non-fragmented memory from which allocations can be satisfied quickly. This is somewhat similar to kswapd on Linux. #1634
  • Tracing: slow query tracing for replica node does not work #9403
  • Memtable performance and stability improvements:
    • The row cache behavior was quadratic in certain cases where many range tombstones were present. This has been fixed. #2581
    • Stability:  Overlapping range tombstones can lead to very slow reads and OOMs #8625
    • Reverse order reader for memtable #9174 #9486
    • Performance: a regression in the memtable reader was fixed. The regression was introduced when adding support to reverse queries. #9502
    • partition_snapshot_reader copies and merges all range tombstones from all partition versions upon its construction which is suboptimal #1671
    • Possible use after move #9605
  • Stability: Allow integers in scientific format in INSERT JSON #10100
  • Performance: Bad performance in asymmetric read/write disks (RAID1 network/local disks) seastar#967
  • Stability: system.clients: Reinforce cleanup and disable commitlog
  • Install: Offline installer failing to install on ubuntu 20.04 (missing backport) #2142
  • Performance: Implement SSTable reshape for ICS
  • Stability: in rare cases, a huge logger message can kill a node. Example is reshape of repair across a big number of tables #10336
  • Stability: Gossip ACK message in the wrong scheduling group cause latency spikes in some cases #7986
  • Stability: High latency during bootstrap, background reclaim ineffective #8473
  • Performance: Unintended quadratic behavior in the log-structured allocator (which manages ScyllaDB memtable and cache memory) has been fixed. #8542
  • The setup utility now recognizes Persistent Disks on Google Cloud Platform PR#9395
  • Alternator: Missing counter for Alternator BatchGetItem operations #9406
  • Alternator: wrong ReturnValues=ALL_NEW results when update expression has both REMOVE and SET/ADD #9542
  • Stability: A crash in ScyllaDB memory management code, triggered by index file caching, was fixed. The bug was caused by an allocation from within the memory allocator causing cache eviction in order to free memory. Freeing the evicted items re-enters the memory allocator, in a way that was not expected by the code. Fixes #9573
  • Correctness: lsa-timing reports bad units, milliseconds instead of nanoseconds  #9733
  • The INSERT JSON statement now correctly rejects empty string partition keys. #9853
  • Stability: compare_atomic_cell_for_merge doesn’t compare TTL if expiry is the same. This is not consistent with the way the cell hash is computed, and may cause repair to keep trying to repair discrepancies caused by the ttl being different.  #10156, #10173
  • CQL: Incorrect results returned with IN clause in a partition and index restriction and ALLOW FILTERING #10300

14 Apr 2022