FOCUS AREAS

ARM SAS Documentation for Version 9

Syntax Overview | V9 ARM Log Format | SAS 9 Examples


Syntax Overview

ARM V9 is shipped with Base SAS. Additional Arm Macros are now available with SAS v9 to supplement the list of macros defined in SAS Arm Macros .

ARMAGENT= System Option (SAS Language Reference: Dictionary)

ARMLOC= System Option (SAS Language Reference: Dictionary)

ARMSUBSYS= System Option (SAS Language Reference: Dictionary)

ARMAGENT= System Option

Specifies an ARM agent, which is an executable module that contains a vendor's implementation of the ARM API

Valid in: configuration file, SAS invocation, OPTIONS statement, System Options window
Category: System administration: Performance
PROC OPTIONS GROUP= PERFORMANCE

Syntax
Syntax Description
Details
See Also

Syntax

ARMAGENT=module

Syntax Description



module
is the name of the module that contains an ARM agent, which is a program module that contains a vendor's implementation of the ARM API.
Default: SAS ARM agent
Limitation: The name cannot exceed eight characters.




Details

An ARM agent is an executable module that contains a vendor's implementation of the ARM API. The ARM agent is a set of executable routines that are called from an application. The ARM agent and SAS run concurrently. The SAS application passes transaction information to the ARM agent, which collects and manages the writing of the ARM records to the ARM log. SAS, as well as other vendors, provide an ARM agent.

You can specify another vendor's ARM agent in order to monitor both the internal SAS processing transactions (using ARMSUBSYS=) as well as for user-defined transactions (using ARM macros).


See Also


"Monitoring Performance Using Application Response Measurement (ARM)" in SAS Language Reference: Concepts.
System Options:

ARMLOC= System Option
ARMSUBSYS= System Option

ARMLOC= System Option

Specifies the location of the ARM log

Valid in: configuration file, SAS invocation, OPTIONS statement, System Options window
Category: System administration: Performance
PROC OPTIONS GROUP= PERFORMANCE

Syntax
Syntax Description
Details
See Also

Syntax

ARMLOC=fileref | filename

Syntax Description



fileref
is a SAS name that is associated with the physical location of the ARM log. To assign a fileref, use the FILENAME statement.

'filename'
is the physical location of the log. Include the complete pathname and the filename. You can use either single or double quotation marks.
Default: Filename: ARMLOG.LOG
Restriction: For all operating environments except OS/390, if you specify the ARMLOC= system option in your configuration file, you must specify the filename, not a fileref.




Details

The ARM log is an external output text file that contains the logged ARM transaction records. The ARM log gathers transaction information for both the internal SAS processing transactions (depending on the value of the ARMSUBSYS= system option) as well as for user-defined transactions (using ARM macros).

You can change the location of the ARM log after initializing an ARM subsystem, but records that were written to the old ARM log are not copied to the new ARM log. Therefore, you should issue ARMLOC= before issuing the first ARMSUBSYS= so that all records are written to the same ARM log.


See Also


"Monitoring Performance Using Application Response Measurement (ARM)" in SAS Language Reference: Concepts.
System Options:
ARMAGENT= System Option
ARMSUBSYS= System Option

ARMSUBSYS= System Option

Enables and disables the ARM subsystems that determine the internal SAS processing transactions to be logged

Valid in: configuration file, SAS invocation, OPTIONS statement, System Options window
Category: System administration: Performance
PROC OPTIONS GROUP= PERFORMANCE
Restriction: After you enable the ARM subsystems, you cannot specify a different ARM agent using ARMAGENT=.
Default: Disabled

Syntax
Syntax Description
Details
Overview of ARM Subsystems
Understanding the Records Written by the ARM_DSIO Subsystem
Understanding the Records Written by the ARM_IOM Subsystem
Understanding the Records Written by the ARM_PROC Subsystem
Understanding the Records Written by the ARM_OLAP_SESSION Subsystem
See Also

Syntax

ARMSUBSYS=(ARM_NONE | ARM_ALL | subsystem1 <item1 <item2 <...> > > <, subsystem2 <item1 <item2 <...> > > >)

Syntax Description



ARM_NONE
specifies that no internal SAS processing transactions are written to the ARM log. This is the default setting.

ARM_ALL
specifies that all available internal SAS processing transactions are written to the ARM log.

subsystem
specifies an ARM subsystem, which is a group of internal SAS processing transactions that are to be written to the ARM log. The available subsystems are

ARM_DSIO
collects SAS data set I/O processing information.

ARM_IOM
collects IOM Server processing information.

ARM_PROC
collects SAS procedure and DATA step processing information.

ARM_OLAP_SESSION
collects SAS OLAP Server session information.

item
specifies a name that determines the type and amount of transaction logging for each subsystem. Use the item specification(s) as a filtering technique so that only the details that you are interested in are logged. For example, if you want only one type of transaction, list the single item, or if you want multiple transactions for a subsystem, list each item that you want. Items are associated with each subsystem as follows:

ARM_DSIO


OPENCLOSE
logs a SAS data set open and close transaction as a start record when a data set is opened and a stop record when it is closed.

VARDEF
logs OPENCLOSE records and an update record for each defined variable (output opens).

VARSEL
logs OPENCLOSE records and an update record for each selected variable (input and update opens).

VARINFO
logs OPENCLOSE, VARDEF, and VARSEL records.

WHEREOPT
logs OPENCLOSE records and an update record for each index that is selected as a result of WHERE processing optimization. This update is available for the default base SAS engine and the V6 compatibility engine only.

WHEREINFO
logs OPENCLOSE, WHEREOPT, and WHERETXT records.

WHERETXT
logs OPENCLOSE records and one or more update records that contain a textual representation of the active WHERE expression. Each record can hold approximately 1,000 bytes.

MIN
logs the minimum amount of information. For SAS Version 9, MIN logs the OPENCLOSE records.

MAX
logs the maximum amount of information. For SAS Version 9, MAX logs all of the ARM_DSIO records. This is the default for ARM_DSIO.

LEVEL1
logs OPENCLOSE, VARDEF, and VARSEL records.

LEVEL2
logs LEVEL1, WHEREOPT, and WHERETXT records.

For more information about the logged records, see Understanding the Records Written by the ARM_DSIO Subsystem.



ARM_IOM
logs records for IOM server methods to monitor performance of IOM servers. For more information about the logged records, see Understanding the Records Written by the ARM_IOM Subsystem.

ARM_PROC
logs PROC and DATA step execution time, that is, when the step begins and when it terminates as a start and a stop record. For more information about the logged records, see Understanding the Records Written by the ARM_PROC Subsystem.

ARM_OLAP_SESSION


OLAP_SESSION
logs initialization and termination records in order to tell you which server was used and for how long. This is the default transaction for the ARM_OLAP_SESSION subsystem.

MDX_QUERY
logs a record for each query sent. This transaction stores the cube name and the size of the result set in cells, which are additional identifiers or metrics.

DATA_QUERY
logs a record for each region execution, that is, each individual data retrieval from stored cube aggregations or from the cache. The transaction class stores the following additional identifiers or metrics:
region ID
aggregate ID
number of returned records
source type (MOLAP, CSAS, CACHE, CSPDS)
The DATA_QUERY transaction serves as the primary input for both automatic and manual cube optimization.

MDX_STRING
logs a record for the MDX_QUERY transaction that contains the actual MDX query string.

For more Information about the logged records, see Understanding the Records Written by the ARM_OLAP_SESSION Subsystem.






Details

Overview of ARM Subsystems

The ARMSUBSYS= system option enables and disables the ARM subsystems, which determine the internal SAS transaction processing for which you want to monitor. An ARM subsystem is a group of internal SAS processing transactions such as DATA and PROC step processing and file input/output processing.

If you want to specify a different ARM log location by using the ARMLOC= system option, be sure to issue ARMLOC= before you enable an ARM subsystem so that the subsystem initialization record is written to the new log.

Note: There is a subsystem for collecting memory usage information. For more information about that subsystem, contact SAS Technical Support.

Understanding the Records Written by the ARM_DSIO Subsystem

The ARM_DSIO subsystem writes records to the ARM log that collects SAS data set input/output processing information. These are the records written to the ARM log:

I (initialization) record
is an initialization record, with one record written per session when the ARM subsystem is initialized. It starts with an I, followed by the SAS datetime value for session start, an application ID, a user start time, a system start time, an application name, and a user ID:
I,1326479452.427000,1,1.171684,1.532203,SAS,sasabc
G (GetID) record
is a transaction ID record, with one record written per transaction. It starts with a G, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID, a transaction name, a transaction description, then a description of the values provided in subsequent S (start) and P (stop) records. LIBNAME refers to the libref for a SAS data library, MEMTYPE refers to the member type (either DATA or VIEW), and MEMNAME refers to a SAS data set name.
G,1326479452.447000,1,1,MVA_DSIO.OPEN_CLOSE,DATA SET OPEN/CLOSE,
   LIBNAME,ShortStr,MEMTYPE,ShortStr,MEMNAME,LongStr
S (start) record
is a start record, with one record written each time a file is opened. It starts with an S, followed by the SAS datetime value when the record was written, an application ID from the I record, transaction class ID from the G record, a transaction ID, a user start time, a system start time, then the actual libref, member type, and member name of the opened file:
S,1326479486.396000,1,1,1,1.311886,2.22908,WORK    ,DATA    ,GRADES
P (stop) record
is a stop record, with one record written each time a file is closed. It starts with a P, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID from the G record, a transaction ID from the associated S record, a user start time, a system start time then the actual libref, member type, and member name of the closed file:
P,1326479486.706000,1,1,1,1.331915,2.22908,0,WORK    ,DATA    ,GRADES
U (update) record
is an update record, with one record written each time a variable is defined or selected, and each time an index is used during WHERE processing optimization displays the text of a WHERE expression. It starts with a U, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID from the G record, a transaction ID from the associated S record, a user start time, a system start time followed by the detailed information for the type of U record being written:

For variable definition and selection, the variable type is specified with a 1 for numeric or a 2 for character, then the name of the variable followed by DEF for definition or SEL for selection:

U,1326479486.406000,1,1,1,1.321900,2.22908,2,VAR(2,Student),DEF
U,1326479508.508000,1,1,2,1.612318,2.443513,2,VAR(2,Student),SEL

For index selection, the index type is specified with an S for simple or a C for complex, then the name of the index:

U,1326479606.48000,1,1,4,2.403456,3.915630,2,INDEX(S,Test1),SEL

For WHERE expression text information, the expression is specified:

U,1326479606.48000,1,1,4,2.403456,3.915630,2,WHERE(0),test1>60
E (end) record
is an end record, with one record written per session. It starts with an E, followed by the SAS datetime value when the record was written, an application ID from the I record, a user stop time, anda system stop time:
E,1326480210.737000,1,2.533643,4.25788

Understanding the Records Written by the ARM_IOM Subsystem

The ARM_IOM subsystem writes records to the ARM Log that collects IOM server method processing information. These records are written to the ARM log:

I (initialization) record
is an initialization record, with one record written per session when the ARM subsystem is initialized. It starts with an I, followed by the SAS datetime value for session start, an application ID, a user start time, a system start time, an application name, and a user ID:
I,1327874323.742000,1,0.220316,0.320460,SAS,sasxxx
G (GetID) record
is a transaction ID record, with one record written for each method and attribute and one record written for creating the correlator. It starts with a G, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID, then method and attribute transaction names. Method and attribute transactions are named component name::method/attribute name, or, if the interface and component names are not the same, component name::interface name::method/attribute name:
G,1327874341.77000,1,2,TestTypes::SetParent,                                 
S (start) record
is a start record, with one record written upon entering each method or attribute. If a correlator is available, it is placed on the transaction. (The correlator is created by a separate Start transaction on the transaction defined for that purpose.) The record starts with an S, followed by the SAS datetime value when the record was written, an application ID, a transaction class ID, a transaction ID, a user start time, a system start time:
S,1327874344.1000,1,1,1,0.620892,0.741065
P (stop) record
is a stop record, with one record written upon exiting each method or attribute. It starts with a P, followed by the SAS datetime value when the record was written, an application ID, a transaction class ID, a transaction ID from the associated S record, a user start time, and a system start time:
P,1327874348.658000,1,9,2,0.620892,0.741065,0

Here is an ARM log for the ARM_IOM subsystem:



ARM Log for ARM_IOM Subsystem

I,1327874323.742000,1,0.220316,0.320460,SAS,sasmaa                            
G,1327874328.28000,1,1,IOMCOMPETrans,Transaction for creating correlator      
G,1327874341.77000,1,2,TestTypes::SetParent,                                  
G,1327874341.77000,1,3,TestTypes::TypeBoolean,                                
G,1327874341.77000,1,4,TestTypes::TypeDateTime,                               
G,1327874341.77000,1,5,TestTypes::TypeDouble,                                 
G,1327874341.77000,1,6,TestTypes::TypeEnum,                                   
G,1327874341.77000,1,7,TestTypes::TypeFloat,                                  
G,1327874341.77000,1,8,TestTypes::TypeInterface,                              
G,1327874341.77000,1,9,TestTypes::TypeLong,                                   
G,1327874341.77000,1,10,TestTypes::TypeOctet,                                 
G,1327874341.77000,1,11,TestTypes::TypeShort,                                 
G,1327874341.77000,1,12,TestTypes::TypeString,                                
G,1327874341.77000,1,13,TestTypes::TypeUUID,                                  
G,1327874341.77000,1,14,TestTypes::TypeAny,                                   
G,1327874341.77000,1,15,TestTypes::TypeBoolean1dArray,                        
G,1327874341.77000,1,16,TestTypes::TypeDateTime1dArray,                       
G,1327874341.77000,1,17,TestTypes::TypeDouble1dArray,                         
G,1327874341.77000,1,18,TestTypes::TypeEnum1dArray,                           
G,1327874341.77000,1,19,TestTypes::TypeFloat1dArray,                          
G,1327874341.77000,1,20,TestTypes::TypeLong1dArray,                           
G,1327874341.77000,1,21,TestTypes::TypeOctet1dArray,                          
G,1327874341.77000,1,22,TestTypes::TypeShort1dArray,                          
G,1327874341.87000,1,23,TestTypes::TypeString1dArray,                         
G,1327874341.87000,1,24,TestTypes::TypeUUID1dArray,                           
G,1327874341.87000,1,25,TestTypes::TypeAny1dArray,                            
G,1327874341.87000,1,26,TestTypes::TypeBoolean2dArray,                        
G,1327874341.87000,1,27,TestTypes::TypeDateTime2dArray,                       
G,1327874341.87000,1,28,TestTypes::TypeDouble2dArray,                         
G,1327874341.87000,1,29,TestTypes::TypeEnum2dArray,                           
G,1327874341.87000,1,30,TestTypes::TypeFloat2dArray,                          
G,1327874341.87000,1,31,TestTypes::TypeLong2dArray,                           
G,1327874341.87000,1,32,TestTypes::TypeOctet2dArray,                          
G,1327874341.87000,1,33,TestTypes::TypeShort2dArray,                          
G,1327874341.87000,1,34,TestTypes::TypeString2dArray,                         
G,1327874341.87000,1,35,TestTypes::TypeUUID2dArray,                           
G,1327874341.87000,1,36,TestTypes::TypeAny2dArray,                            
G,1327874341.87000,1,37,TestTypes TestMult Name Get,                          
G,1327874341.87000,1,38,TestTypes::ExceptionTest,                             
G,1327874341.87000,1,39,TestTypes::ExceptionTestAttr Get,                     
G,1327874341.87000,1,40,TestTypes::ExceptionTestAttr Set,                     
G,1327874341.87000,1,41,TestTypes::ServerAdmin::ServerAdminStart,             
G,1327874341.87000,1,42,TestTypes::ServerAdmin::ServerAdminStop,              
G,1327874341.87000,1,43,TestTypes::ServerAdmin::ServerAdminDeferredStop,      
G,1327874341.87000,1,44,TestTypes::ServerAdmin::ServerAdminPause,             
G,1327874341.87000,1,45,TestTypes::ServerAdmin::ServerAdminContinue,          
G,1327874341.87000,1,46,TestTypes::ServerAdmin::ServerAdminUniqueID Get,      
G,1327874341.87000,1,47,TestTypes::ServerAdmin::ServerAdminName Get,          
G,1327874341.87000,1,48,TestTypes::ServerAdmin::ServerAdminName Set,          
G,1327874341.87000,1,49,TestTypes::ServerAdmin::ResetServerPerformance,       
G,1327874341.87000,1,50,TestTypes::ServerAdmin::GetServerPerformance,         
G,1327874341.87000,1,51,TestTypes::ServerAdmin::GetServerPerformanceByCLSID,  
G,1327874341.87000,1,52,TestTypes::ServerAdmin::GetServerPerformanceByUserID, 
G,1327874341.87000,1,53,TestTypes::ServerAdmin::JnlAccess,                    
G,1327874341.87000,1,54,TestTypes::CreateSession,                             
G,1327874341.87000,1,55,TestTypes::RemoveChild,                               
G,1327874341.87000,1,56,TestTypes::SeveralTypes,                              
G,1327874341.87000,1,57,TestTypes::Several1dArrays,                           
G,1327874341.87000,1,58,TestTypes::Several2dArrays,                           
G,1327874341.87000,1,59,TestTypes::FireEvents,                                
S,1327874344.1000,1,1,1,0.620892,0.741065                                     
C,1327874348.658000,1,9,2,1,1,0.620892,0.741065                               
P,1327874348.658000,1,9,2,0.620892,0.741065,0                                 
P,1327874348.658000,1,1,1,0.620892,0.741065,0                                 
S,1327874348.688000,1,1,3,0.620892,0.741065                                   
C,1327874348.688000,1,3,4,1,3,0.620892,0.741065                               
P,1327874348.688000,1,3,4,0.620892,0.741065,0                                 
P,1327874348.688000,1,1,3,0.620892,0.741065,0                                

Understanding the Records Written by the ARM_PROC Subsystem

The ARM_PROC subsystem writes records to the ARM log that collects SAS procedure and DATA step processing information. These are the records written to the ARM log:

S (start) record
is a start record, with one record written immediately before the procedure starts execution. It starts with an S, followed by the SAS datetime value when the record was written, an application ID, a transaction class ID, a transaction ID, a user start time, a system start time, then the procedure or DATA step name:
S,1323716628.571000,1,1,2,2.834075,8.482196,PRINT
P (stop) record
is a stop record, with one record written when the procedure terminates. It starts with a P, followed by the SAS datetime value when the record was written, an application ID, a transaction class ID, a transaction ID from the associated S record, a user start time, and a system start time:
P,1323716633.398000,1,1,2,2.944233,8.772614,0

Understanding the Records Written by the ARM_OLAP_SESSION Subsystem

The ARM_OLAP_SESSION subsystem writes records to the ARM log that collects information about a SAS OLAP Server session.

These records are written for the OLAP_SESSION transaction. The initialization and termination records tell you who was logged on to which server and for how long:

I (initialization) record
is an initialization record, with one record written per session when the ARM subsystem is initialized. It starts with an I, followed by the SAS datetime value of session start, an application ID, a user CPU time, a system CPU time, an application name OLAP_SESSION, and a user ID:
I,1320592800.822000,2,0.380547,0.630907,OLAP_SESSION,sasabc
E (end) record
is a termination record, with one record written per session. It starts with an E, followed by the SAS datetime value of session end, an application ID from the I record, a user CPU time for session, and a system CPU time for session:
E,1320592802.805000,2,1.281843,0.791137


These records are written for the MDX_QUERY transaction, which records each query sent. 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 session. It starts with a G, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID, a transaction name MDX_QUERY, a transaction description MDX Query, then a description of the values that are provided in subsequent S (start) and P (stop) records. Result Set Size refers to the size of the returned query in cells, and Cube Name is the name of the cube being queried.
G,1320594857.747000,3,2,MDX_QUERY,Mdx Query,Result Set Size,Gauge32,
   Cube name,LongStr
S (start) record
is a start record, with one record written for each query. It starts with an S, followed by the SAS datetime value when the query started, an application ID from the I record, a transaction class ID from the G record, a transaction ID, a user CPU time, a system CPU time:
S,1320594857.787000,3,2,2,1.341929,0.731051,,
P (stop) record
is a stop record, with one record written for each query. It starts with a P, followed by the SAS datetime value when the query ended, an application ID from the I record, a transaction class ID from the G record, a transaction ID from the associated S record, a user CPU time, a system CPU time, the status (0=OK, 2=query failed), the size of returned query in cells, and the name of the cube that was queried:
P,1320594858.948000,3,2,2,2.52952,0.781123,0,5,MDDBCARS


These records are written for the DATA_QUERY transaction, which records each region execution, that is, each individual data retrieval from stored cube aggregations or from cache. These 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 identifier record, with one record written per session. It starts with a G, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID, a transaction name DATA_QUERY, a transaction description plug-in call, then a description of the values that are provided in subsequent S (start) and P (stop) records:
G,1326641491.169000,3,10,DATA_QUERY,Plugin Call,Query #,Id32,Source #,
   Id32,Result Set Size,Gauge32,Source Type,Id32,Thread Index,Gauge32
S (start correlated subquery) record
is a start correlated subquery record if there is no MDX_QUERY record to correlate to, with one record written for each data access. It starts with an S, followed by the SAS datetime value when the subquery started, an application ID from the I record, a transaction class ID from the G record, a transaction ID, a user CPU time, and a system CPU time:
S,1320596204.653000,2,2,2,1.51512,0.630907
C (start correlated subquery) record
is a start correlated subquery record if there is an MDX_QUERY record to correlate to, with one record written for each data access. It starts with a C, followed by the SAS datetime value when the subquery started, an application ID from the I record, a transaction class ID from the G record, a transaction ID, a parent transaction class ID, a parent transaction ID, a user CPU time, and a system CPU time:
C,1320596204.653000,2,2,2,1,1,1.51512,0.630907
P (stop correlated subquery) record
is a stop correlated 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, an application ID from the I record, a transaction class ID from the G record, a transaction ID, a user CPU time, a system CPU time, a status (0=OK, 2=subquery failed), an ID of subquery, an ID of data source, the size of returned query in records, the plug-in type (0=MOLAP, 1=CSAS, 2=CACHE, 3=CSPDS), and thread index:
P,1320596205.485000,2,2,2,1.181699,0.670964,0,1,31,5,0,0


This 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 query. It starts with a U, followed by the SAS datetime value when the record was written, an application ID from the I record, a transaction class ID from the G record, a 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 will follow), and then the actual MDX string:
U,1320589796.262000,2,1,1,0.670964,2,SELECT {.[DATEH].[ALL DATE].
   CHILDREN} ON COLUMNS, {[MEASURES].[MEASURES].[SALES_SUM]} 
   ON ROWS FROM MDDBCARS



See Also


"Monitoring Performance Using Application Response Measurement (ARM)" in SAS Language Reference: Concepts.
System Options:
ARMAGENT= System Option
ARMLOC= System Option