Firebird 5.0 introduces many improvements without any changes in architecture or operation, the most important are:
Parallel (multi-threaded) operation for backup/restore, sweep and index creation;
Partial indices;
SKIP LOCKED
clause for SELECT WITH LOCK
, UPDATE
and DELETE
statements;
Inline minor ODS upgrade;
Compiled statement cache;
PSQL and SQL profiler;
Support for WHEN NOT MATCHED BY SOURCE
for MERGE
statement;
Support multiple rows for DML RETURNING
;
New built-in functions and packages;
Denser record-level compression;
Network support for scrollable cursors;
The following list summarises the features and changes, with links to the chapters and topics where more detailed information can be found.
--with-fb
#7918by Adriano dos Santos Fernandes
#7910by Dmitry Yemanov
For more details, see [rnfb50-config-outer-join-conversion].
#7854by Adriano dos Santos Fernandes, Vlad Khorsun
#7819by Vlad Khorsun
RDB$GET_CONTEXT('SYSTEM', '*')
with other info from MON$ATTACHMENTS
#7818by Vlad Khorsun
#7814by Vlad Khorsun
SKIP LOCKED
implementation#7810by Vlad Khorsun
For more details, see [rnfb50-dml-skip-locked].
#7755by Vlad Khorsun
PLG$PROF_RECORD_SOURCES
table to 255 characters#7752by Adriano dos Santos Fernandes
#7720by Adriano dos Santos Fernandes
IN <list>
predicates#7707by Dmitry Yemanov
For more details, see [rnfb50-dml-in].
#7692by Vlad Khorsun
Allow tracing database events even if the trace/audit is configured using a symbolic link instead of a real database file path.
#7688by Adriano dos Santos Fernandes
LEVEL
column to PLG$PROF_RECORD_SOURCES
and PLG$PROF_RECORD_SOURCE_STATS_VIEW
#7687by Adriano dos Santos Fernandes
Column LEVEL
is added to the profiler record source tables/views.It returns the actual indentation level that allows proper reconstruction of multi-line access path nodes.
FbVarChar::set
function for non null-terminated string#7685by Adriano dos Santos Fernandes
#7682by Vlad Khorsun
This allows utilities started via the Service Manager to use the server-side ParallelWorkers setting without a need to specify the number of workers explicitly.
#7680by Vlad Khorsun
#7652by Adriano dos Santos Fernandes
Make the profiler data aggregated at the statement level by default (with REQUEST_ID = 0
), thus making the flushing faster.A detailed (non-aggregated) data may be requested explicitly by specifying the 'DETAILED_REQUESTS' value in the PLUGIN_OPTIONS
parameter of the RDB$PROFILER.START_SESSION
function.
DECFLOAT ROUND/TRAPS
settings#7642by Alexander Peshkov
New context variables DECFLOAT_ROUND
and DECFLOAT_TRAPS
are added to the SYSTEM
namespace of the RDB$GET_CONTEXT
function.They return the current settings of the corresponding session options.
-a
#7637by Vlad Khorsun
Command-line switch -a
is no longer required on Windows to start the Firebird server as an application.
#7634by Vlad Khorsun
Some modern CPUs may contain two sets of cores - Efficient (E) and Performance (P).By default Firebird runs on all available cores and that may cause performance degradation in CPU-bound tasks.Now, E-cores are excluded from the default affinity mask.If the AffinityMask configuration setting is used explicitly, please pay attention which types of cores are specified to be enabled.
#7576by Mark Rotteveel
#7559by Dmitry Yemanov
-parallel
in combination with gfix -icu
#7550by Vlad Khorsun
gfix -icu
rebuilds indexes and thus can benefit from parallelization.Now it’s allowed to use the -icu
and -parallel
switches together, to override the ParallelWorkers setting used by default.
#7542by Vlad Khorsun
RDB$GET/SET_CONTEXT()
— enclosing in apostrophes or double quotes of a missed namespace/variable will make output more readable#7539by Vlad Khorsun
#7536by Vlad Khorsun
New column MON$PARALLEL_WORKERS INTEGER
was added into MON$ATTACHMENTS
table.
New variable PARALLEL_WORKERS
is now available in the SYSTEM
context of the RDB$GET_CONTEXT
function.
New tag fb_info_parallel_workers (value 149) is available in IAttachment::getInfo()
and isc_database_info()
API calls.
SHOW GRANTS
command#7506by Artyom Ivanov
#7494by Vlad Khorsun
Index scan algorithm has been improved to avoid unnecessary record reads for partial lookups in compound indices.
SHOW SYSTEM
command: provide list of functions belonging to system packages#7475by Alexander Peshkov
#7469by Adriano dos Santos Fernandes
#7466by Dmitry Yemanov
Allows to trace parse/compile events for the stored modules, corresponding elapsed time and also plans for queries inside those PSQL modules.
SHOW DATABASE
command#7425by Dmitry Yemanov
#7405by Dmitry Yemanov
For more details, see [rnfb50-config-optimize-mode], [rnfb50-dml-select-optimize], and [rnfb50-msql-optimize-set].
#7213by Vlad Khorsun
This improvement allows to synchronize Firebird processes across different Windows sessions.
COMMENT ON MAPPING … IS …
)#7046by Alexander Peshkov
For more details, see [rnfb50-ddl-comment-mapping].
#7001by Dmitry Yemanov
QUARTER
to EXTRACT
, FIRST_DAY
and LAST_DAY
functions#5959by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-quarter].
#1783, #3374, #7447by Vlad Khorsun
Such operations as logical backup/restore, sweeping and CREATE INDEX
statement execution can be executed in parallel by multiple threads, thus decreasing the total operation time.
See chapters [rnfb50-engine-parallel], [rnfb50-utils-gbak-parallel] and [rnfb50-utils-gfix-parallel] for more details.
#7257by Dmitry Yemanov
The CREATE INDEX
DDL statement has been extended to support partial indices, i.e. an index may now declare a condition that defines the subset of records to be indexed.
SKIP LOCKED
clause#7350by Adriano dos Santos Fernandes
New clause SKIP LOCKED
was introduced for statements SELECT WITH LOCK
, UPDATE
and DELETE
.It allows to skip the already locked records while reading the table.
#7397by Dmitry Yemanov
An ability to upgrade the database to the latest minor ODS version has been introduced, it does not require a backup/restore cycle.
#7144by Adriano dos Santos Fernandes
A per-attachment cache of compiled SQL statements has been implemented.
#7086by Adriano dos Santos Fernandes
A built-in ability to profile SQL and PSQL statements has been added, making it possible to measure execution time at different levels.
WHEN NOT MATCHED BY SOURCE
in the MERGE
statement#6681by Adriano dos Santos Fernandes
The MERGE
statement has been extended to support the WHEN NOT MATCHED BY SOURCE
clause.
UNICODE_CHAR
and UNICODE_VAL
#6798by Adriano dos Santos Fernandes
New built-in functions UNICODE_CHAR
and UNICODE_VAL
have been added to allow conversion between Unicode code point and character.
RDB$BLOB_UTIL
new system package#281by Adriano dos Santos Fernandes
New system package RDB$BLOB_UTIL
has been added to allow various operations with BLOBs in the PSQL modules.
RETURNING
clause#6815by Adriano dos Santos Fernandes
The RETURNING
clause, if used in DSQL queries, now allows multiple rows to be returned.
#4723by Dmitry Yemanov
The built-in compression algorithm has been improved to allow denser compression of records.
#7441by Dmitry Yemanov
Execution plan now contains more information about cursors.
Other improvements are briefly listed below, please follow the tracker references for more information.
#7411by Alexander Peshkov
System procedures and packages are now shown by SHOW SYSTEM
.
#7399by Adriano dos Santos Fernandes
#7382by Adriano dos Santos Fernandes
#7331by Dmitry Yemanov
#7293by Adriano dos Santos Fernandes
#7284by Adriano dos Santos Fernandes
#7169by Adriano dos Santos Fernandes
#7165by Alexander Peshkov
For more details, see [rnfb50-security-trace-ctx].
ResultSet.getInfo()
new API method#7083by Dmitry Yemanov
#7051by Dmitry Yemanov
MON$COMPILED_STATEMENTS
and also column MON$COMPILED_STATEMENT_ID
to both MON$STATEMENTS
and MON$CALL_STACK
tables#7050by Adriano dos Santos Fernandes
SMALLINT
/ INT
/ BIGINT
/ INT128
) when argument is minimum value for this type#7025by Alexander Peshkov
#6992by Dmitry Yemanov
Statement.getInfo()
and ISQL's SET EXEC_PATH_DISPLAY BLR
#6910by Adriano dos Santos Fernandes
For isql, see [rnfb50-utils-exec-path-blr].
SIMILAR TO
should use index when pattern starts with non-wildcard character (as LIKE
does)#6873by Adriano dos Santos Fernandes
MON$SESSION_TIMEZONE
to the table MON$ATTACHMENTS
#6794by Adriano dos Santos Fernandes
#6740by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-parens-query].
#6713by Adriano dos Santos Fernandes
#5589by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-literals-char].
#5588by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-literals-binary].
#4769by Adriano dos Santos Fernandes
For more details, see [rnfb50-psql-subroutine-param-access].
WHERE
clause always evaluates to FALSE
#1708by Dmitry Yemanov