MicroStrategy ONE

Memory

If the machine hosting Intelligence Server has too little memory, it may run slowly, or even shut down during memory-intensive operations. You can use the Windows Performance Monitor to monitor the available memory, and you can govern Intelligence Server's memory use with the Memory Contract Manager.

Memory Limitations: Virtual Memory

The memory used by Intelligence Server is limited by the machine's virtual memory.

Virtual memory is the amount of physical memory (RAM) plus the Disk Page file (swap file). It is shared by all processes running on the machine, including the operating system.

When a machine runs out of virtual memory, processes on the machine are no longer able to process instructions and eventually the operating system may shut down. More virtual memory can be obtained by making sure that as few programs or services as possible are executing on the machine, or by increasing the amount of physical memory or the size of the page file.

Increasing the amount of virtual memory, and therefore the available private bytes, by increasing the page file size may have adverse effects on Intelligence Server performance because of increased swapping.

Private bytes are the bytes of virtual memory that are allocated to a process. Private bytes are so named because they cannot be shared with other processes: when a process such as Intelligence Server needs memory, it allocates an amount of virtual memory for its own use. The private bytes used by a process can be measured with the Private Bytes counter in the Windows Performance Monitor.

The governing settings built into Intelligence Server control its demand for private bytes by limiting the number and scale of operations which it may perform simultaneously. In most production environments, depletion of virtual memory through private bytes is not an issue with Intelligence Server.

How Much Memory does Intelligence Server Use When it Starts Up?

The amount of memory consumed during startup is affected by a number of factors such as metadata size, the number of projects, schema size, number of processing units, number of database connection threads required, and whether Intelligence Server is in a clustered configuration. Because these factors are generally static, the amount of memory consumed at startup is fairly constant. This lets you accurately estimate how much memory is available to users at runtime.

When Intelligence Server starts up, it uses memory in the following ways:

  • It initializes all internal components and loads the static DLLs necessary for operation. This consumes 25 MB of private bytes and 110 MB of virtual bytes. You cannot control this memory usage.
  • It loads all server definition settings and all configuration objects. This consumes an additional 10 MB of private bytes and an additional 40 MB of virtual bytes. This brings the total memory consumption at this point to 35 MB of private bytes and 150 MB of virtual bytes. You cannot control this memory usage.
  • It loads the project schema (needed by the SQL engine component) into memory. The number and size of projects greatly impacts the amount of memory used. This consumes an amount of private bytes equal to three times the schema size and an amount of virtual bytes equal to four times the schema size. For example, with a schema size of 5 MB, the private bytes consumption would increase by 15 MB (3 * 5 MB). The virtual bytes consumption would increase by 20 MB (4 * 5 MB). You can control this memory usage by limiting the number of projects that load at startup time.
  • It creates the database connection threads. This primarily affects virtual bytes consumption, with an increase of 1 MB per thread regardless of whether that thread is actually connected to the database. You cannot control this memory usage.

To Calculate the Amount of Memory that Intelligence Server Uses When it Starts

If you are not performing this procedure in a production environment, make sure that you set all the configuration options as they exist in your production environment. Otherwise, the measurements will not reflect the actual production memory consumption.

  1. Start Intelligence Server.
  2. Once Intelligence Server has started, use Windows Performance Monitor to create and start a performance log that measures Private and Virtual bytes of the MSTRSVR process.
  3. While logging with Performance Monitor, stop Intelligence Server. Performance Monitor continues to log information for the Intelligence Server process. You can confirm this by logging the counter information to the current activity window as well as the performance log.
  4. Start Intelligence Server again. The amount of memory consumed should be easily measured.

How does Intelligence Server Use Memory After it is Running?

Intelligence Server increases its memory use as needed during its operation. The following factors determine when memory use increases:

  • Additional configuration objects: caching of user, connection map, and schedule and subscription information created or used after Intelligence Server has been started.
  • Caches: result (report and document) caches, object caches, and element caches created after Intelligence Server has been started. The maximum amount of memory that Intelligence Server uses for result caches is configured at the project level. For more information about caches, see Improving Response Time: Caching.
  • Intelligent Cubes: any Intelligent Cubes that have been loaded after Intelligence Server has been started. The maximum amount of memory used for Intelligent Cubes is configured at the project level. For details, see Managing Intelligent Cubes.
  • User session-related resources: History List and Working set memory, which are greatly influenced by governing settings, report size, and report design. For details, see Managing User Sessions and Saving Report Results: History List.
  • Request and results processing: memory needed by Intelligence Server components to process requests and report results. This is primarily influenced by report size and report design with respect to analytical complexity. For details, see Governing Requests and Results Processing.
  • Clustering: memory used by Intelligence Server to communicate with other cluster nodes and maintain synchronized report cache and History List information. For more information about clustering, see Cluster Multiple MicroStrategy Servers.
  • Scheduling: memory used by scheduler while executing reports for users when they are not logged in to the system. For more information about scheduling, see Scheduling Jobs and Administrative Tasks.