Public API Change

  • When running make with environment variable USE_SSE set and PORTABLE unset, will use all machine features available locally. Previously this combination only compiled SSE-related features.

New Features

  • CRC32C is now using the 3-way pipelined SSE algorithm crc32c_3way on supported platforms to improve performance. The system will choose to use this algorithm on supported platforms automatically whenever possible. If PCLMULQDQ is not supported it will fall back to the old Fast_CRC32 algorithm.
  • Provide lifetime hints when writing files on Linux. This reduces hardware write-amp on storage devices supporting multiple streams.
  • Add a DB stat, NUMBER_ITER_SKIP, which returns how many internal keys were skipped during iterations (e.g., due to being tombstones or duplicate versions of a key).
  • Add PerfContext counters, key_lock_wait_count and key_lock_wait_time, which measure the number of times transactions wait on key locks and total amount of time waiting.

Bug Fixes

  • Fix IOError on WAL write doesn’t propagate to write group follower
  • Make iterator invalid on merge error.
  • Fix performance issue in IngestExternalFile() affecting databases with large number of SST files.
  • Fix possible corruption to LSM structure when DeleteFilesInRange() deletes a subset of files spanned by a DeleteRange() marker.
  • Fix DB::Flush() keep waiting after flush finish under certain condition.