ISOLATION level difference between Client connections and Database

  • All,

    I have a database set on Snapshot Isolation Level.

    SELECT * FROM sys.databases

    -- Result:

    -- snapshot_isolation_state = 1

    -- snapshot_isolation_state_desc = ON

    -- is_read_committed_snapshot_on = 1

    But connections from SSMS(Management Studio), default to "Read Committed". I know we can change the setting after establishing connection using

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT

    But, my question is: Is there a way to set this for all the connections coming into this Server? Is there an instance level setting that could be configured? We have connections coming in from different applications.

    Thanks,

    _UB

    SqlTimes

  • _UB (1/19/2012)


    All,

    I have a database set on Snapshot Isolation Level.

    No, you've got a database where snapshot isolation is allowed, and read_committed snapshot is on by default for any connections that ask for read committed

    Gail Shaw
    Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
    SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability

    We walk in the dark places no others will enter
    We stand on the bridge and no one may pass
  • Thanks for the quick response.

    So, if I understand your comment, these are true:

    1: This is an explicit setting that comes from each client connection and Sql Server only obliges that request and assigns the requested ISOLATION level.

    2: There is no way to set it GLOBALLY for the entire server and force every connection to convert into SNAPSHOT isolation level.

    I can understand this for connections from SSMS, but what about the ones from Webserver and App Server? How are they configured? I did not see any value setting in "Connection String" [But I am not an expert]

    Thanks,

    _UB

    SqlTimes

    Edit: Format

  • _UB (1/19/2012)


    1: This is an explicit setting that comes from each client connection and Sql Server only obliges that request and assigns the requested ISOLATION level.

    No. A client connection can accept the default (which is either READ_COMMITTED or READ_COMMITTED_SNAPSHOT depending on database settings), or it can request another isolation level explicitly (SET TRANSACTION ISOLATION LEVEL <required isolation level>)

    2: There is no way to set it GLOBALLY for the entire server and force every connection to convert into SNAPSHOT isolation level.

    Correct.

    I can understand this for connections from SSMS, but what about the ones from Webserver and App Server? How are they configured? I did not see any value setting in "Connection String" [But I am not an expert]

    Exactly the same. Accept the default or explicitly request another isolation level.

    Gail Shaw
    Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
    SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability

    We walk in the dark places no others will enter
    We stand on the bridge and no one may pass
  • GilaMonster (1/19/2012)


    No. A client connection can accept the default (which is either READ_COMMITTED or READ_COMMITTED_SNAPSHOT depending on database settings), or it can request another isolation level explicitly (SET TRANSACTION ISOLATION LEVEL <required isolation level>)

    Thank you again (a lot).

    I think I am getting closer to completing my circle of understanding [no pun indented with "circle of trust"]

    According to the point highlighted in BOLD above, is this a correct inference:

    A database that has ISOLATION set to snapshot (Read Committed Snapshot) will accept client connections and assign them "Snapshot" isolation as the default setting (if client does not change it using SET TRANSACTION..... command)

    Similarly: A database that has ISOLATION set to Read Committed will accept client connections and assign them "Read Committed" isolation as the default setting (if client does not change it using SET TRANSACTION..... command)

    Could you please point me to some documentation or something similar in BoL that talks more about this?

    If the above statements are true then all our incoming connections must be Snapshot Isolation Level, but they are not.

    Thanks,

    _UB

    Edit: Gail, I am a big admirer of your work on your website. Its not an exaggeration when I say, I print a topic each day from your blog and read it religiously. Appreciate the great work.

  • _UB (1/19/2012)


    A database that has ISOLATION set to snapshot (Read Committed Snapshot) will accept client connections and assign them "Snapshot" isolation as the default setting (if client does not change it using SET TRANSACTION..... command)

    No. A database that has READ_COMMITTED_SNAPSHOT set will accept connections and assign them READ_COMMITTED_SNAPSHOT as a default isolation level. Not Snapshot isolation level.

    Could you please point me to some documentation or something similar in BoL that talks more about this?

    Books Online, Read_Committed_Snapshot and Snapshot isolation levels (they are NOT the same). Lots of info in Books Online.

    Gail Shaw
    Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
    SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability

    We walk in the dark places no others will enter
    We stand on the bridge and no one may pass
  • Thanks Gail, I think I have a better understanding now.

    To summarize:

    Transaction Isolation Level is different from Database Isolation Level setting.

    When a database is at "Read Committed" Isolation Level:

    Point: Connections will come in and accept the default settings (TRANSACTIONAL ISOLATION) of "Read Committed". If they want something else, they can change it.

    When a database is at "Read Committed Snapshot" Isolation Level:

    Point: Connections will come in and accept the default settings (TRANSACTIONAL ISOLATION) of "Read Committed". But because the database ISOLATION is at "Read Committed with Snapshot" the connection will automatically have (TRANSACTION ISOLATION) "Read Committed with Snapshot" capabilities.

    Even though when you do "DBCC useroptions;" you only see as "Read Committed", it is implied as "Read Committed with Snapshot".

    Thanks a bunch Gail. I had to read and re-read your comments to get it right. I am not sure if you say my "edit" in the earlier post, so I am going to add it here. Gail, I am a big admirer of your work on your website. Its not an exaggeration when I say, I print a topic each day from your blog and read it religiously. Appreciate the great work.

  • Close...

    _UB (1/19/2012)


    Transaction Isolation Level is different from Database Isolation Level setting.

    There is no such thing as a database isolation level.

    There are two database settings.

    1) Allow snapshot isolation level. All that does is allow connections to request snapshot isolation (SET TRANSACTION ISOLATION LEVEL SNAPSHOT)

    2) Read Committed snapshot. This changes the behaviour of the read committed isolation level from the default of using locks for isolation to using row versions for isolation

    No idea about useroptions.

    Thanks for the compliments

    Gail Shaw
    Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
    SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability

    We walk in the dark places no others will enter
    We stand on the bridge and no one may pass

Viewing 8 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic. Login to reply