[Dbix-class] transaction isolation levels
Peter Rabbitson
rabbit+dbic at rabbit.us
Mon May 6 14:52:10 GMT 2013
On Mon, May 06, 2013 at 03:28:30PM +0100, Stanley Pilton wrote:
>
> To provide the SQL illustration more generically, I should have used
> "SET TRANSACTION ISOLATION LEVEL ...". This is the form from the SQL
> standard, and is supported by Oracle, Microsoft SQL Server, and
> Postgres.
Hehe, except it isn't ;) In MSSQL the isolation level is a *session*
setting, not a transaction setting. That is if you would need to reset
it to the default after each successful commit or somesuch, if you are
after consistency. I can't find the exact Oracle docu on the subject,
and my testrig is down, but I believe it also maintains one setting per
session, not per txn. In other words Pg is still a special snowflake in
this regard ;)
>
> > [..] and/or supporting it for only one
> > kind of txn control (txn_do) isn't a valid approach.
>
> I didn't intend to imply this, either. I deliberately avoided getting
> into detailed API design discussion at that point. I noted that
> txn_do was likely a point of relevance, but the phrase "it being
> controllable via txn_do or related methods" was intended to leave open
> the details of how such a feature might be added to the existing API.
> I certainly did not intend to imply, with that phrase, that adding
> this feature to the API would affect txn_do and txn_do only. The
> intention was actually the opposite: to leave it open. But my
> expectation would be that existing methods of relevance would be
> looked at, and possibly extended in a backwards compatible and
> coherent way. And that there would also be the possibility of
> introducing new methods. I don't know the existing API well enough to
> say much more than that at this stage.
Which is why I outlined an exhaustive-ish list of what I can think of
knowing the API ;) It wasn't intended as an attack, it was intended as a
reference point.
> > For one it is a
> > "worse-is-better" cop-out, and more importantly - it will make long term
> > generic extensions to the system rather hard if not impossible.
>
> I hope I have persuaded you that this conclusion is based on a misunderstanding.
Fair enough ;)
>
> > To substantiate the above here is the big picture, of which each element
> > needs to be taken in consideration. If you think tackling this can of
> > wors is a task you can embark upon - it would be awesome!
> >
> > - For starters a mechanism will need to be created within DBIC to pass
> > options from both txn_do and txn_scope_guard to txh_begin (which is the
> > single point where a txn is in fact started). This alone could then be
> > sufficient for what you are doing, provided it is clearly documented as
> > "not cross-engine".
>
> Thanks, pointers like this will be really useful. I have had a brief
> look at the implementation for transaction-related stuff, and my main
> conclusion so far is that there's a lot of indirection ;).
>
> > If one wants to go further the following needs to be considered:
> >
> > - Very few engines support per-transaction isolation level specification,
> > emulation with transparent reconnect may be achievable for the ones that
> > do not.
>
> As noted, Oracle, Microsoft SQL Server, and Postgres do,
See above
> .. which is a
> fairly major overall share. For ones without this feature, another
> possible technique occurs to me that doesn't involve additional
> connections. The session-scoped isolation level could be set just
> before the transaction is executed, and set back again just after.
Which is what you would have to do for MSSQL anyway, no matter which way
you chose. I retract the bit about "need extra connections" as I didn't
think stuff clearly through the first time around.
>
> > - Only 3 transaction isolation levels are somewhat standard
> >
> > - The default transaction isolation level is not the same across engines,
> > meaning that introspection of "current txn type" needs to be implemented
> > per storage subclass
>
> Noted.
>
In conclusion - I didn't mean to dismiss your idea, nor overpaint it in
extra complexity (which sadly is there, whether we like it or not). The
response was worded the way it was as a response to the original premise
"OMGWTFBBQ DBIC DOES NOT SUPPORT ISOLATION LEVEL SETTING?!?!"
I am still very much looking for something useful to come out of this thread.
Cheers!
More information about the DBIx-Class
mailing list