Caching SQL Server Tables After Restart

SQL Server Cached Pages and ways to bring data pages to memory
We noticed considerable latency in stored procedure execution after restarting SQL Server Instance which was triggered by accessing data from disk instead of memory. So we ended up writing a simple script to bring data pages to memory. This helped us to avoid first touch penalty after restart in production environment.

Populate SQL Server Cache


Populate SQL Server Cache

Populate Temporary Table with Base Table Data to avoid Physical Reads. This helps to avoid DISK Physical reads after Server or Instance Restart. 

/******************************************************************************************************
** Project: Operations
** Auth: Raju Venkataraman
** Date: 2016-07-28 Created
** Description: Populate Temporary Table with Base Table Data to avoid Physical Reads
**************************
** Change History
**************************
** CR Date Author Description
** ----- ----------– ----------- ------------------------------------------------------------
** 1  2016-07-28 Raju Venkataraman Gather Details on Databases Level Buffer
********************************************************************************************************/

-----------BEGIN SQL SCRIPT HEADER-------------------
DECLARE @DB_NAME VARCHAR(128);
SET @DB_NAME = ( SELECT DB_NAME(dbid)
                 FROM   master..sysprocesses
                 WHERE  spid = @@SPID
               );
PRINT '-----------------------------------------------------------------------';
PRINT '-----START RAPID DEVELOPEMENT SQL SCRIPT--------';
PRINT '-----SCRIPT RAN ON DB: ' + @DB_NAME;
PRINT '-----SCRIPT START TIME: '
    + CONVERT(VARCHAR, CONVERT(DATETIME, GETDATE()), 121);
PRINT '-----MachineName : ' + CAST(SERVERPROPERTY('MachineName') AS VARCHAR);
PRINT '-----SQL Instance : ' + CAST(@@SERVERNAME AS VARCHAR);
PRINT '-----DB User : ' + CURRENT_USER;
PRINT '-----System User : ' + SYSTEM_USER;
PRINT '-----Host : ' + HOST_NAME();
PRINT '-----Application : ' + APP_NAME();
PRINT '-----TranCount : ' + CAST (@@trancount AS VARCHAR);
PRINT '-----------------------------------------------------------------------';
----------------END SQL SCRIPT HEADER---------------------

-- Script Specific Variables Declarations

DECLARE @StartTime DATETIME2 ,
    @EndTime DATETIME2;
SELECT  @StartTime = GETDATE();

-- Script Block Start


DECLARE @pTableName sysname , @pSchemaName sysname , @pdSQL NVARCHAR(4000)
DECLARE TName CURSOR FOR
SELECT TABLE_SCHEMA , TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE 1=1 -- TABLE_SCHEMA ='dbo'
-- AND TABLE_NAME IN ('SampleTable',)
AND TABLE_TYPE ='BASE TABLE'

OPEN TName
FETCH NEXT FROM TName INTO  @pSchemaName ,@pTableName

WHILE @@FETCH_STATUS = 0
BEGIN
  SELECT @pdSQL = 'SELECT * INTO #'+@pTableName + ' FROM ' + @pSchemaName+'.'+ @pTableName
  PRINT @pdSQL
  EXEC(@pdSQL)

  FETCH NEXT FROM TName INTO  @pSchemaName ,@pTableName

END

CLOSE TName
DEALLOCATE TName

-- Script Block End

SELECT  @EndTime = GETDATE();

-----------BEGIN SQL SCRIPT FOOTER--------------------------------------
PRINT '----------------------------------------------------------------';
PRINT '---FINISHED SQL SCRIPT--';
PRINT '---COMPLETED TIME:' + CONVERT(VARCHAR, CONVERT(DATETIME, GETDATE()), 121);
PRINT '---TranCount : ' + CAST (@@trancount AS VARCHAR);
PRINT 'Execution Time : ' + CONVERT(VARCHAR(255), ( DATEDIFF(MILLISECOND,
                                                             @StartTime,
                                                             @EndTime) ))
    + ' MilliSeconds';
PRINT '----------------------------------------------------------------';

-----------END SQL SCRIPT FOOTER-----------------------------------------

Database Level Cached Pages

Table Level Cached Pages

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *