You are on page 1of 38

Memory Management in

SQL Server Analysis Services

Steve Wright
Director of Product Support
SQL Sentry, Inc.
About the Presenter
Steve Wright Director of Product
Support for SQL Sentry Inc.
Headquartered in Huntersville, NC
SQL Sentry provides tools to monitor
your entire Microsoft BI Platform
WWW.SQLSENTRY.NET
About this presentation
We will discuss methods used to
manage memory in SQL Server
Analysis Services
Expected behavior when applying
these methods.
How to monitor that behavior
Examples of Issues when these
methods are mis-applied.
SSAS Memory Categories
Shrinkable
Easily reduced and returned to the OS
SE and FE caches
Nonshrinkable
Used for more essential system-related
activites
Memory Allocators
Metadata Objects
Not easily reduced.
Measuring SSAS Memory

MSOLAP$SQL:Memory Cleaner
Memory KB
MSOLAP$SQL:Memory >Cleaner
Memory (non)shrinkable KB
SSAS Memory Limits
Used to determine how to allocate
and manage internal memory
Configurable with SSAS properties
with SSMS or edit msmdsrv.ini
Memory\LowMemoryLimit
Memory\TotalMemoryLimit
Refers to physical memory on the
server
Memory\LowMemoryLimit
Default Value 65 in SSAS2008, 75 in
SSAS2005
Percentage if between 0 and 100.
Bytes if greater than 100.
Refers to total physical memory on
machine
Memory\TotalMemoryLimit
Default Value 80
Percentage if between 0 and 100.
Bytes if greater than 100.
Total amount of memory the SSAS
process(msmdsrv.exe) can consume.
Total Memory Limit cont.
If set to 0, SSAS will use no memory
for caching
Total available to SSAS depends on
platform
32-bit limited to 3GB with /Gb switch
enabled
64-bit provides all memory available
Behavior Low Limit
Reached
Cleaner threads start moving data
out of memory (non-aggresively)
Perfmon MSOLAP$SQL:Memory >
Cleaner Memory Shrunk KB/sec
Behavior Total Limit
Reached
Cleaner goes into crisis mode
More aggressive cleanup
More threads spawned
Dramatic performance impact
Behavior Between Low and
Total
Economic memory management
Memory Price per KB
Depends on amount available based on
limits
Memory is free and the livin is easy
under the Low Limit!
Memory price begins to increase as total
memory increases between Low and
Total.
SSAS Memory Management
Self governing no consideration for
low physical memory conditions
Windows File Cache
Unlike SQL Server, SSAS DBs are
collection of files on files system and use
file system cache
SSAS data may be loaded in RAM as file
cache
Not part of SSAS process memory or limits
Monitoring - Perfmon
Memory Usage KB
Memory Limit Low(High) KB
Cleaner Memory KB
Cleaner Memory (Non)Shrinkable KB
Cleaner Memory Shrunk KB

Do NOT rely on Task Manager


Monitoring Example
The Big Picture
Graphical Anomaly -
Background
SQL Sentry Customer Financial
Services
Beta tester of SQL Sentry Performance
Advisor for Analysis Services
Eager to test as they were suffering
from SSAS performance issues
Scheduled Microsoft to come on-site to
help
Common Issues Graphical
Anomaly?
Graphical Anomaly The
Investigation
Memory Limit Configured Value Perf Counter Value
Setting (KB)
Memory\LowMemoryLimi 2097152 8192
t
Memory\TotalMemoryLim 13531488 13312
it
Graphical Anomaly The
Investigation
Graphical Anomaly A
Comparison

Before After
The Investigation Continues
The Investigation Continues
The Investigation Continues
Almost all time spent on non-cached
Storage Engine operations (SE non-
cached)
Every time query needs data its not
found in the FE Cache
FE requests from SE
SE unable to find in its cache
Must go to file system
Caught Red Handed!
Caught Red Handed!
Total Queries shows how many times
storage engine went to the file system
to read data from a partition or
aggregation.
Want this to be as close to 0 as
possible.
Exceptions are when Agg is first hit
and loaded into cache or cache is cold.
Confirmation
Could have been worse!
Scenario #2

Preallocation
Memory Preallocation
Introduced with SQL 2005 SP2 due to
limitations with memory allocations
in Windows Server 2003
Edit in msmdsrv.ini
<PreAllocate> </PreAllocate>
Preallocates % of physical memory
on SSAS startup
SQL CAT Tech Notes
Running Microsoft SQL Server 2008 Analysis Services on Windows
Server 2008 vs. Windows Server 2003 and Memory Preallocation:
Lessons Learned

http://sqlcat.com/technicalnotes/archive/2008/07/16/running-
microsoft-sql-server-2008-analysis-services-on-windows-server-
2008-vs-windows-server-2003-and-memory-preallocation-lessons-
learned.aspx

Author: Carl Rabeler


Contributors: Eric Jacobsen, Thomas Kejser
Technical Reviewers: Brad Daniels, Lindsey Allen, John Desch,
Wayne Robertson, Kevin Cox
SQL CAT Report Summary
SSAS 2008 runs equally well on
Windows 2008 with or without
preallocation
SSAS 2008 runs substantially better
on Windows 2003 WITH preallocation
Essentially equal to Windows 2008
Points to Consider
Be sure to set low enough so sufficient
memory remains for other processes
and avoid paging.
Be sure to set high enough for it to help
SSAS
Use peak value for memory counters as
guideline
Also applies to SSAS 2005 (no change
in code)
PreAllocate Pitfall?
<PreAllocate> 80 </PreAllocate>
<TotalMemoryLimit> 80
</TotalMemoryLimit>
<LowMemoryLimit> 65
</LowMemoryLimit>
PreAllocate Pitfall?
PreAllocate does not override
memory limits
Memory cleaner acts as if all
preallocated memory is in use.
In this case PreAllocate =
TotalMemoryLimit
Result cleaner goes into crisis mode
Performance suffers drastically
Resources
http://sqlcat.com/tags/Analysis+Services/default.
aspx

Books Online

http://cwebbbi.spaces.live.com/default.aspx

WWW.SQLSENTRY.NET
Thank you!
Monitoring
Perfmon counters

Another option!

You might also like