Hello,
In a rather large database, I face this problem:
Several tables are regularly updated through rather long-running DELETE
+INSERTs. Using uncommitted read as isolation level seems unsafe, as I'd
like consistent data (that's one of the main points of using a DBMS in
the first place, in my opinion).
Almost all other significant databases have gotten MultiVersion
Concurrency Control (MVCC)[1] by now, either by default, or optionally
(like in MSSQL2005: the DBA needs to activate it explicitly[2]).
The very nice and obvious advantage with MVCC is that readers don't block
writers, and vice versa: If I'm working read-only with a table, I simply
work with the latest committed data for that table at the time when my
query started. A concurrently running transaction with write activity
will continue working, but the reader doesn't see its actions unless
he starts a new query after the writing transaction has finished.
The obvious disadvantage -- more temporary data for the DBMS to keep
track of -- is a price which I'd gladly pay.
I've read a number of articles on how to mitigate DB2's locking problem,
but they either seem to suggest actions which don't really improve the
situation significantly, or they suggest actions which I find unsafe/ugly
(committing more often; but I _want_ consistency!).
What's keeping IBM?
Notes:
1) many different synonyms seem to exist for MVCC, such as
"row versioning", "snapshot isolation", ...
2) for reasons that I find strange -- turning it off should be the
optional setting if they were to ask me
--
Regards,
Troels Arvin <troels@arvin.d k>
In a rather large database, I face this problem:
Several tables are regularly updated through rather long-running DELETE
+INSERTs. Using uncommitted read as isolation level seems unsafe, as I'd
like consistent data (that's one of the main points of using a DBMS in
the first place, in my opinion).
Almost all other significant databases have gotten MultiVersion
Concurrency Control (MVCC)[1] by now, either by default, or optionally
(like in MSSQL2005: the DBA needs to activate it explicitly[2]).
The very nice and obvious advantage with MVCC is that readers don't block
writers, and vice versa: If I'm working read-only with a table, I simply
work with the latest committed data for that table at the time when my
query started. A concurrently running transaction with write activity
will continue working, but the reader doesn't see its actions unless
he starts a new query after the writing transaction has finished.
The obvious disadvantage -- more temporary data for the DBMS to keep
track of -- is a price which I'd gladly pay.
I've read a number of articles on how to mitigate DB2's locking problem,
but they either seem to suggest actions which don't really improve the
situation significantly, or they suggest actions which I find unsafe/ugly
(committing more often; but I _want_ consistency!).
What's keeping IBM?
Notes:
1) many different synonyms seem to exist for MVCC, such as
"row versioning", "snapshot isolation", ...
2) for reasons that I find strange -- turning it off should be the
optional setting if they were to ask me
--
Regards,
Troels Arvin <troels@arvin.d k>
Comment