Skip to content

2026.10.48 — 2026-10-14 ​

Breaking ​

  • Performance hardening — UUIDv7 keys, partitioned history, bounded jobs, connections and streams, external PostgreSQL, load test (#236) (73e3b437)

    • docs(openspec): design and tasks for 19-performance-hardening

    • docs(openspec): external PostgreSQL support in 19-performance-hardening

    • perf(ui): scan a table's rows for column widths once per page of data

    Sizing a table's columns read every row of the page for its longest values on each change of columns. The longest values are now kept per page of data and per column, so a change of density or of shown columns no longer costs more as the list grows.

    • feat(ui): find in large tables

    The browser's find cannot see the rows a large table has not drawn. Ctrl+F (Cmd+F on a Mac) in a table now opens its own find, which searches every row, says how many matches there are, and moves between them with Enter and Shift+Enter, scrolling to and marking the row. Escape closes it and returns focus to the matched row.

    • perf(ui): list a user's sessions in the table

    An account's sessions are not limited and were drawn as a plain list, so a very long list drew every row. They are now a table that draws only the rows in view.

    • perf(db): bound database connections in count and time

    The connection pool now has 16 connections per replica (ARTEMIS_STUDIO_DB_POOL_SIZE) and a request that waits more than 5 s for one fails instead of queueing. Every connection starts with a 30 s statement timeout, a 5 s lock timeout and a 60 s idle-in-transaction timeout, and the driver sets a 5 s connect timeout, a 15 min socket timeout and TCP keep-alive, so a stuck query or a partitioned network no longer holds a thread without end. The limits are set per connection, not on the server, so they hold on any PostgreSQL and through a session-mode pooler. Plugin pools take the same limits. The plugin connection budget counts Studio's 16 connections instead of 10.

    The unused spring.task.scheduling setting is removed.

    • perf(db): raise the statement timeout for long work inside its own transaction

    The audit export, the lifecycle preview and the partition maintenance of the metric and message index tables run with a statement timeout of up to ten minutes (SET LOCAL), in a transaction of their own, so the 30 s limit on every other connection stays. The message index purge now detaches and drops a partition in one transaction.

    • perf(db)!: ship one PostgreSQL configuration for the bundled database

    The production, HA and development compose files mount deploy/postgres/postgresql.conf read-only instead of each carrying its own list of server flags. It adds statement statistics (pg_stat_statements with compute_query_id, created on first start), lock-wait logging, an explicit io_method=worker, autovacuum logging, max_connections=150 and a five-minute idle-in-transaction backstop to the earlier tuning. deploy/postgres/postgresql.tuning.conf is removed.

Changed ​

  • Performance hardening — UUIDv7 keys, partitioned history, bounded jobs, connections and streams, external PostgreSQL, load test (#236) (73e3b437)

    • docs(openspec): design and tasks for 19-performance-hardening

    • docs(openspec): external PostgreSQL support in 19-performance-hardening

    • perf(ui): scan a table's rows for column widths once per page of data

    Sizing a table's columns read every row of the page for its longest values on each change of columns. The longest values are now kept per page of data and per column, so a change of density or of shown columns no longer costs more as the list grows.

    • feat(ui): find in large tables

    The browser's find cannot see the rows a large table has not drawn. Ctrl+F (Cmd+F on a Mac) in a table now opens its own find, which searches every row, says how many matches there are, and moves between them with Enter and Shift+Enter, scrolling to and marking the row. Escape closes it and returns focus to the matched row.

    • perf(ui): list a user's sessions in the table

    An account's sessions are not limited and were drawn as a plain list, so a very long list drew every row. They are now a table that draws only the rows in view.

    • perf(db): bound database connections in count and time

    The connection pool now has 16 connections per replica (ARTEMIS_STUDIO_DB_POOL_SIZE) and a request that waits more than 5 s for one fails instead of queueing. Every connection starts with a 30 s statement timeout, a 5 s lock timeout and a 60 s idle-in-transaction timeout, and the driver sets a 5 s connect timeout, a 15 min socket timeout and TCP keep-alive, so a stuck query or a partitioned network no longer holds a thread without end. The limits are set per connection, not on the server, so they hold on any PostgreSQL and through a session-mode pooler. Plugin pools take the same limits. The plugin connection budget counts Studio's 16 connections instead of 10.

    The unused spring.task.scheduling setting is removed.

    • perf(db): raise the statement timeout for long work inside its own transaction

    The audit export, the lifecycle preview and the partition maintenance of the metric and message index tables run with a statement timeout of up to ten minutes (SET LOCAL), in a transaction of their own, so the 30 s limit on every other connection stays. The message index purge now detaches and drops a partition in one transaction.

    • perf(db)!: ship one PostgreSQL configuration for the bundled database

    The production, HA and development compose files mount deploy/postgres/postgresql.conf read-only instead of each carrying its own list of server flags. It adds statement statistics (pg_stat_statements with compute_query_id, created on first start), lock-wait logging, an explicit io_method=worker, autovacuum logging, max_connections=150 and a five-minute idle-in-transaction backstop to the earlier tuning. deploy/postgres/postgresql.tuning.conf is removed.

Apache-2.0. Apache ActiveMQ and Apache ActiveMQ Artemis are trademarks of the Apache Software Foundation. Rahdar is an independent project, not produced by, endorsed by, or affiliated with the ASF.