How to analyze system-wide usage with the Log-Usage class
    Instances of the
    Log-Usage
    class support system performance and usage reporting. Instances of this class are stored in the initial PegaRULES database schema in the
    pr_perf_stats
    table.
  
The instances in this class provide a cumulative history of past system usage across all nodes and all requestor types. Analysis of this data can provide valuable insights about the patterns and sources of processing demand, and can be helpful in performance tuning.
- Log-Usage data, which covers system and requestor performance of all types, is different than Log-RuleUsage data, which covers only rules assembly rules. In other words, Log-RuleUsage data covers rules of those rule types that the system converts to Java code.
- Log-Usage reporting provides comprehensive coverage of system activity. Whereas, reports provided by the License Compliance facility focuses on specific metrics and uses a separate data-collection mechanism.
Keys of instances in the Log-Usage class
        The key of each
        Log-Usage
        instance is the
        pzInsKey
        column of the
        pr_perf_stats
        table. This key is concatenated from the values of the
        following four properties:
      
- pxRequestorID — The system-assigned requestor ID for this session
- pxSnapShotTime — Date and time of this snapshot
- pxSnapShotType — Record type
- pxSystemNodeID — Node ID
The first character of the requestor ID identifies a requestor type:
- 
          A — Services (
          APPrequestor types)
- 
          B — Background requestors (
          BATCHrequestor type)
- 
          H — Interactive browser users (
          BROWSERrequestor type)
- 
          P — Portlet users (
          PORTLETrequestor type)
Identifying a snapshot
The pxSnapshotType column identifies an important value needed to interpret the other values in a record. This column has one of six values:
- 
          INTERVAL— Records cumulative usage statistics for a requestor as of the end of an interval (typically a clock hour).
- 
          PASSIVATED— Records passivation of a requestor, such as occurs when a session times out. ThePersistRequestorentry in theprconfig.xmlfile or Dynamic System Setting controls passivation.
- 
          TERMINATED— Records log-out, forced timeout, or other termination of a requestor.
- 
          PALCLEAR— Records that a requestor cleared PAL statistics.
- 
          MERGED_AGENTS— Records details from multiple agent requestors.
Identifying an agent or daemon
        For agents and daemons, the
        pyProcLabel
        property identifies the agent, the
        index of the row on the
        Rule-Agent-Queue
        form, and the activity. The subscript
        is zero-based. For example, the value
        Pega-ProCom:2:Assign-Corr.SendCorr
        in
        a log identifies processing by the
        Assign-Corr.SendCorr
        activity listed the
        second row of the Agent Queue form for the Pega-RULES agent.
      
For daemons such as the master agent, the pyProcLabel column is blank.
A usage daemon commits instances of the Log-Usage class to the database table.
The usage daemon saves an instance of the Log-Usage class when a requestor terminates, passivates, activates, and at regular hourly intervals. To minimize the performance effect of new instances, the daemon's write operations are deferred and then committed as a group.
        By default,
        INTERVAL
        operations record a snapshot at 59 minutes after
        each hour. For example, if an operator signs on at 11:15 AM and signs off at 11:56 AM, no
        INTERVAL
        instances for that requestor are logged.
      
By default, this daemon wakes every 300 seconds, so the contents of the table might be stale or incomplete by as much as five minutes.
In a multinode cluster, the usage daemons on each node operate independently, so the presence of records in the database table with a recent pxSnapShotTime from one node does not imply that no more records with a similar or earlier pxSnapShotTime value will arrive.
        Because agents are requestors, this daemon adds instances to the
        Log-Usage
        class for agents even when the system has no interactive users.
        This behavior is expected.
      
        Some service requestors end a few seconds or less after they start. Typically no
        INTERVAL
        instances appear for such requestors. If a service uses pooled
        requestors,
        INTERVAL
        instances may appear for those requestors in the pool
        once each hour.
      
Reporting
        To facilitate reporting, all properties of the
        Log-Usage
        class are optimized
        as columns of the
        pr_perf_stats
        table. This table does not contain a
        Storage Stream column.
      
The following standard reports are available:
- Click Dev Studio > System > Assembly > Assembly Compilation Summary to run the Assembly Compilation Summary. This option runs the Log-Usage.pzAssemblyCompilationSummary report. This report shows the number and time of assemblies and compilations by node.
- Click Dev Studio > System > Performance > Active Rule Set Lists to run a report about performance data by Ruleset list. Click a Ruleset list hash code to see the Rulesets and versions that are contained in that hash.
- Click Dev Studio > System > Performance > My Performance Details to see interaction end data for your Operator ID for the past week. The list is sorted by requestorID, and you can drill down into interval, passivation, and termination records. You can drill down further to view full details.
- Find and run the Log-Usage.BrowseUsageStatistics.ALL report to see the types of data in this table.
Except for the properties in the following table, the names and meanings of statistical properties in the Log-Usage class is identical to the names and meanings of those in the Code-Pega-PAL class, which supports the Performance tool.
For technical reasons, Log-Usage properties listed in the following table have a shorter name from the corresponding Code-Pega-PAL properties.
| Code-Pega-PAL Property | Log-Usage Property | 
|---|---|
| pxDeclarativeRulesInvokedBackgroundCount | pxDeclRulesInvokedBckGrdCnt | 
| pxDeclarativeRulesInvokedElapsed | pxDeclRulesInvokedElapsed | 
| pxDeclarativeRulesLookupElapsed | pxDeclRulesLookupElapsed | 
| pxListRowWithFilteredStreamCount | pxListRowWithFilteredStrmCnt | 
| pxListRowWithUnfilteredStreamCount | pxListRowWithUnfilteredStrmCnt | 
| pxListWithUnfilteredStreamCount | pxListWithUnfilteredStrmCnt | 
| pxSavedClipboardAfterInteractionCount | pxSavedCbAfterIntCount | 
| pxSavedClipboardAfterInteractionCPU | pxSavedCbAfterIntCPU | 
| pxSavedClipboardAfterInteractionElapsed | pxSavedCbAfterIntElapsed | 
| pxSavedContextAfterInteractionCount | pxSavedCxtAfterIntCount | 
| pxSavedContextAfterInteractionCPU | pxSavedCxtAfterIntCPU | 
| pxSavedContextAfterInteractionElapsed | pxSavedCxtAfterIntElapsed | 
        To improve access, the PegaRULES database indexes are defined for the
        pr_perf_stats
        table. You can access this table using the
        pxUserIdentifier,
        pxSnapshotTime,
        pxRequestorType,
        pxSnapShotType, or
        pxSystemNodeID
        property values.
      
Trimming the pr_perf_stats table
        In a production setting, the
        pr_perf_stats
        table can grow to contain
        millions of rows. By default, the system automatically purges records older than 30 days. If
        you do not need older rows for performance analysis, debugging, or other reporting, you can
        purge them by date (known as trimming) without affecting other system capabilities.
      
Once each day, the Pega-RULES agent starts a stored procedure that purges older rows of this table, passing the value of the pxProcess property as the number of days to retain. To set a retention period longer or shorter than the 30 days, add or revise the following element to your prconfig.xml file and restart the system:
<env name="usage/retentionperiod " value="nnn" />where nnn is the number of days to retain.
Optionally, you can disable this facility through the Dynamic System Settings data instance Pega-RULES.usage/usagetrackingenabled.