Avoid UPDATE of RDB$DATABASE by ALTER DATABASE statement when possible
----------------------------------------------------------------------
Key: CORE-5704
URL: http://tracker.firebirdsql.org/browse/CORE-5704
Project: Firebird Core
Issue Type: Improvement
Components: Engine
Reporter: Vlad Khorsun
Some clauses of ALTER DATABASE statement requires to update row in RDB$DATABASE:
SET DEFAULT CHARACTER SET, SET LINGER, DROP LINGER.
Other clauses doesn't requires to update RDB$DATABASE:
BEGIN|END BACKUP, ENCRYPT, DECRYPT, etc
Internally, engine runs such UPDATE despite the kind of clause specified by the
user.
It is necessary to prevent concurrent run of ALTER DATABASE statements by
parallel transactions.
Unfortunately, such dummy update blocks other transactions which reads
RDB$DATABASE in READ COMMITTED NO RECORD VERSION mode.
Usually such blockage is very short, but in case of ALTER DATABASE END BACKUP
it could be up to tens of minutes.
For example: user complains that isql can not connect with isql to the database
while ALTER DATABASE END BACKUP is running.
Actually, isql connects successfully, but it reads RDB$DATABASE itself right
after attachment (using READ COMMITTED NO RECORD
VERSION WAIT transaction) and waits until ALTER DATABASE END BACKUP commits.
The improvement is to avoid dummy update of RDB$DATABASE when possible and use
implicit lock to prevent concurrent run
of ALTER DATABASE statement.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel