Hallo. We got an error "Failed Virtual Allocate Bytes: FAIL_VIRTUAL_RESERVE"
Microsoft SQL Server 2005 - 9.00.5000.00 (Intel X86)
Dec 10 2010 10:56:29
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
We had 24CPU intell cores and 64 gb RAM on server.
Sql service starts with enabled AWE + LPM and "-g512" option.
Please don't ask me why we still use such relic configuration it is not my fault. :)
Well so... i'm investigate log and find that memorystatus "Optimization Queue" section has really huge values.
Optimization Queue
Overall Memory = 1321132032
Target Memory = 1158799360
Last Notification = GROW
Timeout = 6
Early Termination Factor = 5
Small Gateway
Configured Units = 32
Available Units = 26
Acquires = 6
Waiters = 0
Threshold Factor = 250000
Threshold = 250000
Medium Gateway
Configured Units = 8
Available Units = 7
Acquires = 1
Waiters = 0
Threshold Factor = 12
Threshold = 16094435
Big Gateway
Configured Units = 1
Available Units = 1
Acquires = 0
Waiters = 0
Threshold Factor = 8
Threshold = 144849920
Average values of this section (from dbcc) for workday period is:
Optimization Queue Value
------------------------------ --------------------
Overall Memory 803340288
Target Memory 480714752
Last Notification 1
Timeout 6
Early Termination Factor 5
(5 row(s) affected)
Small Gateway Value
------------------------------ --------------------
Configured Units 32
Available Units 31
Acquires 1
Waiters 0
Threshold Factor 250000
Threshold 250000
(6 row(s) affected)
Medium Gateway Value
------------------------------ --------------------
Configured Units 8
Available Units 8
Acquires 0
Waiters 0
Threshold Factor 12
Threshold 40059562
(6 row(s) affected)
Big Gateway Value
------------------------------ --------------------
Configured Units 1
Available Units 1
Acquires 0
Waiters 0
Threshold Factor 8
Also about minute before "Failed Virtual Allocate Bytes" message our SQL lock monitor registered couple of "RESOURCE_SEMAPHORE_QUERY_COMPILE" waits. But MEMORYCLERK_SQLOPTIMIZER report "MultiPage Allocator = 104 KB"
only and that is confuse me.
Ultimately, the main consumers of MTL was SQL OS and bPOOL.
MEMORYCLERK_SOSNODE (Total)
VM Reserved = 0 KB
VM Committed = 0 KB
AWE Allocated = 0 KB
SM Reserved = 0 KB
SM Committed = 0 KB
SinglePage Allocator = 18720 KB
MultiPage Allocator = 11120 KB
MEMORYCLERK_SQLBUFFERPOOL (Total)
VM Reserved = 2158872 KB
VM Committed = 549144 KB
AWE Allocated = 55508992 KB
SM Reserved = 0 KB
SM Committed = 0 KB
SinglePage Allocator = 0 KB
MultiPage Allocator = 13816 KB
Workday period values (multi_pages_kb + shared_memory_committed_kb + virtual_memory_committed_kb) for this clerc is
type avg min max
----------------------------- -------------------- -------------------- --------------------
MEMORYCLERK_SOSNODE 4602 2800 7032
MEMORYCLERK_SQLBUFFERPOOL 187235 0 305472
It is clear but i'm still have a questions. What forced bPOOL to allocate pages in MTL? How to determine that queries? Same about SQL OS.
Or maybe all my conclusions is wrong?
As workaround i increase -g startup option to "-g2048", and "max server memory" was decreased to 54Gb.
Full report included below.