Analyzing Long Running Operation (SQL Query) Telemetry

Any SQL query that takes longer than 1000 milliseconds to execute will be sent to your Azure Application Insights resource. This enables you to focus on tuning SQL queries that take too long to execute (maybe one or more tables miss an index or maybe some filters are missing). It also reduces the ingestion of data into the Azure Application Insights resource to save cost of having telemetry.

With Business Central online, if you want to capture all SQL queries for a short period of time for a given session, you can enable Additional logging from the Help & Support page. This lets you analyze queries that take a short time to run but happen very frequently.

Note

With Business Central On-premises, you can change the threshold that defines long running queries. For more information, see Defining Long Running SQL Queries Threshold.

There are multiple reasons that affect the time it takes SQL queries to run. For example, the database could be waiting for a lock to be released. Or, the database is executing an operation that does badly because of missing indexes. Sometimes you can look at the SQL statement that was generated by the code to see what caused the delay. This information is found in the CustomDimension data, specifically the AL Stack Trace column.

Dimensions in Application Insights

This table explains the columns included in long running query events emitted to Application Insights. Bold text indicates that the value of the columns is a constant. Some columns are standard for Application Insights. These columns are indicated by Application Insights.

Column Description or value
timestamp Specifies the date and time that the long running query event occurred, such as 2019-08-20T07:23:07.9996696Z
message Version 16.1 and later:
Operation exceeded time threshold (SQL query)

Before version 16.1:
Action took longer than expected
severityLevel 2 (This level indicates a warning. Long running queries are always recorded as warnings)
itemType trace
customDimensions (see table that follows)
operation_Name Long Running Operation (SQL Query)

Note: The use of the operation_Name column was deprecated in version 16.1. In future versions, data won't be stored in this column. So in version 16.1 and later, use the custom dimension column eventID column custom in Kusto queries instead of operation_Name.
operation_Id Specifies the GUID assigned to the client operation. An operation is created whenever the user does something in the client, such as selecting an action.
operation_ParentId Currently this column is the same as the operation_Id. This behavior might change in a future release.
session_Id Specifies the GUID of the client session. When a client makes a connection to the Business Central Server instance, a session is created and assigned an ID.
client_Type Application Insights
client_IP Application Insights
client_City Application Insights
client_StateOrProvince Application Insights
client_CountryOrRegion Application Insights
cloud_RoleName Specifies the display name of Business Central tenant. For on-premises, this value is the same as the cloud_RoleInstance.
cloud_RoleInstance Specifies the name of Business Central tenant.
appId Application Insights
appName Application Insights
iKey Application Insights
sdkVersion Application Insights

CustomDimensions

This table describes the different dimensions of a Long Running Operation (SQL Query) operation.

Column (key) Description or value
extensionVersion Specifies the version of the extension.
telemetrySchemaVersion Specifies the version of the Business Central telemetry schema.
componentVersion Specifies the version number of the component that emits telemetry (see the component dimension.)
environmentType Specifies the environment type of the Business Central solution, such as Production or Sandbox.
environmentName Specifies the environment name of the Business Central solution, such as Production or Sandbox.
extensionName Specifies the name of the extension.
alObjectType The type of the AL object that executed the SQL statement
alObjectName The name of the AL object that executed the SQL statement
alStackTrace The stack trace in AL.
companyName The display name of the Business Central company that was used at time of execution.
extensionId Specifies the AppID of the extension.
eventId RT0005

This dimension was introduced in Business Central 2020 release wave 1, version 16.1.
aadTenantId Specifies that Azure Active Directory (Azure AD) tenant ID when using Azure AD authentication. For on-premises, if you aren't using Azure AD authentication, this value is common.
clientType Specifies the type of client that executed the SQL Statement, such as Background or Web. For a list of the client types, see ClientType Option Type.
alObjectId The type of the AL object that executed the SQL statement.
component Specifies the Business Central Server instance name and the platform version.
executionTime Specifies the time that it took to execute the SQL statement**. The value has the format hh:mm:ss.sssssss.
longRunningThreshold Specifies the amount of time that an SQL query can run before a warning event is recorded. The value has the format hh:mm:ss.sssssss.

This threshold is controlled by the Business Central Server configuration setting called SqlLongRunningThreshold.
sqlStatement Specifies the SQL statement that was executed for the long running query. The value is limited to 8192 characters. If the value exceeds 8192 characters, it will be truncated in manner that still provides the most pertinent information.
deprecatedKeys A comma-separated list of all the keys that have been deprecated. The keys in this list are still supported but will eventually be removed in the next major release. We recommend that update any queries that use these keys to use the new key name.

** From telemetrySchemaVersion 0.6 and onwards, this value also includes the CompanyOpen operation.

Example

The following code snippet shows an example of the CustomDimensions.

{"extensionVersion":"16.0.10962.0","telemetrySchemaVersion":"0.3","componentVersion":"15.0.40494.0","environmentType":"Production","environmentName":"Production","extensionName":"Base Application","alObjectType":"Report","alObjectName":"Suggest Worksheet Lines","alStackTrace":"AppObjectType: Report\r\n AppObjectId: 840\r\n AL CallStack: \"Suggest Worksheet Lines\"(Report 840).DeleteEntries line 10 - Base Application by Microsoft\r\n\"Suggest Worksheet Lines\"(Report 840).\"Cash Flow Forecast - OnPostDataItem\"(Trigger) line 5 - Base Application by Microsoft\r\n\"Cash Flow Management\"(CodeUnit 841).UpdateCashFlowForecast line 32 - Base Application by Microsoft\r\n\"Cash Flow Forecast Update\"(CodeUnit 842).OnRun(Trigger) line 18 - Base Application by Microsoft\r\n\"Job Queue Start Codeunit\"(CodeUnit 449).OnRun(Trigger) line 11 - Base Application by Microsoft\r\n\"Job Queue Dispatcher\"(CodeUnit 448).HandleRequest line 30 - Base Application by Microsoft\r\n\"Job Queue Dispatcher\"(CodeUnit 448).OnRun(Trigger) line 19 - Base Application by Microsoft","companyName":"CRONUS USA, Inc.","extensionId":"437dbf0e-84ff-417a-965d-ed2bb9650972","aadTenantId":"8ca62103-8877-486d-88e2-9a91303abfc6","clientType":"Background","alObjectId":"840","component":"Dynamics 365 Business Central Server","executionTime":"00:00:05.7470000","sqlStatement":"DELETE FROM \"SQLDATABASE\".dbo.\"CURRENTCOMPANY$Cash Flow Forecast Entry$437dbf0e-84ff-417a-965d-ed2bb9650972\" WHERE (\"Cash Flow Forecast No_\"=@0)"}

See also

Monitoring and Analyzing Telemetry
Enable Sending Telemetry to Application Insights
Monitoring and Analyzing Long Running SQL Queries On-Premises
The Business Central Administration Center