Understanding the ARM Records Written for SAS OLAP Server

The initialization and termination records give you summary information for each SAS OLAP Server session. The ARM records for the SAS OLAP Server are written to the SAS logging facility or the ARM log. The following explains the output:
I (initialization) record
is an initialization record, with one record written per SAS OLAP Server invocation when the ARM subsystem is initialized. It starts with an I, followed by:
  • the SAS datetime value of the SAS OLAP Server invocation
  • an application ID
  • a user CPU (start) time
  • a system CPU (start) time
  • an application name (OLAP_SERVER)
Output:
I,1320592800.822000,2,0.380547,0.630907,OLAP_SERVER,
E (end) record
is a termination record, with one record written per SAS OLAP Server termination. It starts with an E, followed by:
  • the SAS datetime value of the SAS OLAP Server termination
  • the application ID from the I record
  • a user CPU (stop) time
  • a system CPU (stop) time
Output:
E,1320592802.805000,2,1.281843,0.791137
Note: The E records are written for the OLAP_SESSION transaction, which records each SAS OLAP Server session that is started by a client connection. The E records provide the user ID of the client user that started the SAS OLAP Server session.
G (GetID) record
is an OLAP_SESSION transaction record, with one record written per SAS OLAP Server invocation. It starts with a G, followed by:
  • the SAS datetime value when the record was written
  • the application ID from the I record
  • a transaction class ID
  • a transaction class name (OLAP_SESSION)
  • a transaction class description (OLAP Session)
  • a description of the values that are provided in subsequent S (start) and P (stop) records
Output:
G,1337615817.801000,2,1,OLAP_SESSION,OLAP Session,User Name,LongStr
Note: User Name is the user ID of the client user that started the SAS OLAP Server session.
S (start) record
is a start record, with one record written for each SAS OLAP Server session. It starts with an S, followed by:
  • the SAS datetime value when the SAS OLAP Server session started
  • the application ID from the I record
  • the transaction class ID from the G record
  • a transaction ID
  • a user CPU (start) time
  • a system CPU (start) time
  • the user ID of the client user
Output:
S,1337615818.502000,2,1,2,2.52952,0.901296,sasabc
P (stop) record
is a stop record, with one record written for each SAS OLAP Server session. It starts with a P, followed by:
  • the SAS datetime value when the SAS OLAP Server session ended
  • the application ID from the I record
  • the transaction class ID from the G record
  • the transaction ID from the associated S record
  • a user CPU (stop) time
  • a system CPU (stop) time
  • the status 0=OK
Output:
P,1337615819.383000,2,1,2,2.113038,0.931339,0
U (update) record
is an update record, with one record written for each hierarchy in each OLAP cube. The U record for the OLAP_SESSION transaction is written only when the DATA_QUERY transaction occurs. It starts with a U, followed by:
  • the SAS datetime value when the record was written
  • the application ID from the I record
  • the transaction class ID from the G record
  • the transaction ID from the S record
  • a user CPU time
  • a system CPU time
  • a buffer type (always 2, which indicates that 1,024 bytes of text follows)
  • a string with the following format:
    • char(32) cube name
    • char(4) hierarchy number—used in the DATA_QUERY update record to identify region and aggregation
    • char(32) hierarchy name
    • char(4) number of hierarchy levels
Output:
U,1355324046.943000,2,1,2,1.625000,2.15625,2,SALES 1CUSTOMER 4 U,1355324046.943000,2,1,2,1.625000,2.15625,2,SALES 2PRODUCT 5U,1355324046.943000,2,1,2,1.625000,2.15625,2,SALES 3TIME 4
The following records are written for MDX_QUERY transactions, which log each query that is sent to the OLAP cube. These records provide the cube name and the size of the result set in cells:
G (GetID) record
is an MDX_QUERY transaction record, with one record written per SAS OLAP Server invocation. It starts with a G, followed by:
  • the SAS datetime value when the record was written
  • the application ID from the I record
  • a transaction class ID
  • a transaction name (MDX_QUERY)
  • a transaction description (MDX Query)
  • a description of the values that are provided in subsequent S or C (start) and P (stop) records
Output:
G,1320594857.747000,3,2,MDX_QUERY,MDX Query,Result Set Size,Gauge32,Cube Name,LongStr
Note: Result Set Size is the size of the result set in cells. Cube Name is the name of the cube that is being queried.
S or C (start) record
is a start record, with one record written for each MDX_QUERY transaction. It starts with an S, followed by:
  • the SAS datetime value when the MDX_QUERY started
  • the application ID from the I record
  • the transaction class ID from the G record
  • a transaction ID
  • a user CPU (start) time
  • a system CPU (start) time
Output:
S,1320594857.787000,3,2,2,1.341929,0.731051
If the OLAP_SESSION level was also requested, then the MDX_QUERY transaction record is correlated to its parent session record, and starts with a C, followed by:
  • the SAS datetime value when the MDX_QUERY started
  • the application ID from the I record
  • the transaction class ID from the G record
  • a transaction ID
  • the parent transaction class ID
  • the parent transaction ID
  • a user CPU (start) time
  • a system CPU (start) time
Output:
C,1320594857.787000,3,2,2,1,2,1.341929,0.731051
P (stop) record
is a stop record, with one record written for each MDX_QUERY transaction. It starts with a P, followed by:
  • the SAS datetime value when the MDX_QUERY ended
  • the application ID from the I record
  • the transaction class ID from the G record
  • the transaction ID from the associated S or C record
  • a user CPU (stop) time
  • a system CPU (stop) time
  • a status (0=OK, 2=query failed)
  • the size of the result set in cells
  • the name of the cube that was queried
Output:
P,1320594858.948000,3,2,2,2.52952,0.781123,0,5,MDDBCARS
The following records are written for DATA_QUERY transactions, which log each region execution (that is, each data retrieval from stored OLAP cube aggregations or from the cache). The following records provide region IDs, aggregate IDs, the number of returned records, the source type, and the thread index. The DATA_QUERY transaction is the primary input for both automatic and manual cube optimization.
G (GetID) record
is a DATA_QUERY transaction ID record, with one record written per SAS OLAP session. It starts with a G, followed by:
  • the SAS datetime value when the record was written
  • the application ID from the I record
  • a transaction class ID
  • the transaction name (DATA_QUERY)
  • the transaction description (Plug-in Call)
  • a description of the values that are provided in subsequent S or C (start) and P (stop) records. The values are:
    • query aggregate
    • source aggregate
    • result set size
    • source type
    • thread index
    • cube name
Output:
G,1359310645.798000,2,4,DATA_QUERY,Plugin Call,Query Aggregate,Id32,Source Aggregate,Id32,Result Set Size,Gauge32,Source Type,Id32,Thread Index,Gauge32,Cube Name,LongStr
S or C (start subquery) record
is a start subquery record, with one record written for each data access. It starts with an S, followed by:
  • the SAS datetime value when the subquery started
  • the application ID from the I record
  • the transaction class ID from the G record
  • a transaction ID
  • the CPU (start) time
  • the system CPU (start) time
Output:
S,1320596204.653000,2,2,2,1.51512,0.630907
If the MDX_QUERY level was also requested, then the DATA_QUERY transaction record is correlated to its parent MDX_QUERY record, and starts with a C, followed by:
  • the SAS datetime value when the subquery started
  • the application ID from the I record
  • the transaction class ID from the G record
  • a transaction ID
  • the parent transaction class ID
  • the parent transaction ID
  • a user CPU (start) time
  • a system CPU (start) time
Output:
C,1320596204.653000,2,2,2,1,1,1.51512,0.630907
P (stop subquery) record
is a stop subquery record, with one record written for each data access. It starts with a P, followed by:
  • the SAS datetime value when the subquery ended
  • the application ID from the I record
  • the transaction class ID from the G record
  • the transaction ID from the S or C record
  • a user CPU (stop) time
  • a system CPU (stop) time
  • a status (0=OK, 2=subquery failed)
  • a region sequential number (per update record)
  • an aggregation sequential number (per update record)
  • the size of the result set in records
  • the plug-in type (0=CSPDS, 1=CSAS, 2=CACHE, 3=MOLAP)
  • the thread index
  • the cube name
Output:
P,1320596205.485000,2,2,2,1.181699,0.670964,0,1,31,5,0,0,SALES
U (update) record
is an update record, with one record written for each new region and stored aggregation. It starts with a U, followed by:
  • the SAS datetime value when the record was written
  • the application ID from the I record
  • the transaction class ID from the G record
  • the transaction ID from the S record
  • a user CPU time
  • a system CPU time
  • a buffer type (always 2, which indicates that 1,024 bytes of text follows)
  • a string with the following format:
    • char(32) cube name
    • char(16) unique sequential number—used in the DATA_QUERY stop record to identify region and aggregation
    • char(4) number of hierarchies in the region or aggregation repeated for each hierarchy in the region or aggregate:
    • char(4) hierarchy number (per OLAP_SESSION update record)
    • char(3) hierarchy level
Output:
U,1355324092.960000,2,3,61,6.93750,5.734375,2,SALES 4 1 1 1
The following update record is written for the MDX_STRING transaction, which writes an additional record for the MDX_QUERY transaction. The record contains the actual MDX query string.
U (update) record
is an update record, with one record written for each MDX_STRING transaction. It starts with a U, followed by:
  • the SAS datetime value when the record was written
  • the application ID from the I record
  • the transaction class ID from the G record
  • the transaction ID from the S record
  • a user CPU time
  • a system CPU time
  • a buffer type (always 2, which indicates that 1,024 bytes of text follows)
  • the actual MDX string
Output:
U,1320589796.262000,2,1,1,0.670964,2,SELECT {[DATE].[DATEH].[ALL DATE]. CHILDREN} ON COLUMNS, {[MEASURES].[MEASURES].[SALES_SUM]} ON ROWS FROM MDDBCARS
When using the SAS logging facility and ARM 2.0, these records are written to ARM2.RECORD.