Jump to content

Lesson Learned #254: Checking Execution Timeouts in Azure Log Analytics


Recommended Posts

Guest Jose_Manuel_Jurado
Posted

Today, I worked on a service request when our customer needs to know several details about the command timeout captured (attention event) and sent to Log Analytics from Azure Diagnostic settings. In this article I would like to share my findings.

 

 

 

Question #1: What is the meaning of error_state_d?

 

 

 

 

 

 

 

AzureDiagnostics

| where Category == "Timeouts"

 

 

 

 

 

  • Listing the columns and values, our customer asked about the meaning of error_state_d:
    • This column is "A numeric state value associated with the query timeout (an attention event)" and represents the part of SQL Server engine code that the query was executing before raising the timeout. For example, if my client commandTimeout is 5 seconds, executing the following TSQL code an execution timeout will be raised with error_state_d value associated with WAITFOR execution. In other situations, for example, CREATE INDEX, could be depending on the stage of the process, if for reading rows, accesing metadata, etc.. For us, the most important thing will be that it is a timeout in our code nothing else.

 

 

 

SELECT 1

WAITFOR DELAY '00:00:10'

 

 

 

 

Question #2: Is possible to identify the query hash or query text of this timeout?

 

 

 

 

  • For this specific scenario, I think that will be more useful to use the Query Data Store Runtime Dataset instead of using Timeout Dataset, because we could find more information about query text, number of executions, execution plan, etc.., for example:
    • We have an execution timeout causing by an incorrect command timeout setting in C# code.

 

729x254vv2.png.9f4d841343326957a4038554142deb05.png

 

 

 

  • Once we have recorded this command timeout we could use:
    • Query Data Store, running the following query:

 

 

 

SELECT

qst.query_sql_text,

qrs.execution_type,

qrs.execution_type_desc,

qpx.query_plan_xml,

qrs.count_executions,

qrs.last_execution_time

FROM sys.query_store_query AS qsq

JOIN sys.query_store_plan AS qsp on qsq.query_id=qsp.query_id

JOIN sys.query_store_query_text AS qst on qsq.query_text_id=qst.query_text_id

OUTER APPLY (SELECT TRY_CONVERT(XML, qsp.query_plan) AS query_plan_xml) AS qpx

JOIN sys.query_store_runtime_stats qrs on qsp.plan_id = qrs.plan_id

WHERE qrs.execution_type =3

ORDER BY qrs.last_execution_time DESC;

GO

 

 

 

 

  • Log Analystics

 

 

 

AzureDiagnostics

| where Category == "QueryStoreRuntimeStatistics"

| where execution_type_d == 3

 

 

 

 

 

    • In both cases, we need to connect to the database to obtain the query_text or other details based on the Query_Hash obtained in the previous filter.

 

 

 

SELECT qt.query_sql_text query_text, q.query_hash

FROM sys.query_store_query q

JOIN sys.query_store_query_text qt

ON q.query_text_id = qt.query_text_id

WHERE q.query_hash = <QueryHash>

 

 

 

 

 

Finally, if you need to customize your own Command Timeout report, you could read this link: Lesson Learned #1: Capturing a TSQL Command Timeout - Microsoft Community Hub

 

 

 

Enjoy!

 

Continue reading...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...