• 1) Sorry, but I cannot ignore having session state stored in SQL Server. :w00t:

    2) You have a varchar(100) as your clustered index. Does it look like a GUID by any chance? If not, does it have new values throughout the range of characters? If so, you are likely getting page splits all over the place during inserts. You are also carrying that fat field as the pointer on the NC index too, bloating it

    3) You are very likely NOT getting in-place updates on your first update. Both fields are NULLABLE and as such when you give them a value for that update they become LARGER. Page split potential again. And for that you are moving about 4K of data to a new page.

    4) All of the above is exacerbated by having a defaulted fill factor. Bad news there.

    5) Have you done any analysis to determine if the second update actually increases field sizes much if at all? Review log file records to see what is really getting written there. ApexSQL has some nice capabilities for that, and there is the semi-documented fn_dblog command you can use as well.

    6) I would analyze page splits and fragmentation and adjust fill factor(s) as needed.

    7) Consider removing all NULLs and using appropriate DEFAULTs if you can.

    Above all else I would move my session storage to an appropriate system. 😀

    Best,
    Kevin G. Boles
    SQL Server Consultant
    SQL MVP 2007-2012
    TheSQLGuru on googles mail service