The following are some highlighted updates with the newest release for InfluxDB 3. Learn more via our full Release Notes.
Updates
Core
Features
- Faster startup after large file removals: At startup, the files that snapshots and checkpoints mark as removed are now dropped from each table's file list in one pass. Previously, every removed file scanned the table's whole file list, so startup slowed sharply after many files were removed from a large table.
Bug fixes
- Catalog failed to load after upgrading to v3.12.0: The server now loads a catalog in which a table has more than one field family with the same automatically generated name. Core releases before v3.10.0 and Enterprise releases before v3.9.0 could write such names when fields were added to an existing table. v3.12.0 rejected them, so a node with an affected catalog failed to start.
- Acknowledged writes lost after a forced snapshot and a restart: WAL flushes now run one at a time. Previously, a forced Parquet snapshot, triggered by write buffer memory or
--force-snapshot-max-age, could run while an earlier WAL file was still being written, and recorded that file as covered before its rows reached the buffer. If the node restarted before the next snapshot, it skipped that file and the acknowledged writes in it were lost. - Overwrites lost across snapshots: When two Parquet files hold the same time window because it was persisted across two snapshots, a point in the later file now wins over a point with the same series and timestamp in the earlier file. Previously, the earlier file could win, so a query returned the value from before the overwrite.
- Failed streaming queries returned
200: A query in CSV, JSON, or JSON Lines format that fails before it returns any rows, such as a sort that exceeds the memory limit, now returns the error status and message. Previously, the server sent200and then dropped the connection, so clients saw an empty body and a transport error. An error after the first rows still ends the response early. - Writes near the maximum timestamp: A line with a timestamp later than
2262-04-11T23:39:59.999999999Zis now rejected with a400error. Previously, a timestamp that close to the maximum could panic the WAL flush when the server forced a snapshot. system.parquet_fileslisted files under the wrong tables: A query onsystem.parquet_fileswithout atable_namefilter now lists only the tables in the current database. Previously, it could list the current database's files under the names of tables in other databases that had the same table ID.- Other bug fixes and performance improvements
Enterprise
All Core updates are included in Enterprise.
Additional Enterprise-specific updates:
Features
- Larger bulk import batches (upgraded storage engine): The new
--compactor-import-batch-sizeoption sets the largest batch of staged data that one bulk import merge reads at once. The default is4gband is configurable up to one quarter of--compactor-input-size-budget. - Faster ingest node startup with many snapshots (upgraded storage engine): An ingest node no longer reads every snapshot manifest in object storage at startup. Previously, it read them all, so startup time grew with the number of manifests. The first start on v3.12.1 still reads every manifest once.
system.pt_ingest_filesnow lists the files from the newest manifest plus the snapshots taken since the node started. - Faster compaction I/O (Parquet engine): The compactor now uploads a finished output file while it encodes the next one, and checks up to 8 input files at a time. Previously, it did both one file at a time.
- WAL flush wait metric (Parquet engine): The new
influxdb3_parquet_wal_flush_lock_wait_secondshistogram reports how long a WAL flush waited for an earlier flush to finish. Thekindlabel istimedfor the regular flush interval andforcedfor a flush that forces a snapshot.
Bug fixes
- Missing rows after changing a table's file index columns (Parquet engine): The file index now records which columns each compacted generation indexed. A query that filters on a column that only some generations indexed scans the other generations instead of skipping them. Previously, after you added or removed file index columns, such a query could return incomplete results from compacted data.
- Overwrites reverted to the older value (upgraded storage engine): When the ingest buffer merges new writes into data it already merged for the same time window, a later write now wins over an earlier write to the same series and timestamp. Previously, the earlier value could replace the later one.
- Storage engine upgrade failed with more than one compact node: During an upgrade to the upgraded storage engine, only the compact node that holds the compactor lease now drives the upgrade. Previously, every compact node drove it at the same time, their progress updates conflicted, and the upgrade could be marked as failed.
- Compactor replanned forever against a missing data file (upgraded storage engine): A run set whose data file is confirmed gone from object storage is now skipped after three failed compaction attempts, so planning moves on to other work. Previously, the compactor planned the same compaction on every pass, and it failed every time. Skipped run sets are counted in
influxdb3_compactor_skipped_run_setswithreason="auto_data_file_not_found". Compactions of new snapshots and imports aren't covered. - Bulk import could stall object storage requests (upgraded storage engine): The server no longer leaves object storage requests unfinished while it checks the status of uploaded imports. Previously, during a credential refresh, one of those requests could hold the object store client's credential lock and never release it, so every other request on the node waited behind it: the server stayed up but stopped reading from and writing to object storage.
- Nodes without query mode built an unused file index (Parquet engine): Only nodes that run in
querymode, includingall, now load the compacted data file index at startup. Previously, compact and process nodes also loaded it, which used startup time and memory for an index they never read. A node that skips the index logscompacted-data file index not loaded. - Ingest node refused to restart after an unclean stop (Parquet engine): An ingest node that stopped without a clean shutdown now starts again. Previously, if a snapshot covered all of its WAL or a forced snapshot ran during startup, the node could fail every start with an error that it was
still running in another process, though no other process existed. - Other bug fixes and performance improvements