There are two main areas of memory within SQL Server's address space, the
pool (BPool) and a second memory pool sometimes called the "MemToLeave"
The contents of the SQL Server buffer pool include cached table data,
memory used during query execution for in-memory sorts or hashes, most
stored procedure and query plans, memory for locks and other internal
structures, and the majority of other miscellaneous memory needs of the SQL
Server. SQL Server 7.0 introduced dynamic memory management to the buffer
which means that the amount of memory under SQL Server's direct control may
and shrink in response to internal SQL Server needs and external memory
from other applications. It is normal for the size of the SQL Server buffer
to increase over time until most memory on the server is consumed. This
can give the false appearance of a memory leak in the SQL Server buffer pool
when operating under normal circumstances. For more detailed information
reference the Books Online articles "Server Memory Options", "Memory
Architecture", and (SQL Server 2000 only) "Effects of min and max server
The other significant memory area is sometimes called MemToLeave, and it is
primarily used by non-SQL Server code that happens to be executing within
SQL Server process. The MemToLeave area is memory that is left unallocated
unreserved, primarily for code that is not part of the core SQL Server and
therefore does not know how to access memory in the SQL Server buffer pool.
examples of components that may use this memory include extended stored
procedures, OLE Automation/COM objects, linked server OLEDB providers and
drivers, MAPI components used by SQLMail, and thread stacks (one-half MB per
thread). This does not just include the .EXE and .DLL binary images for
components; any memory allocated at runtime by the components listed above
also be allocated from the MemToLeave area. Non-SQL Server code makes its
allocation requests directly from the OS, not from the SQL Server buffer
The entire SQL Server buffer pool is reserved at server startup, so any
for memory made directly from the operating system must be satisfied from
MemToLeave area, which is the only source of unreserved memory in the SQL
address space. SQL Server itself also uses the MemToLeave memory area for
certain allocations; for example, SQL Server 7.0 stores procedure plans in
MemToLeave area if they are too large for a single 8KB buffer pool page.
The server configurations such mas "max memory", "min memory" and "working
set" can only affect the size of buffer pool. They can't control the size
I hope these could answer your question.
This posting is provided 'AS IS' with no warranties, and confers no rights.