Client Transaction Timings
From ServiceNow Wiki
The Client Transaction Timings plugin enhances the system logs by providing more information on the durations of transactions between the client and the server. By providing information on how time was spent during the transaction, performance issues can be tracked down to the source by seeing where the time is being consumed.
This plugin requires the Response Time Indicator to be enabled, and collects information from the following browsers:
- Internet Explorer
These enhancements are available with the Calgary Release.
- Client transaction timing data is no longer stored on the Client Transaction Log [syslog_client_transaction] table. Transaction timing data is now stored on the Transaction Log Entry [syslog_transaction] table.
- The Transaction Log Entry [syslog_transaction] table is no longer rotated and does not extend the Log Entry [syslog] table. Older data is managed on this table with the table cleaner.
- A new boolean field, Client Transaction, was added to the Transaction Log Entry [syslog_transaction] table. All client transaction log records have this value set to True.
- Base system reports previously configured to run against the Client Transaction Log table now run against the Transaction Log Entry table with a filter condition of Client transactions is true.
- Several new choice values appear for the Transaction Log Entry Type field to match existing Client Transaction Log functionality. These choice values are:
- XMLHttp: Transactions that run through GlideAjax, and the URL is xmlhttp.do.
- Report: The page sys_report_template.do.
- SOAP: SOAP transactions.
- Export: When a list is exported as XML, Excel, and so forth.
- Scheduler: When a scheduled job is performed.
- Text Search: The text search transaction or any of its related operations.
3 Client Transactions Information
Installing the plugin adds the module Client Transactions to the System Logs application, which provides a list of every logged transaction between client and server within the last day. The following information is tracked:
|Created||The moment the transaction was recorded.|
|Response Time||The number of ms spent by the server in fulfilling the transaction.|
|Business Rule Time||The number of ms spent by business rules triggered by the transaction.|
|SQL Time||The number of ms spent by the SQL database.|
|Client Response Time||The number of ms spent by the client in fulfilling the transaction.|
|Client Network Time||The number of ms spent by the network the client is connecting through.|
|Browser Time||The number of ms spent by the browser during the transaction.|
|Client Script Time||The number of ms spent executing client scripts|
|UI Policy Time||The number of ms spent executing ui policy|
|Type||Type of transaction (one of Form, List, Other)|
|Table||The table that was displayed e.g. incident, change_request|
|View||The view for this form/list|
4 Client Detailed Information
A more detailed breakdown of the client timings for all Form rendering (but not list rendering) is also tracked. To see details, drill into a particular client transaction record and observe the related list at the base of the screen.
|Order||The order during the load that this operation occurred|
|Type||The type of operation|
|Name||Descriptive name of this particular operation|
|Duration||Number of ms this particular operation took to complete|
5 Installed Components
5.1 Database Table Structure
The plugin adds the table syslog_client_transaction.
The property glide.client.track_transaction_timings enables and disables the plugin.
The plugin relies on the new script include AJAXClientTiming. This is the script that gathers the information required and populates them on the syslog_client_transaction table.
6 Getting Started
This plugin does not require any other plugins, but will not gather information unless the Response Time Indicator is enabled. It will also gather information only from IE and Firefox browsers.
The plugin has little impact on systems, and can be easily disabled.
6.3 Activating the Plugin
To activate the plugin, simply navigate to System Definition > Plugins and activate the plugin.
|Note: New instances have the plugin activated by default.|
6.4 Disabling the Plugin
Although plugins cannot be removed, the functionality can be disabled:
- Enter sys_properties.list in the application navigator filter.
- Locate the property named glide.client.track_transaction_timings.
- Set the property value to false.
The functionality can be enabled again by setting the property value to true.
7 Timing Values
The following diagram illustrates the timing increments for rendering a page:
The variables in this diagram are defined as follows:
|start_time||The date and time the user requests a page (the user clicks on a link). This value is set by hooking into the beforeunload event of the previous page. The beforeunload event is not properly supported by WebKit browsers, which is why the client timings are not supported on Safari or Chrome.|
|server_time|| The time in ms spent by the server processing the transaction. The server reports this value to the client.|
|load_completion_time||The date and time that the page is fully rendered in the browser. This operation is performed as the last script on the page and identifies the time the page completed loading.|
The following times are reported by the client in the syslog_client_transaction table:
|Response Time||client_response_time|| Calculates the overall time to deliver the page by subtracting the time the user requests the page from the time the page is fully rendered in the browser.||load_completion_time - start_time|
|Server Time||client_server_time||This is the time the server takes to process the transaction.||server_time|
|Network Time||client_network_time|| Calculates the time the network takes to process the request by subtracting the time of the user's request from the time the page starts loading in the browser, and then subtracting the server processing time.||load_time - start_time - server_time|
|Browser Time||browser_time||Calculates the time the browser takes to deliver the page by subtracting the time the page is fully rendered from the time the page starts loading in the browser.||load_completion_time - load_time|