24.4 Tuning Reports Server Configuration

This section provides tips for improving the performance and stability of Reports Server, which is responsible for:

  • Accepting the report request from various clients.

  • Scheduling the jobs to run.

  • Managing Oracle Reports engines

  • Managing the cache

  • Managing various destinations

  • Security check

  • Managing the jobstore (persistent job data)

While operating under heavy load, it is essential to tune various Reports Server parameters to optimal values, as follows:

  1. Determine optimal values for the initEngine, maxEngine, and minEngine attributes of the engine element in the server configuration file:

    <engine id="rwEng" class="oracle.reports.engine.EngineImpl" initEngine="1" maxEngine="2" minEngine="1" engLife="50"
    maxIdle="30" callbackTimeOut="90000">
    

    For more information on the engine element, refer to Section 8.2.1.9, "engine". The maxEngine value sets the maximum number of processes ready to respond to user requests for running reports. Setting it too low means user requests get queued up and available machine capacity is not fully utilized. Setting it too high means Reports Server will take more than its share of machine capacity from other activities the host also needs to perform, and could cause the operating system to crash.

    As an example of a simple calculation for number of engines, suppose you have set of reports that takes an average of 10 seconds to run. Input requests to your system varies from 6 reports per minute to 12 reports per minute. In this scenario, the calculations are as follows:

    • initEngine = ( average time to run report) * (minimum report requests input rate) = (10/60) * 6 = 1

    • maxEngine = (average time to run report) * (maximum report requests input rate) = (10/60) * 12 = 2

    • minEngine = Depending on the kind of load, anything between 0 to initEngine

    With these calculations, minEngine=1 and maxEngine=2 can be specified in the server configuration file. This ensures that whenever a job arrives, it gets an idle engine immediately.

    In scalability and performance tests, maximum throughput is seen when maxEngine is configured using the guideline of 2-4 engines multiplied by the number of CPUs. You can set up a maximum value of maxEngine=8 if the machine has a dual processor or maxEngine=16 if the machine has a quad processor.

    If you are not using the URL engine, comment the engine element with ID="rwURLEng" in the server configuration file.

  2. Determine optimal values for the cache element's cacheSize property, the queue element's maxQueueSize attribute, and the EXPIRATION keyword.

    For more information, refer to Section 8.2.1.3, "cache", Section 8.2.1.21, "queue", and Section A.6.6, "EXPIRATION". The values of cacheSize, maxQueueSize, and EXPIRATION are related to each other and they must be set carefully for efficient Reports Server operation.

    For example, when you run reports with EXPIRATION=480, this implies that you want to keep the jobs in cache for 4 hours (480 minutes). Given that, maxQueueSize should be set to accommodate all the jobs for 4 hours. Thus, at a rate of 10 jobs per minute:

    maxQueueSize = (report requests input rate) * (expiration period) = 480 * 10 =4800.

    The value of cacheSize also should be set sufficiently high to accommodate 4800 jobs. Suppose the average size of each report is 100K:

    cacheSize = (maxQueueSize) * (average size of report) = 4800*100/1000 = 480MB

    You can use similar logic to calculate the value of the cache element's maxCacheFileNumber property.

    Note:

    The minimum recommended value for maxQueueSize is 1000 (the default). A significantly lower value than the default values for maxQueueSize or cacheSize may degrade Reports Server performance.

  3. Set the engineResponseTimeOut attribute of the engine element in the server configuration file:

    <engine id="rwEng" class="oracle.reports.engine.EngineImpl" initEngine="1"
    maxEngine="2" minEngine="1" engLife="50" maxIdle="30"
    callbackTimeOut="90000" engineResponseTimeOut="5">
    

    For more information on the engine element, refer to Section 8.2.1.9, "engine".

    Set engineResponseTimeOut if you are experiencing intermittent engine hangs. This attribute enables Reports Server to detect the hanging engine and perform cleanup. The sooner Reports Server detects the hang, the better the stability of the system. Thus, engineResponseTimeOut must be set carefully, as follows:

    The value of engineResponseTimeOut should be set to the maximum time a report takes in the set of reports you have. For example, if you have set of reports that takes 10 seconds to 5 minutes to run, you can set engineResponseTimeOut="5" (5 minutes).

    Note:

    It is always better to run batch reports on a separate server with different engineResponseTimeOut values. Do not submit interactive and batch reports to same server.

  4. Set the maxConnect attribute of the connection element in the server configuration file;

    <connection maxConnect="180" idleTimeOut="15">
    

    For more information on the connection element, refer to Section 8.2.1.5, "connection".

    The maxConnect attribute controls how many total requests Reports Server can simultaneously handle at any moment in time. The key purpose of maxConnect is to keep Reports Server from being overcome by some runaway program or process or by a denial of service attack. It should be always set to a value that is greater than the maximum simultaneous clients.

    For example, if your system is expected to handle 150 simultaneous clients, you can set maxConnect to any value above 150. You can use a safety factor of 10% to 20%, as follows:

    maxConnect = 150 + 150 * 0.2 = 180

  5. Set the HTTP timeout value (applicable to AS only).

    The HTTP timeout value should be set based on the time required to run the longest report in the system. If longest-running report takes 20 minutes to run, HTTP timeout should be more than 20 minutes. Otherwise, an HTTP timeout error will display when the report is still running in the server. This parameter can be set in the ORACLE_INSTANCE/config/OHS/ohs1/httpd.conf file.

    Alternatively, you can set the timeout value in Oracle Enterprise Manager.