There may not be enough virtual memory when you have a large number of databases in SQL Server (316749)
The information in this article applies to:
- Microsoft SQL Server 7.0
- Microsoft SQL Server 2000 (all editions)
- Microsoft SQL Server 2005 Developer Edition
- Microsoft SQL Server 2005 Enterprise Edition
- Microsoft SQL Server 2005 Standard Edition
This article was previously published under Q316749 SYMPTOMS There may not be enough available virtual address space in
the Microsoft SQL Server process if all of the following conditions are true when you are
running SQL Server with the default configuration values:
- The server has 2 GB or more of RAM.
- There are a large number of databases on the system (for
example, more than 500).
- Most of the databases are updated (for example, the
databases do not have a "read only" status).
- There are enough concurrently active user connections to
use most of the 255 SQL Server worker threads.
SQL Server may generate the following error messages after the
whole 2-GB virtual address space is used up (or after the whole 3-GB virtual
address space is used up on SQL Server Enterprise Edition with the /3GB switch in the Boot.ini file). Message 1Error: 17802, Severity: 18, State: 3
Could not create server event thread.
Message 2
SQL Server could not spawn process_loginread thread. Message 3
WARNING: Clearing procedure cache to free contiguous memory.
Buffer Distribution: Stolen=3454 Free=2540 Procedures=138
Inram=0 Dirty=1108 Kept=35
I/O=0, Latched=0, Other=214821
Buffer Counts: Committed=222096 Target=222096 Hashed=215964
InternalReservation=547 ExternalReservation=0 Min Free=512
Procedure Cache: TotalProcs=8 TotalPages=138 InUsePages=138
Dynamic Memory Manager: Stolen=3556
OS=497 General=1706
Query Plan=755 Optimizer=0
Utilities=9 Connection=1583
Global Memory Objects: Resource=1119 Locks=163 XDES=1 SQLCache=90 Replication=5 LockBytes=2 ServerGlobal=20
Query Memory Manager: Grants=0 Waiting=0 Maximum=164370 Available=164370 CAUSE For each updated database, SQL Server allocates at least
one 64-KB block for use in formatting log records before they are written to
disk. This allocation occurs when the first log record is generated for the
database, such as during an INSERT, UPDATE, or DELETE statement. Depending on
the activity and the size of the generated log records, subsequent
modifications might trigger
the allocation
of additional
64-KB allocations. SQL Server 7.0 will allocate no
more than three 54-KB blocks.
In SQL Server 2000, the upper number of allocations for each database
is a function of the number of processors that SQL Server is configured to use.
WORKAROUND Use the -g startup parameter to leave additional, unreserved virtual memory
available for these database allocations. The -g parameter is documented in the Readme.txt of the SQL Server 7.0
service pack, and in SQL Server 2000 Books Online. The "More Information"
section in this article includes the settings that Microsoft recommends you use
to determine the appropriate value for this setting.
Modification Type: | Major | Last Reviewed: | 9/19/2006 |
---|
Keywords: | kberrmsg kbtshoot kbnofix kbprb KB316749 kbAudDeveloper kbAudITPRO |
---|
|