Pārlūkot izejas kodu

Fix pageid blocker output

Within SQL 2022, and when experiencing any sort of PAGE* waits, the resource_description value within sys.dm_os_waiting_tasks contains additional information that was not returned in previous versions of SQL Server and was causing the CASE statement for PAGE* waits to error out with an invalid data type conversion. The updated code will correctly parse the resource_description value to return the 'blocked_pageid' value in SQL Server 2022 and previous versions.
Ken 1 gadu atpakaļ
vecāks
revīzija
de9510b75e
1 mainītis faili ar 4 papildinājumiem un 1 dzēšanām
  1. 4 1
      usp_WhatsUp/usp_whatsup.sql

+ 4 - 1
usp_WhatsUp/usp_whatsup.sql

@@ -485,7 +485,10 @@ BEGIN
 		SELECT waiting_task_address, session_id, exec_context_id, wait_duration_ms, 
 			wait_type, resource_address, blocking_task_address, blocking_session_id, 
 			blocking_exec_context_id, resource_description,
-			CASE WHEN [wait_type] LIKE 'PAGE%' AND [resource_description] LIKE '%:%' THEN CAST(RIGHT([resource_description], LEN([resource_description]) - CHARINDEX(':', [resource_description], LEN([resource_description])-CHARINDEX(':', REVERSE([resource_description])))) AS int)
+			CASE WHEN [wait_type] LIKE 'PAGE%' AND [resource_description] LIKE '%:%' THEN (CASE WHEN [resource_description] NOT LIKE '%[ ](%' 
+														THEN CAST (RIGHT([resource_description], LEN([resource_description]) - CHARINDEX(':', [resource_description], LEN([resource_description])-CHARINDEX(':', REVERSE([resource_description])))) AS INT)
+														ELSE CAST(RIGHT(replace([resource_description], SUBSTRING([resource_description], PATINDEX('%[ ](%', [resource_description]), LEN([resource_description])), ''), LEN(REPLACE([resource_description], SUBSTRING([resource_description], PATINDEX('%[ ](%', [resource_description]), LEN([resource_description])), '')) - CHARINDEX(':', REPLACE([resource_description], SUBSTRING([resource_description], PATINDEX('%[ ](%', [resource_description]), len([resource_description])), ''), LEN(REPLACE([resource_description], SUBSTRING([resource_description], PATINDEX('%[ ](%', [resource_description]), LEN([resource_description])), ''))-CHARINDEX(':', REVERSE(REPLACE([resource_description], SUBSTRING([resource_description], PATINDEX('%[ ](%', [resource_description]), LEN([resource_description])), ''))))) AS INT)
+													END)
 				WHEN [wait_type] LIKE 'LCK%' AND [resource_description] LIKE '%pageid%' AND ISNUMERIC(RIGHT(LEFT([resource_description],CHARINDEX('dbid=', [resource_description], CHARINDEX('pageid=', [resource_description])+6)-1),CHARINDEX('=',REVERSE(RTRIM(LEFT([resource_description],CHARINDEX('dbid=', [resource_description], CHARINDEX('pageid=', [resource_description])+6)-1)))))) = 1 THEN CAST(RIGHT(LEFT([resource_description],CHARINDEX('dbid=', [resource_description], CHARINDEX('pageid=', [resource_description])+6)-1),CHARINDEX('=',REVERSE(RTRIM(LEFT([resource_description],CHARINDEX('dbid=', [resource_description], CHARINDEX('pageid=', [resource_description])+6)-1))))) AS bigint)
 				ELSE NULL END AS pageid,
 			CASE WHEN [wait_type] LIKE 'LCK%' AND [resource_description] LIKE '%associatedObjectId%' AND ISNUMERIC(RIGHT([resource_description],CHARINDEX('=', REVERSE([resource_description]))-1)) = 1 THEN CAST(RIGHT([resource_description],CHARINDEX('=', REVERSE([resource_description]))-1) AS bigint)