Does STATISTICS IO output include Version Store reads?TempDB Version Store cleanupPhantom Transactions using Version Store in tempDBQuery plan reads vs statistics io readsCan I Improve Performance on Bloated System Tables?Clustered Index Scan when using greater than in WHERE clauseHelpful nonclustered index improved the query but raised logical readsA Query in the Query Store shows high Logical ReadsQuestions about the output of “statistics IO”IO Statistics for Index Seeklogical reads on global temp table, but not on session-level temp table

How can dragons propel their breath attacks to a long distance

Does gravity affect the time evolution of a QM wave function?

What to do if SUS scores contradict qualitative feedback?

Solubility in different pressure conditions

Why does the headset man not get on the tractor?

Do I need to say 'o`clock'?

When a land becomes a creature, is it untapped?

Smallest Guaranteed hash collision cycle length

Is there anything special about -1 (0xFFFFFFFF) regarding ADC?

Jumping frame contents with beamer and pgfplots

what does a native speaker say when he wanted to leave his work?

Conditional probability - sum of dice is even given that at least one is a five

On what legal basis did the UK remove the 'European Union' from its passport?

How do employ ' ("prime") in math mode at the correct depth?

What is the best way for a skeleton to impersonate human without using magic?

On studying Computer Science vs. Software Engineering to become a proficient coder

Extracting sublists that contain similar elements

Non-deterministic Finite Automata | Sipser Example 1.16

How to distinguish PICTURE OF ME and PICTURE OF MINE in Chinese?

How do I tell my supervisor that he is choosing poor replacements for me while I am on maternity leave?

What makes "quality" analog AV cables better than cheap cables?

return tuple of uncopyable objects

Tikzpicture in figure problem

Why was Thor doubtful about his worthiness to Mjolnir?



Does STATISTICS IO output include Version Store reads?


TempDB Version Store cleanupPhantom Transactions using Version Store in tempDBQuery plan reads vs statistics io readsCan I Improve Performance on Bloated System Tables?Clustered Index Scan when using greater than in WHERE clauseHelpful nonclustered index improved the query but raised logical readsA Query in the Query Store shows high Logical ReadsQuestions about the output of “statistics IO”IO Statistics for Index Seeklogical reads on global temp table, but not on session-level temp table






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








9















SQL Server has an option SET STATISTICS IO ON that shows the number of logical and physical page reads for a query. Do these stats include reads of the version store for SNAPSHOT and RCSI queries?










share|improve this question






























    9















    SQL Server has an option SET STATISTICS IO ON that shows the number of logical and physical page reads for a query. Do these stats include reads of the version store for SNAPSHOT and RCSI queries?










    share|improve this question


























      9












      9








      9








      SQL Server has an option SET STATISTICS IO ON that shows the number of logical and physical page reads for a query. Do these stats include reads of the version store for SNAPSHOT and RCSI queries?










      share|improve this question
















      SQL Server has an option SET STATISTICS IO ON that shows the number of logical and physical page reads for a query. Do these stats include reads of the version store for SNAPSHOT and RCSI queries?







      sql-server tempdb-version-store






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited May 9 at 12:07









      Paul White

      54.8k14290462




      54.8k14290462










      asked May 9 at 2:50









      ForrestForrest

      2,8001824




      2,8001824




















          1 Answer
          1






          active

          oldest

          votes


















          10














          STATISTICS IO does not include Version Store reads, at least for the version store in tempdb.



          Here's a demo for proof:



          --setup script
          USE master
          GO

          CREATE DATABASE TestDB
          GO

          ALTER DATABASE TestDB
          SET ALLOW_SNAPSHOT_ISOLATION ON
          GO

          USE TestDB
          GO

          DROP TABLE IF EXISTS dbo.Test
          GO

          CREATE TABLE dbo.Test (ID int identity PRIMARY KEY, junk int)

          INSERT dbo.Test
          SELECT TOP (100000) 1
          FROM master.dbo.spt_values a
          CROSS JOIN master.dbo.spt_values b


          Start a 30s update loop in one SSMS tab



          --UPDATE loop
          SET NOCOUNT ON
          DECLARE @stop datetime = DATEADD(SECOND, 30, GETDATE())

          WHILE GETDATE() < @stop
          BEGIN
          BEGIN TRAN

          UPDATE dbo.Test
          SET junk += 1

          COMMIT
          END

          UPDATE dbo.Test
          SET junk = 1


          And while the loop is going, run two identical queries in SNAPSHOT with STATISTICS IO ON, separated by 15s to allow versions to accumulate.



          USE TestDB
          SET STATISTICS IO ON
          GO

          SET TRANSACTION ISOLATION LEVEL SNAPSHOT

          BEGIN TRAN

          SELECT MAX(junk)
          FROM dbo.Test

          WAITFOR DELAY '00:00:15'

          SELECT MAX(junk)
          FROM dbo.Test

          COMMIT


          The IO stats show identical reads:
          Stats IO



          But the actual execution plan shows the scan for the second query taking far more time, due to reading the version store.
          Actual plans



          To prove to yourself that this query resulted in tempdb reads, you can use this Extended Events session (which is obviously better than Profiler), filtered to the session where the read queries are running:



          CREATE EVENT SESSION [file_reads] ON SERVER 
          ADD EVENT sqlserver.file_read_completed(
          ACTION(sqlserver.session_id,sqlserver.sql_text)
          WHERE ([sqlserver].[session_id]=(52)))
          ADD TARGET package0.event_file(SET filename=N'file_reads')
          GO


          Viewing the "live data" for that XE session during the demo, you can see reads against database id 2 (tempdb), and it captures the query text of our read query as well:



          screenshot of XE session showing tempdb reads



          Special thanks to Paul White for bringing up this issue with STATISTICS IO.






          share|improve this answer

























            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "182"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f237704%2fdoes-statistics-io-output-include-version-store-reads%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            10














            STATISTICS IO does not include Version Store reads, at least for the version store in tempdb.



            Here's a demo for proof:



            --setup script
            USE master
            GO

            CREATE DATABASE TestDB
            GO

            ALTER DATABASE TestDB
            SET ALLOW_SNAPSHOT_ISOLATION ON
            GO

            USE TestDB
            GO

            DROP TABLE IF EXISTS dbo.Test
            GO

            CREATE TABLE dbo.Test (ID int identity PRIMARY KEY, junk int)

            INSERT dbo.Test
            SELECT TOP (100000) 1
            FROM master.dbo.spt_values a
            CROSS JOIN master.dbo.spt_values b


            Start a 30s update loop in one SSMS tab



            --UPDATE loop
            SET NOCOUNT ON
            DECLARE @stop datetime = DATEADD(SECOND, 30, GETDATE())

            WHILE GETDATE() < @stop
            BEGIN
            BEGIN TRAN

            UPDATE dbo.Test
            SET junk += 1

            COMMIT
            END

            UPDATE dbo.Test
            SET junk = 1


            And while the loop is going, run two identical queries in SNAPSHOT with STATISTICS IO ON, separated by 15s to allow versions to accumulate.



            USE TestDB
            SET STATISTICS IO ON
            GO

            SET TRANSACTION ISOLATION LEVEL SNAPSHOT

            BEGIN TRAN

            SELECT MAX(junk)
            FROM dbo.Test

            WAITFOR DELAY '00:00:15'

            SELECT MAX(junk)
            FROM dbo.Test

            COMMIT


            The IO stats show identical reads:
            Stats IO



            But the actual execution plan shows the scan for the second query taking far more time, due to reading the version store.
            Actual plans



            To prove to yourself that this query resulted in tempdb reads, you can use this Extended Events session (which is obviously better than Profiler), filtered to the session where the read queries are running:



            CREATE EVENT SESSION [file_reads] ON SERVER 
            ADD EVENT sqlserver.file_read_completed(
            ACTION(sqlserver.session_id,sqlserver.sql_text)
            WHERE ([sqlserver].[session_id]=(52)))
            ADD TARGET package0.event_file(SET filename=N'file_reads')
            GO


            Viewing the "live data" for that XE session during the demo, you can see reads against database id 2 (tempdb), and it captures the query text of our read query as well:



            screenshot of XE session showing tempdb reads



            Special thanks to Paul White for bringing up this issue with STATISTICS IO.






            share|improve this answer





























              10














              STATISTICS IO does not include Version Store reads, at least for the version store in tempdb.



              Here's a demo for proof:



              --setup script
              USE master
              GO

              CREATE DATABASE TestDB
              GO

              ALTER DATABASE TestDB
              SET ALLOW_SNAPSHOT_ISOLATION ON
              GO

              USE TestDB
              GO

              DROP TABLE IF EXISTS dbo.Test
              GO

              CREATE TABLE dbo.Test (ID int identity PRIMARY KEY, junk int)

              INSERT dbo.Test
              SELECT TOP (100000) 1
              FROM master.dbo.spt_values a
              CROSS JOIN master.dbo.spt_values b


              Start a 30s update loop in one SSMS tab



              --UPDATE loop
              SET NOCOUNT ON
              DECLARE @stop datetime = DATEADD(SECOND, 30, GETDATE())

              WHILE GETDATE() < @stop
              BEGIN
              BEGIN TRAN

              UPDATE dbo.Test
              SET junk += 1

              COMMIT
              END

              UPDATE dbo.Test
              SET junk = 1


              And while the loop is going, run two identical queries in SNAPSHOT with STATISTICS IO ON, separated by 15s to allow versions to accumulate.



              USE TestDB
              SET STATISTICS IO ON
              GO

              SET TRANSACTION ISOLATION LEVEL SNAPSHOT

              BEGIN TRAN

              SELECT MAX(junk)
              FROM dbo.Test

              WAITFOR DELAY '00:00:15'

              SELECT MAX(junk)
              FROM dbo.Test

              COMMIT


              The IO stats show identical reads:
              Stats IO



              But the actual execution plan shows the scan for the second query taking far more time, due to reading the version store.
              Actual plans



              To prove to yourself that this query resulted in tempdb reads, you can use this Extended Events session (which is obviously better than Profiler), filtered to the session where the read queries are running:



              CREATE EVENT SESSION [file_reads] ON SERVER 
              ADD EVENT sqlserver.file_read_completed(
              ACTION(sqlserver.session_id,sqlserver.sql_text)
              WHERE ([sqlserver].[session_id]=(52)))
              ADD TARGET package0.event_file(SET filename=N'file_reads')
              GO


              Viewing the "live data" for that XE session during the demo, you can see reads against database id 2 (tempdb), and it captures the query text of our read query as well:



              screenshot of XE session showing tempdb reads



              Special thanks to Paul White for bringing up this issue with STATISTICS IO.






              share|improve this answer



























                10












                10








                10







                STATISTICS IO does not include Version Store reads, at least for the version store in tempdb.



                Here's a demo for proof:



                --setup script
                USE master
                GO

                CREATE DATABASE TestDB
                GO

                ALTER DATABASE TestDB
                SET ALLOW_SNAPSHOT_ISOLATION ON
                GO

                USE TestDB
                GO

                DROP TABLE IF EXISTS dbo.Test
                GO

                CREATE TABLE dbo.Test (ID int identity PRIMARY KEY, junk int)

                INSERT dbo.Test
                SELECT TOP (100000) 1
                FROM master.dbo.spt_values a
                CROSS JOIN master.dbo.spt_values b


                Start a 30s update loop in one SSMS tab



                --UPDATE loop
                SET NOCOUNT ON
                DECLARE @stop datetime = DATEADD(SECOND, 30, GETDATE())

                WHILE GETDATE() < @stop
                BEGIN
                BEGIN TRAN

                UPDATE dbo.Test
                SET junk += 1

                COMMIT
                END

                UPDATE dbo.Test
                SET junk = 1


                And while the loop is going, run two identical queries in SNAPSHOT with STATISTICS IO ON, separated by 15s to allow versions to accumulate.



                USE TestDB
                SET STATISTICS IO ON
                GO

                SET TRANSACTION ISOLATION LEVEL SNAPSHOT

                BEGIN TRAN

                SELECT MAX(junk)
                FROM dbo.Test

                WAITFOR DELAY '00:00:15'

                SELECT MAX(junk)
                FROM dbo.Test

                COMMIT


                The IO stats show identical reads:
                Stats IO



                But the actual execution plan shows the scan for the second query taking far more time, due to reading the version store.
                Actual plans



                To prove to yourself that this query resulted in tempdb reads, you can use this Extended Events session (which is obviously better than Profiler), filtered to the session where the read queries are running:



                CREATE EVENT SESSION [file_reads] ON SERVER 
                ADD EVENT sqlserver.file_read_completed(
                ACTION(sqlserver.session_id,sqlserver.sql_text)
                WHERE ([sqlserver].[session_id]=(52)))
                ADD TARGET package0.event_file(SET filename=N'file_reads')
                GO


                Viewing the "live data" for that XE session during the demo, you can see reads against database id 2 (tempdb), and it captures the query text of our read query as well:



                screenshot of XE session showing tempdb reads



                Special thanks to Paul White for bringing up this issue with STATISTICS IO.






                share|improve this answer















                STATISTICS IO does not include Version Store reads, at least for the version store in tempdb.



                Here's a demo for proof:



                --setup script
                USE master
                GO

                CREATE DATABASE TestDB
                GO

                ALTER DATABASE TestDB
                SET ALLOW_SNAPSHOT_ISOLATION ON
                GO

                USE TestDB
                GO

                DROP TABLE IF EXISTS dbo.Test
                GO

                CREATE TABLE dbo.Test (ID int identity PRIMARY KEY, junk int)

                INSERT dbo.Test
                SELECT TOP (100000) 1
                FROM master.dbo.spt_values a
                CROSS JOIN master.dbo.spt_values b


                Start a 30s update loop in one SSMS tab



                --UPDATE loop
                SET NOCOUNT ON
                DECLARE @stop datetime = DATEADD(SECOND, 30, GETDATE())

                WHILE GETDATE() < @stop
                BEGIN
                BEGIN TRAN

                UPDATE dbo.Test
                SET junk += 1

                COMMIT
                END

                UPDATE dbo.Test
                SET junk = 1


                And while the loop is going, run two identical queries in SNAPSHOT with STATISTICS IO ON, separated by 15s to allow versions to accumulate.



                USE TestDB
                SET STATISTICS IO ON
                GO

                SET TRANSACTION ISOLATION LEVEL SNAPSHOT

                BEGIN TRAN

                SELECT MAX(junk)
                FROM dbo.Test

                WAITFOR DELAY '00:00:15'

                SELECT MAX(junk)
                FROM dbo.Test

                COMMIT


                The IO stats show identical reads:
                Stats IO



                But the actual execution plan shows the scan for the second query taking far more time, due to reading the version store.
                Actual plans



                To prove to yourself that this query resulted in tempdb reads, you can use this Extended Events session (which is obviously better than Profiler), filtered to the session where the read queries are running:



                CREATE EVENT SESSION [file_reads] ON SERVER 
                ADD EVENT sqlserver.file_read_completed(
                ACTION(sqlserver.session_id,sqlserver.sql_text)
                WHERE ([sqlserver].[session_id]=(52)))
                ADD TARGET package0.event_file(SET filename=N'file_reads')
                GO


                Viewing the "live data" for that XE session during the demo, you can see reads against database id 2 (tempdb), and it captures the query text of our read query as well:



                screenshot of XE session showing tempdb reads



                Special thanks to Paul White for bringing up this issue with STATISTICS IO.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited May 9 at 13:58









                Josh Darnell

                8,93332345




                8,93332345










                answered May 9 at 2:50









                ForrestForrest

                2,8001824




                2,8001824



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Database Administrators Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f237704%2fdoes-statistics-io-output-include-version-store-reads%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Category:9 (number) SubcategoriesMedia in category "9 (number)"Navigation menuUpload mediaGND ID: 4485639-8Library of Congress authority ID: sh85091979ReasonatorScholiaStatistics

                    Circuit construction for execution of conditional statements using least significant bitHow are two different registers being used as “control”?How exactly is the stated composite state of the two registers being produced using the $R_zz$ controlled rotations?Efficiently performing controlled rotations in HHLWould this quantum algorithm implementation work?How to prepare a superposed states of odd integers from $1$ to $sqrtN$?Why is this implementation of the order finding algorithm not working?Circuit construction for Hamiltonian simulationHow can I invert the least significant bit of a certain term of a superposed state?Implementing an oracleImplementing a controlled sum operation

                    Magento 2 “No Payment Methods” in Admin New OrderHow to integrate Paypal Express Checkout with the Magento APIMagento 1.5 - Sales > Order > edit order and shipping methods disappearAuto Invoice Check/Money Order Payment methodAdd more simple payment methods?Shipping methods not showingWhat should I do to change payment methods if changing the configuration has no effects?1.9 - No Payment Methods showing upMy Payment Methods not Showing for downloadable/virtual product when checkout?Magento2 API to access internal payment methodHow to call an existing payment methods in the registration form?