SQLUSA

Microsoft SQL Server 2000

Articles

 

How to Pin a Table into Memory?
By Kalman Toth, M.Phil., M.Phil., MCDBA

February 28, 2005

While SQL Server 2000 has a sophisticated memory buffer management, it may lead to performance gain if we help out SQL server with something we know: keep TableX in memory all the time. The result will be that TableX pages will not be flushed out, whatever comes in, will stay in memory. If the table is used frequently, the result is improved performance.

This is the code sample:

use pubs
DECLARE @db_id int, @tbl_id int
SET @db_id = DB_ID('pubs')
SET @tbl_id = OBJECT_ID('pubs..authors')
DBCC PINTABLE (@db_id, @tbl_id)

This is the message:
Warning: Pinning tables should be carefully considered. If a pinned table is larger, or grows larger, than the available data cache, the server may need to be restarted and the table unpinned.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

We can check if a table is pinned or not by:

SELECT OBJECTPROPERTY(OBJECT_ID('pubs..authors'),'TableIsPinned')

Which returns 1 if pinned and 0 if not.


To see how many buffers are pinned execute:

DBCC memorystatus

The "inram" entry indicates the pinned tables buffer usage.


What happens if the table in memory grows too large? That is a real danger with pinning. Eventually over-pinning stops the server altogether. The overload sequence start with various strange server messages in the server log, all related to memory utilization.

This is the code sample to unpin a table:

use pubs
DECLARE @db_id int, @tbl_id int
SET @db_id = DB_ID('pubs')
SET @tbl_id = OBJECT_ID('pubs..authors')
DBCC UNPINTABLE (@db_id, @tbl_id)

For practical purposes, no more than half of the SQL server available memory should be used for pinning. Very frequently used tables should be pinned. Perfomance gain should be monitored. If no gain, pinning should be discontinued.


 

Best in the World in SQL Server Training
 
SQLUSA.com Home Page