Overview | SAS 8 ARM Log | SAS 8 Examples | Logging Performance Data
The ARM Log looks similar to the following:
21OCT1998:10:41:32.353 ARM_INIT AppID=1 AppName=Demo 1 Application AppUser=abcusr 21OCT1998:10:41:32.478 ARM_GETID AppID=1 ClsID=1 TxName=Test TxDet=Test Transactions for Response Time Testing 21OCT1998:10:41:36.697 ARM_START AppID=1 ClsID=1 TxSHdl=1 21OCT1998:10:41:49.556 ARM_UPDATE AppID=1 ClsID=1 TxSHdl=1 TxElap=0:00:12.859 TxCpu=0:00:00.188 UpdtData=Customer Warehouse query 21OCT1998:10:41:54.931 ARM_STOP AppID=1 ClsID=1 TxSHdl=1 TxStat=0 TxElap=0:00:18.234 TxCpu=0:00:00.266 21OCT1998:10:41:58.588 ARM_START AppID=1 ClsID=1 TxSHdl=2 21OCT1998:10:42:10.213 ARM_UPDATE AppID=1 ClsID=1 TxSHdl=2 TxElap=0:00:11.625 TxCpu=0:00:00.360 UpdtData=Update customer info 21OCT1998:10:42:16.635 ARM_STOP AppID=1 ClsID=1 TxSHdl=2 TxStat=1 TxElap=0:00:18.047 TxCpu=0:00:00.486 21OCT1998:10:42:18.666 ARM_START AppID=1 ClsID=1 TxSHdl=3 21OCT1998:10:42:27.635 ARM_UPDATE AppID=1 ClsID=1 TxSHdl=3 TxElap=0:00:08.969 TxCpu=0:00:00.218 UpdtData=Delete customer 21OCT1998:10:42:31.525 ARM_STOP AppID=1 ClsID=1 TxSHdl=3 TxStat=2 TxElap=0:00:12.859 TxCpu=0:00:00.360 21OCT1998:10:42:34.103 ARM_END AppID=1 AppNCls=1 AppNTxSt=3 AppNTxSp=3 AppNTxUp=3 AppElap=0:01:01.750 AppCpu=0:00:01.485 AppAvgRt=0:00:16.380 AppMinTx=0:00:12.859 AppMaxTx=0:00:18.234
Each line is a variable length "record" with a maximum lrecl of 400. The date/time stamp and the call identifier always appear in the same column location. Subsequent information appears as a name=value pair. This was done for readability as well as ease of processing with SAS Named Input. The meaning of each variable name is documented (in alphabetical order) in the following table:
Name |
Description |
| AppAvgRt |
Average response time for all transactions in the application |
| AppCpu | CPU time for the entire application |
| AppElap | Elapsed time for the entire application |
| AppID | Application ID |
| AppMaxTx | Longest transaction in the entire application |
| AppMinTx | Shortest transaction in the entire application |
| AppName | Application name |
| AppNCls | Number of transaction classes in the application |
| AppNTxSp |
Number of transactions in the application that were stopped |
| AppNTxSt |
Number of transactions in the application that were started |
| AppNTxUp |
Number of TRANS_UPDATE calls issued in the application |
| AppUser | Application UserID |
| ClsID | Transaction class ID |
| TxCpu | CPU time for a transaction |
| TxDet | Transaction class detail |
| TxElap | Elapsed time for a transaction |
| TxName | Transaction class name |
| TxShdl | Transaction instance start handle |
| TxStat | Transaction status code |
| UpdtData |
Additional application-supplied data on TRANS_UPDATE calls. |
The log may be post-processed via the ARMPROC macro. This macro creates six output SAS datasets, one for each ARM call:
Dataset Name |
Variables |
| INIT | appid initdt appname appuser |
| GETID | clsid getiddt appid txname txdet |
| START | txshdl startdt clsid appid |
| UPDATE | txshdl updtdt updtdata txelap txcpu |
| STOP | txshdl stopdt txstat txelap txcpu |
| END |
appid enddt appncls appntxst appntxsp appntxup appelap appcpu appavgrt appmintx appmaxtx |
An example of the macro:
%armproc(lib=armout,log=d:\snotll\arm\armlog);
The lib parameter points to the output data library that will contain the six datasets and the log parameter specifies the path of the input ARM log external file.
Those 6 datasets may optionally be input to the ARMJOIN macro to produce merged datasets containing information about all applications and transactions:
/*
* Process and join the ARM log data
*/
%armproc;
%armjoin;
proc print data=app; run;
See the ARMANLZ.FRAME in the ARM SAMPLE library for examples of using such a process to graph response time data. The following are screen shots of some sample APP and TXN1 datasets: