2019独角兽企业重金招聘Python工程师标准>>>

SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET ANSI_WARNINGS ON;
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT ON;
GOIF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_WhoIsActive')EXEC ('CREATE PROC dbo.sp_WhoIsActive AS SELECT ''stub version, to be replaced''')
GO/*********************************************************************************************
Who Is Active? v11.30 (2017-12-10)
(C) 2007-2017, Adam MachanicFeedback: mailto:adam@dataeducation.com
Updates: http://whoisactive.com
Blog: http://dataeducation.comLicense: Who is Active? is free to download and use for personal, educational, and internal corporate purposes, provided that this header is preserved. Redistribution or sale of Who is Active?, in whole or in part, is prohibited without the author's express written consent.
*********************************************************************************************/
ALTER PROC dbo.sp_WhoIsActive
(
--~--Filters--Both inclusive and exclusive--Set either filter to '' to disable--Valid filter types are: session, program, database, login, and host--Session is a session ID, and either 0 or '' can be used to indicate "all" sessions--All other filter types support % or _ as wildcards@filter sysname = '',@filter_type VARCHAR(10) = 'session',@not_filter sysname = '',@not_filter_type VARCHAR(10) = 'session',--Retrieve data about the calling session?@show_own_spid BIT = 0,--Retrieve data about system sessions?@show_system_spids BIT = 0,--Controls how sleeping SPIDs are handled, based on the idea of levels of interest--0 does not pull any sleeping SPIDs--1 pulls only those sleeping SPIDs that also have an open transaction--2 pulls all sleeping SPIDs@show_sleeping_spids TINYINT = 1,--If 1, gets the full stored procedure or running batch, when available--If 0, gets only the actual statement that is currently running in the batch or procedure@get_full_inner_text BIT = 0,--Get associated query plans for running tasks, if available--If @get_plans = 1, gets the plan based on the request's statement offset--If @get_plans = 2, gets the entire plan based on the request's plan_handle@get_plans TINYINT = 0,--Get the associated outer ad hoc query or stored procedure call, if available@get_outer_command BIT = 0,--Enables pulling transaction log write info and transaction duration@get_transaction_info BIT = 0,--Get information on active tasks, based on three interest levels--Level 0 does not pull any task-related information--Level 1 is a lightweight mode that pulls the top non-CXPACKET wait, giving preference to blockers--Level 2 pulls all available task-based metrics, including: --number of active tasks, current wait stats, physical I/O, context switches, and blocker information@get_task_info TINYINT = 1,--Gets associated locks for each request, aggregated in an XML format@get_locks BIT = 0,--Get average time for past runs of an active query--(based on the combination of plan handle, sql handle, and offset)@get_avg_time BIT = 0,--Get additional non-performance-related information about the session or request--text_size, language, date_format, date_first, quoted_identifier, arithabort, ansi_null_dflt_on, --ansi_defaults, ansi_warnings, ansi_padding, ansi_nulls, concat_null_yields_null, --transaction_isolation_level, lock_timeout, deadlock_priority, row_count, command_type----If a SQL Agent job is running, an subnode called agent_info will be populated with some or all of--the following: job_id, job_name, step_id, step_name, msdb_query_error (in the event of an error)----If @get_task_info is set to 2 and a lock wait is detected, a subnode called block_info will be--populated with some or all of the following: lock_type, database_name, object_id, file_id, hobt_id, --applock_hash, metadata_resource, metadata_class_id, object_name, schema_name@get_additional_info BIT = 0,--Walk the blocking chain and count the number of --total SPIDs blocked all the way down by a given session--Also enables task_info Level 1, if @get_task_info is set to 0@find_block_leaders BIT = 0,--Pull deltas on various metrics--Interval in seconds to wait before doing the second data pull@delta_interval TINYINT = 0,--List of desired output columns, in desired order--Note that the final output will be the intersection of all enabled features and all --columns in the list. Therefore, only columns associated with enabled features will --actually appear in the output. Likewise, removing columns from this list may effectively--disable features, even if they are turned on----Each element in this list must be one of the valid output column names. Names must be--delimited by square brackets. White space, formatting, and additional characters are--allowed, as long as the list contains exact matches of delimited valid column names.@output_column_list VARCHAR(8000) = '[dd%][session_id][sql_text][sql_command][login_name][wait_info][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][query_plan][locks][%]',--Column(s) by which to sort output, optionally with sort directions. --Valid column choices:--session_id, physical_io, reads, physical_reads, writes, tempdb_allocations, --tempdb_current, CPU, context_switches, used_memory, physical_io_delta, reads_delta, --physical_reads_delta, writes_delta, tempdb_allocations_delta, tempdb_current_delta, --CPU_delta, context_switches_delta, used_memory_delta, tasks, tran_start_time, --open_tran_count, blocking_session_id, blocked_session_count, percent_complete, --host_name, login_name, database_name, start_time, login_time, program_name----Note that column names in the list must be bracket-delimited. Commas and/or white--space are not required. @sort_order VARCHAR(500) = '[start_time] ASC',--Formats some of the output columns in a more "human readable" form--0 disables outfput format--1 formats the output for variable-width fonts--2 formats the output for fixed-width fonts@format_output TINYINT = 1,--If set to a non-blank value, the script will attempt to insert into the specified --destination table. Please note that the script will not verify that the table exists, --or that it has the correct schema, before doing the insert.--Table can be specified in one, two, or three-part format@destination_table VARCHAR(4000) = '',--If set to 1, no data collection will happen and no result set will be returned; instead,--a CREATE TABLE statement will be returned via the @schema parameter, which will match --the schema of the result set that would be returned by using the same collection of the--rest of the parameters. The CREATE TABLE statement will have a placeholder token of --<table_name> in place of an actual table name.@return_schema BIT = 0,@schema VARCHAR(MAX) = NULL OUTPUT,--Help! What do I do?@help BIT = 0
--~
)
/*
OUTPUT COLUMNS
--------------
Formatted/Non:  [session_id] [smallint] NOT NULLSession ID (a.k.a. SPID)Formatted:      [dd hh:mm:ss.mss] [varchar](15) NULL
Non-Formatted:  <not returned>For an active request, time the query has been runningFor a sleeping session, time since the last batch completedFormatted:     [dd hh:mm:ss.mss (avg)] [varchar](15) NULL
Non-Formatted:  [avg_elapsed_time] [int] NULL(Requires @get_avg_time option)How much time has the active portion of the query taken in the past, on average?Formatted:     [physical_io] [varchar](30) NULL
Non-Formatted:  [physical_io] [bigint] NULLShows the number of physical I/Os, for active requestsFormatted:     [reads] [varchar](30) NULL
Non-Formatted:  [reads] [bigint] NULLFor an active request, number of reads done for the current queryFor a sleeping session, total number of reads done over the lifetime of the sessionFormatted:     [physical_reads] [varchar](30) NULL
Non-Formatted:  [physical_reads] [bigint] NULLFor an active request, number of physical reads done for the current queryFor a sleeping session, total number of physical reads done over the lifetime of the sessionFormatted:      [writes] [varchar](30) NULL
Non-Formatted:  [writes] [bigint] NULLFor an active request, number of writes done for the current queryFor a sleeping session, total number of writes done over the lifetime of the sessionFormatted:      [tempdb_allocations] [varchar](30) NULL
Non-Formatted:  [tempdb_allocations] [bigint] NULLFor an active request, number of TempDB writes done for the current queryFor a sleeping session, total number of TempDB writes done over the lifetime of the sessionFormatted:        [tempdb_current] [varchar](30) NULL
Non-Formatted:  [tempdb_current] [bigint] NULLFor an active request, number of TempDB pages currently allocated for the queryFor a sleeping session, number of TempDB pages currently allocated for the sessionFormatted:       [CPU] [varchar](30) NULL
Non-Formatted:  [CPU] [int] NULLFor an active request, total CPU time consumed by the current queryFor a sleeping session, total CPU time consumed over the lifetime of the sessionFormatted:       [context_switches] [varchar](30) NULL
Non-Formatted:  [context_switches] [bigint] NULLShows the number of context switches, for active requestsFormatted:     [used_memory] [varchar](30) NOT NULL
Non-Formatted:  [used_memory] [bigint] NOT NULLFor an active request, total memory consumption for the current queryFor a sleeping session, total current memory consumptionFormatted:      [physical_io_delta] [varchar](30) NULL
Non-Formatted:  [physical_io_delta] [bigint] NULL(Requires @delta_interval option)Difference between the number of physical I/Os reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:     [reads_delta] [varchar](30) NULL
Non-Formatted:  [reads_delta] [bigint] NULL(Requires @delta_interval option)Difference between the number of reads reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:       [physical_reads_delta] [varchar](30) NULL
Non-Formatted:  [physical_reads_delta] [bigint] NULL(Requires @delta_interval option)Difference between the number of physical reads reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:     [writes_delta] [varchar](30) NULL
Non-Formatted:  [writes_delta] [bigint] NULL(Requires @delta_interval option)Difference between the number of writes reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:     [tempdb_allocations_delta] [varchar](30) NULL
Non-Formatted:  [tempdb_allocations_delta] [bigint] NULL(Requires @delta_interval option)Difference between the number of TempDB writes reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:      [tempdb_current_delta] [varchar](30) NULL
Non-Formatted:  [tempdb_current_delta] [bigint] NULL(Requires @delta_interval option)Difference between the number of allocated TempDB pages reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:     [CPU_delta] [varchar](30) NULL
Non-Formatted:  [CPU_delta] [int] NULL(Requires @delta_interval option)Difference between the CPU time reported on the first and second collections. If the request started after the first collection, the value will be NULLFormatted:       [context_switches_delta] [varchar](30) NULL
Non-Formatted:  [context_switches_delta] [bigint] NULL(Requires @delta_interval option)Difference between the context switches count reported on the first and second collectionsIf the request started after the first collection, the value will be NULLFormatted:       [used_memory_delta] [varchar](30) NULL
Non-Formatted:  [used_memory_delta] [bigint] NULLDifference between the memory usage reported on the first and second collectionsIf the request started after the first collection, the value will be NULLFormatted:        [tasks] [varchar](30) NULL
Non-Formatted:  [tasks] [smallint] NULLNumber of worker tasks currently allocated, for active requestsFormatted/Non:    [status] [varchar](30) NOT NULLActivity status for the session (running, sleeping, etc)Formatted/Non:   [wait_info] [nvarchar](4000) NULLAggregates wait information, in the following format:(Ax: Bms/Cms/Dms)EA is the number of waiting tasks currently waiting on resource type E. B/C/D are waittimes, in milliseconds. If only one thread is waiting, its wait time will be shown as B.If two tasks are waiting, each of their wait times will be shown (B/C). If three or more tasks are waiting, the minimum, average, and maximum wait times will be shown (B/C/D).If wait type E is a page latch wait and the page is of a "special" type (e.g. PFS, GAM, SGAM), the page type will be identified.If wait type E is CXPACKET, the nodeId from the query plan will be identifiedFormatted/Non:   [locks] [xml] NULL(Requires @get_locks option)Aggregates lock information, in XML format.The lock XML includes the lock mode, locked object, and aggregates the number of requests. Attempts are made to identify locked objects by nameFormatted/Non: [tran_start_time] [datetime] NULL(Requires @get_transaction_info option)Date and time that the first transaction opened by a session caused a transaction log write to occur.Formatted/Non:    [tran_log_writes] [nvarchar](4000) NULL(Requires @get_transaction_info option)Aggregates transaction log write information, in the following format:A:wB (C kB)A is a database that has been touched by an active transactionB is the number of log writes that have been made in the database as a result of the transactionC is the number of log kilobytes consumed by the log recordsFormatted:        [open_tran_count] [varchar](30) NULL
Non-Formatted:  [open_tran_count] [smallint] NULLShows the number of open transactions the session has openFormatted:       [sql_command] [xml] NULL
Non-Formatted:  [sql_command] [nvarchar](max) NULL(Requires @get_outer_command option)Shows the "outer" SQL command, i.e. the text of the batch or RPC sent to the server, if availableFormatted:        [sql_text] [xml] NULL
Non-Formatted:  [sql_text] [nvarchar](max) NULLShows the SQL text for active requests or the last statement executedfor sleeping sessions, if available in either case.If @get_full_inner_text option is set, shows the full text of the batch.Otherwise, shows only the active statement within the batch.If the query text is locked, a special timeout message will be sent, in the following format:<timeout_exceeded />If an error occurs, an error message will be sent, in the following format:<error message="message" />Formatted/Non:    [query_plan] [xml] NULL(Requires @get_plans option)Shows the query plan for the request, if available.If the plan is locked, a special timeout message will be sent, in the following format:<timeout_exceeded />If an error occurs, an error message will be sent, in the following format:<error message="message" />Formatted/Non:   [blocking_session_id] [smallint] NULLWhen applicable, shows the blocking SPIDFormatted:     [blocked_session_count] [varchar](30) NULL
Non-Formatted:  [blocked_session_count] [smallint] NULL(Requires @find_block_leaders option)The total number of SPIDs blocked by this session,all the way down the blocking chain.Formatted:       [percent_complete] [varchar](30) NULL
Non-Formatted:  [percent_complete] [real] NULLWhen applicable, shows the percent complete (e.g. for backups, restores, and some rollbacks)Formatted/Non:    [host_name] [sysname] NOT NULLShows the host name for the connectionFormatted/Non:  [login_name] [sysname] NOT NULLShows the login name for the connectionFormatted/Non:    [database_name] [sysname] NULLShows the connected databaseFormatted/Non:    [program_name] [sysname] NULLShows the reported program/application nameFormatted/Non:  [additional_info] [xml] NULL(Requires @get_additional_info option)Returns additional non-performance-related session/request informationIf the script finds a SQL Agent job running, the name of the job and job step will be reportedIf @get_task_info = 2 and the script finds a lock wait, the locked object will be reportedFormatted/Non:   [start_time] [datetime] NOT NULLFor active requests, shows the time the request startedFor sleeping sessions, shows the time the last batch completedFormatted/Non: [login_time] [datetime] NOT NULLShows the time that the session connectedFormatted/Non: [request_id] [int] NULLFor active requests, shows the request_idShould be 0 unless MARS is being usedFormatted/Non: [collection_time] [datetime] NOT NULLTime that this script's final SELECT ran
*/
AS
BEGIN;SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;SET QUOTED_IDENTIFIER ON;SET ANSI_PADDING ON;SET CONCAT_NULL_YIELDS_NULL ON;SET ANSI_WARNINGS ON;SET NUMERIC_ROUNDABORT OFF;SET ARITHABORT ON;IF@filter IS NULLOR @filter_type IS NULLOR @not_filter IS NULLOR @not_filter_type IS NULLOR @show_own_spid IS NULLOR @show_system_spids IS NULLOR @show_sleeping_spids IS NULLOR @get_full_inner_text IS NULLOR @get_plans IS NULLOR @get_outer_command IS NULLOR @get_transaction_info IS NULLOR @get_task_info IS NULLOR @get_locks IS NULLOR @get_avg_time IS NULLOR @get_additional_info IS NULLOR @find_block_leaders IS NULLOR @delta_interval IS NULLOR @format_output IS NULLOR @output_column_list IS NULLOR @sort_order IS NULLOR @return_schema IS NULLOR @destination_table IS NULLOR @help IS NULLBEGIN;RAISERROR('Input parameters cannot be NULL', 16, 1);RETURN;END;IF @filter_type NOT IN ('session', 'program', 'database', 'login', 'host')BEGIN;RAISERROR('Valid filter types are: session, program, database, login, host', 16, 1);RETURN;END;IF @filter_type = 'session' AND @filter LIKE '%[^0123456789]%'BEGIN;RAISERROR('Session filters must be valid integers', 16, 1);RETURN;END;IF @not_filter_type NOT IN ('session', 'program', 'database', 'login', 'host')BEGIN;RAISERROR('Valid filter types are: session, program, database, login, host', 16, 1);RETURN;END;IF @not_filter_type = 'session' AND @not_filter LIKE '%[^0123456789]%'BEGIN;RAISERROR('Session filters must be valid integers', 16, 1);RETURN;END;IF @show_sleeping_spids NOT IN (0, 1, 2)BEGIN;RAISERROR('Valid values for @show_sleeping_spids are: 0, 1, or 2', 16, 1);RETURN;END;IF @get_plans NOT IN (0, 1, 2)BEGIN;RAISERROR('Valid values for @get_plans are: 0, 1, or 2', 16, 1);RETURN;END;IF @get_task_info NOT IN (0, 1, 2)BEGIN;RAISERROR('Valid values for @get_task_info are: 0, 1, or 2', 16, 1);RETURN;END;IF @format_output NOT IN (0, 1, 2)BEGIN;RAISERROR('Valid values for @format_output are: 0, 1, or 2', 16, 1);RETURN;END;IF @help = 1BEGIN;DECLARE @header VARCHAR(MAX),@params VARCHAR(MAX),@outputs VARCHAR(MAX);SELECT @header =REPLACE(REPLACE(CONVERT(VARCHAR(MAX),SUBSTRING(t.text, CHARINDEX('/' + REPLICATE('*', 93), t.text) + 94,CHARINDEX(REPLICATE('*', 93) + '/', t.text) - (CHARINDEX('/' + REPLICATE('*', 93), t.text) + 94))),CHAR(13)+CHAR(10),CHAR(13)),'    ',''),@params =CHAR(13) +REPLACE(REPLACE(CONVERT(VARCHAR(MAX),SUBSTRING(t.text, CHARINDEX('--~', t.text) + 5, CHARINDEX('--~', t.text, CHARINDEX('--~', t.text) + 5) - (CHARINDEX('--~', t.text) + 5))),CHAR(13)+CHAR(10),CHAR(13)),'    ',''),@outputs = CHAR(13) +REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(MAX),SUBSTRING(t.text, CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32,CHARINDEX('*/', t.text, CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32) - (CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32))),CHAR(9),CHAR(255)),CHAR(13)+CHAR(10),CHAR(13)),' ','') +CHAR(13)FROM sys.dm_exec_requests AS rCROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS tWHEREr.session_id = @@SPID;WITHa0 AS(SELECT 1 AS n UNION ALL SELECT 1),a1 AS(SELECT 1 AS n FROM a0 AS a, a0 AS b),a2 AS(SELECT 1 AS n FROM a1 AS a, a1 AS b),a3 AS(SELECT 1 AS n FROM a2 AS a, a2 AS b),a4 AS(SELECT 1 AS n FROM a3 AS a, a3 AS b),numbers AS(SELECT TOP(LEN(@header) - 1)ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS numberFROM a4ORDER BYnumber)SELECTRTRIM(LTRIM(SUBSTRING(@header,number + 1,CHARINDEX(CHAR(13), @header, number + 1) - number - 1))) AS [------header---------------------------------------------------------------------------------------------------------------]FROM numbersWHERESUBSTRING(@header, number, 1) = CHAR(13);WITHa0 AS(SELECT 1 AS n UNION ALL SELECT 1),a1 AS(SELECT 1 AS n FROM a0 AS a, a0 AS b),a2 AS(SELECT 1 AS n FROM a1 AS a, a1 AS b),a3 AS(SELECT 1 AS n FROM a2 AS a, a2 AS b),a4 AS(SELECT 1 AS n FROM a3 AS a, a3 AS b),numbers AS(SELECT TOP(LEN(@params) - 1)ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS numberFROM a4ORDER BYnumber),tokens AS(SELECT RTRIM(LTRIM(SUBSTRING(@params,number + 1,CHARINDEX(CHAR(13), @params, number + 1) - number - 1))) AS token,number,CASEWHEN SUBSTRING(@params, number + 1, 1) = CHAR(13) THEN numberELSE COALESCE(NULLIF(CHARINDEX(',' + CHAR(13) + CHAR(13), @params, number), 0), LEN(@params)) END AS param_group,ROW_NUMBER() OVER(PARTITION BYCHARINDEX(',' + CHAR(13) + CHAR(13), @params, number),SUBSTRING(@params, number+1, 1)ORDER BY number) AS group_orderFROM numbersWHERESUBSTRING(@params, number, 1) = CHAR(13)),parsed_tokens AS(SELECTMIN(CASEWHEN token LIKE '@%' THEN tokenELSE NULLEND) AS parameter,MIN(CASEWHEN token LIKE '--%' THEN RIGHT(token, LEN(token) - 2)ELSE NULLEND) AS description,param_group,group_orderFROM tokensWHERENOT (token = '' AND group_order > 1)GROUP BYparam_group,group_order)SELECTCASEWHEN description IS NULL AND parameter IS NULL THEN '-------------------------------------------------------------------------'WHEN param_group = MAX(param_group) OVER() THEN parameterELSE COALESCE(LEFT(parameter, LEN(parameter) - 1), '')END AS [------parameter----------------------------------------------------------],CASEWHEN description IS NULL AND parameter IS NULL THEN '----------------------------------------------------------------------------------------------------------------------'ELSE COALESCE(description, '')END AS [------description-----------------------------------------------------------------------------------------------------]FROM parsed_tokensORDER BYparam_group, group_order;WITHa0 AS(SELECT 1 AS n UNION ALL SELECT 1),a1 AS(SELECT 1 AS n FROM a0 AS a, a0 AS b),a2 AS(SELECT 1 AS n FROM a1 AS a, a1 AS b),a3 AS(SELECT 1 AS n FROM a2 AS a, a2 AS b),a4 AS(SELECT 1 AS n FROM a3 AS a, a3 AS b),numbers AS(SELECT TOP(LEN(@outputs) - 1)ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS numberFROM a4ORDER BYnumber),tokens AS(SELECT RTRIM(LTRIM(SUBSTRING(@outputs,number + 1,CASEWHEN COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) < COALESCE(NULLIF(CHARINDEX(CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2, @outputs, number + 1), 0), LEN(@outputs))THEN COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) - number - 1ELSECOALESCE(NULLIF(CHARINDEX(CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2, @outputs, number + 1), 0), LEN(@outputs)) - number - 1END))) AS token,number,COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) AS output_group,ROW_NUMBER() OVER(PARTITION BY COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs))ORDER BYnumber) AS output_group_orderFROM numbersWHERESUBSTRING(@outputs, number, 10) = CHAR(13) + 'Formatted'OR SUBSTRING(@outputs, number, 2) = CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2),output_tokens AS(SELECT *,CASE output_group_orderWHEN 2 THEN MAX(CASE output_group_order WHEN 1 THEN token ELSE NULL END) OVER (PARTITION BY output_group)ELSE ''END COLLATE Latin1_General_Bin2 AS column_infoFROM tokens)SELECTCASE output_group_orderWHEN 1 THEN '-----------------------------------'WHEN 2 THEN CASEWHEN CHARINDEX('Formatted/Non:', column_info) = 1 THENSUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+1, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info))ELSESUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)-1)ENDELSE ''END AS formatted_column_name,CASE output_group_orderWHEN 1 THEN '-----------------------------------'WHEN 2 THEN CASEWHEN CHARINDEX('Formatted/Non:', column_info) = 1 THENSUBSTRING(column_info, CHARINDEX(']', column_info)+2, LEN(column_info))ELSESUBSTRING(column_info, CHARINDEX(']', column_info)+2, CHARINDEX('Non-Formatted:', column_info, CHARINDEX(']', column_info)+2) - CHARINDEX(']', column_info)-3)ENDELSE ''END AS formatted_column_type,CASE output_group_orderWHEN 1 THEN '---------------------------------------'WHEN 2 THEN CASEWHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN ''ELSECASEWHEN SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, 1) = '<' THENSUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, CHARINDEX('>', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info)))ELSESUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info)))ENDENDELSE ''END AS unformatted_column_name,CASE output_group_orderWHEN 1 THEN '---------------------------------------'WHEN 2 THEN CASEWHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN ''ELSECASEWHEN SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, 1) = '<' THEN ''ELSESUBSTRING(column_info, CHARINDEX(']', column_info, CHARINDEX('Non-Formatted:', column_info))+2, CHARINDEX('Non-Formatted:', column_info, CHARINDEX(']', column_info)+2) - CHARINDEX(']', column_info)-3)ENDENDELSE ''END AS unformatted_column_type,CASE output_group_orderWHEN 1 THEN '----------------------------------------------------------------------------------------------------------------------'ELSE REPLACE(token, CHAR(255) COLLATE Latin1_General_Bin2, '')END AS [------description-----------------------------------------------------------------------------------------------------]FROM output_tokensWHERENOT (output_group_order = 1 AND output_group = LEN(@outputs))ORDER BYoutput_group,CASE output_group_orderWHEN 1 THEN 99ELSE output_group_orderEND;RETURN;END;WITHa0 AS(SELECT 1 AS n UNION ALL SELECT 1),a1 AS(SELECT 1 AS n FROM a0 AS a, a0 AS b),a2 AS(SELECT 1 AS n FROM a1 AS a, a1 AS b),a3 AS(SELECT 1 AS n FROM a2 AS a, a2 AS b),a4 AS(SELECT 1 AS n FROM a3 AS a, a3 AS b),numbers AS(SELECT TOP(LEN(@output_column_list))ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS numberFROM a4ORDER BYnumber),tokens AS(SELECT '|[' +SUBSTRING(@output_column_list,number + 1,CHARINDEX(']', @output_column_list, number) - number - 1) + '|]' AS token,numberFROM numbersWHERESUBSTRING(@output_column_list, number, 1) = '['),ordered_columns AS(SELECTx.column_name,ROW_NUMBER() OVER(PARTITION BYx.column_nameORDER BYtokens.number,x.default_order) AS r,ROW_NUMBER() OVER(ORDER BYtokens.number,x.default_order) AS sFROM tokensJOIN(SELECT '[session_id]' AS column_name, 1 AS default_orderUNION ALLSELECT '[dd hh:mm:ss.mss]', 2WHERE@format_output IN (1, 2)UNION ALLSELECT '[dd hh:mm:ss.mss (avg)]', 3WHERE@format_output IN (1, 2)AND @get_avg_time = 1UNION ALLSELECT '[avg_elapsed_time]', 4WHERE@format_output = 0AND @get_avg_time = 1UNION ALLSELECT '[physical_io]', 5WHERE@get_task_info = 2UNION ALLSELECT '[reads]', 6UNION ALLSELECT '[physical_reads]', 7UNION ALLSELECT '[writes]', 8UNION ALLSELECT '[tempdb_allocations]', 9UNION ALLSELECT '[tempdb_current]', 10UNION ALLSELECT '[CPU]', 11UNION ALLSELECT '[context_switches]', 12WHERE@get_task_info = 2UNION ALLSELECT '[used_memory]', 13UNION ALLSELECT '[physical_io_delta]', 14WHERE@delta_interval > 0   AND @get_task_info = 2UNION ALLSELECT '[reads_delta]', 15WHERE@delta_interval > 0UNION ALLSELECT '[physical_reads_delta]', 16WHERE@delta_interval > 0UNION ALLSELECT '[writes_delta]', 17WHERE@delta_interval > 0UNION ALLSELECT '[tempdb_allocations_delta]', 18WHERE@delta_interval > 0UNION ALLSELECT '[tempdb_current_delta]', 19WHERE@delta_interval > 0UNION ALLSELECT '[CPU_delta]', 20WHERE@delta_interval > 0UNION ALLSELECT '[context_switches_delta]', 21WHERE@delta_interval > 0AND @get_task_info = 2UNION ALLSELECT '[used_memory_delta]', 22WHERE@delta_interval > 0UNION ALLSELECT '[tasks]', 23WHERE@get_task_info = 2UNION ALLSELECT '[status]', 24UNION ALLSELECT '[wait_info]', 25WHERE@get_task_info > 0OR @find_block_leaders = 1UNION ALLSELECT '[locks]', 26WHERE@get_locks = 1UNION ALLSELECT '[tran_start_time]', 27WHERE@get_transaction_info = 1UNION ALLSELECT '[tran_log_writes]', 28WHERE@get_transaction_info = 1UNION ALLSELECT '[open_tran_count]', 29UNION ALLSELECT '[sql_command]', 30WHERE@get_outer_command = 1UNION ALLSELECT '[sql_text]', 31UNION ALLSELECT '[query_plan]', 32WHERE@get_plans >= 1UNION ALLSELECT '[blocking_session_id]', 33WHERE@get_task_info > 0OR @find_block_leaders = 1UNION ALLSELECT '[blocked_session_count]', 34WHERE@find_block_leaders = 1UNION ALLSELECT '[percent_complete]', 35UNION ALLSELECT '[host_name]', 36UNION ALLSELECT '[login_name]', 37UNION ALLSELECT '[database_name]', 38UNION ALLSELECT '[program_name]', 39UNION ALLSELECT '[additional_info]', 40WHERE@get_additional_info = 1UNION ALLSELECT '[start_time]', 41UNION ALLSELECT '[login_time]', 42UNION ALLSELECT '[request_id]', 43UNION ALLSELECT '[collection_time]', 44) AS x ON x.column_name LIKE token ESCAPE '|')SELECT@output_column_list =STUFF((SELECT',' + column_name as [text()]FROM ordered_columnsWHEREr = 1ORDER BYsFOR XMLPATH('')),1,1,'');IF COALESCE(RTRIM(@output_column_list), '') = ''BEGIN;RAISERROR('No valid column matches found in @output_column_list or no columns remain due to selected options.', 16, 1);RETURN;END;IF @destination_table <> ''BEGIN;SET @destination_table = --databaseCOALESCE(QUOTENAME(PARSENAME(@destination_table, 3)) + '.', '') +--schemaCOALESCE(QUOTENAME(PARSENAME(@destination_table, 2)) + '.', '') +--tableCOALESCE(QUOTENAME(PARSENAME(@destination_table, 1)), '');IF COALESCE(RTRIM(@destination_table), '') = ''BEGIN;RAISERROR('Destination table not properly formatted.', 16, 1);RETURN;END;END;WITHa0 AS(SELECT 1 AS n UNION ALL SELECT 1),a1 AS(SELECT 1 AS n FROM a0 AS a, a0 AS b),a2 AS(SELECT 1 AS n FROM a1 AS a, a1 AS b),a3 AS(SELECT 1 AS n FROM a2 AS a, a2 AS b),a4 AS(SELECT 1 AS n FROM a3 AS a, a3 AS b),numbers AS(SELECT TOP(LEN(@sort_order))ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS numberFROM a4ORDER BYnumber),tokens AS(SELECT '|[' +SUBSTRING(@sort_order,number + 1,CHARINDEX(']', @sort_order, number) - number - 1) + '|]' AS token,SUBSTRING(@sort_order,CHARINDEX(']', @sort_order, number) + 1,COALESCE(NULLIF(CHARINDEX('[', @sort_order, CHARINDEX(']', @sort_order, number)), 0), LEN(@sort_order)) - CHARINDEX(']', @sort_order, number)) AS next_chunk,numberFROM numbersWHERESUBSTRING(@sort_order, number, 1) = '['),ordered_columns AS(SELECTx.column_name +CASEWHEN tokens.next_chunk LIKE '%asc%' THEN ' ASC'WHEN tokens.next_chunk LIKE '%desc%' THEN ' DESC'ELSE ''END AS column_name,ROW_NUMBER() OVER(PARTITION BYx.column_nameORDER BYtokens.number) AS r,tokens.numberFROM tokensJOIN(SELECT '[session_id]' AS column_nameUNION ALLSELECT '[physical_io]'UNION ALLSELECT '[reads]'UNION ALLSELECT '[physical_reads]'UNION ALLSELECT '[writes]'UNION ALLSELECT '[tempdb_allocations]'UNION ALLSELECT '[tempdb_current]'UNION ALLSELECT '[CPU]'UNION ALLSELECT '[context_switches]'UNION ALLSELECT '[used_memory]'UNION ALLSELECT '[physical_io_delta]'UNION ALLSELECT '[reads_delta]'UNION ALLSELECT '[physical_reads_delta]'UNION ALLSELECT '[writes_delta]'UNION ALLSELECT '[tempdb_allocations_delta]'UNION ALLSELECT '[tempdb_current_delta]'UNION ALLSELECT '[CPU_delta]'UNION ALLSELECT '[context_switches_delta]'UNION ALLSELECT '[used_memory_delta]'UNION ALLSELECT '[tasks]'UNION ALLSELECT '[tran_start_time]'UNION ALLSELECT '[open_tran_count]'UNION ALLSELECT '[blocking_session_id]'UNION ALLSELECT '[blocked_session_count]'UNION ALLSELECT '[percent_complete]'UNION ALLSELECT '[host_name]'UNION ALLSELECT '[login_name]'UNION ALLSELECT '[database_name]'UNION ALLSELECT '[start_time]'UNION ALLSELECT '[login_time]'UNION ALLSELECT '[program_name]') AS x ON x.column_name LIKE token ESCAPE '|')SELECT@sort_order = COALESCE(z.sort_order, '')FROM(SELECTSTUFF((SELECT',' + column_name as [text()]FROM ordered_columnsWHEREr = 1ORDER BYnumberFOR XMLPATH('')),1,1,'') AS sort_order) AS z;CREATE TABLE #sessions(recursion SMALLINT NOT NULL,session_id SMALLINT NOT NULL,request_id INT NOT NULL,session_number INT NOT NULL,elapsed_time INT NOT NULL,avg_elapsed_time INT NULL,physical_io BIGINT NULL,reads BIGINT NULL,physical_reads BIGINT NULL,writes BIGINT NULL,tempdb_allocations BIGINT NULL,tempdb_current BIGINT NULL,CPU INT NULL,thread_CPU_snapshot BIGINT NULL,context_switches BIGINT NULL,used_memory BIGINT NOT NULL, tasks SMALLINT NULL,status VARCHAR(30) NOT NULL,wait_info NVARCHAR(4000) NULL,locks XML NULL,transaction_id BIGINT NULL,tran_start_time DATETIME NULL,tran_log_writes NVARCHAR(4000) NULL,open_tran_count SMALLINT NULL,sql_command XML NULL,sql_handle VARBINARY(64) NULL,statement_start_offset INT NULL,statement_end_offset INT NULL,sql_text XML NULL,plan_handle VARBINARY(64) NULL,query_plan XML NULL,blocking_session_id SMALLINT NULL,blocked_session_count SMALLINT NULL,percent_complete REAL NULL,host_name sysname NULL,login_name sysname NOT NULL,database_name sysname NULL,program_name sysname NULL,additional_info XML NULL,start_time DATETIME NOT NULL,login_time DATETIME NULL,last_request_start_time DATETIME NULL,PRIMARY KEY CLUSTERED (session_id, request_id, recursion) WITH (IGNORE_DUP_KEY = ON),UNIQUE NONCLUSTERED (transaction_id, session_id, request_id, recursion) WITH (IGNORE_DUP_KEY = ON));IF @return_schema = 0BEGIN;--Disable unnecessary autostats on the tableCREATE STATISTICS s_session_id ON #sessions (session_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_request_id ON #sessions (request_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_transaction_id ON #sessions (transaction_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_session_number ON #sessions (session_number)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_status ON #sessions (status)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_start_time ON #sessions (start_time)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_last_request_start_time ON #sessions (last_request_start_time)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_recursion ON #sessions (recursion)WITH SAMPLE 0 ROWS, NORECOMPUTE;DECLARE @recursion SMALLINT;SET @recursion = CASE @delta_intervalWHEN 0 THEN 1ELSE -1END;DECLARE @first_collection_ms_ticks BIGINT;DECLARE @last_collection_start DATETIME;DECLARE @sys_info BIT;SET @sys_info = ISNULL(CONVERT(BIT, SIGN(OBJECT_ID('sys.dm_os_sys_info'))), 0);--Used for the delta pullREDO:;IF @get_locks = 1 AND @recursion = 1AND @output_column_list LIKE '%|[locks|]%' ESCAPE '|'BEGIN;SELECTy.resource_type,y.database_name,y.object_id,y.file_id,y.page_type,y.hobt_id,y.allocation_unit_id,y.index_id,y.schema_id,y.principal_id,y.request_mode,y.request_status,y.session_id,y.resource_description,y.request_count,s.request_id,s.start_time,CONVERT(sysname, NULL) AS object_name,CONVERT(sysname, NULL) AS index_name,CONVERT(sysname, NULL) AS schema_name,CONVERT(sysname, NULL) AS principal_name,CONVERT(NVARCHAR(2048), NULL) AS query_errorINTO #locksFROM(SELECTsp.spid AS session_id,CASE sp.statusWHEN 'sleeping' THEN CONVERT(INT, 0)ELSE sp.request_idEND AS request_id,CASE sp.statusWHEN 'sleeping' THEN sp.last_batchELSE COALESCE(req.start_time, sp.last_batch)END AS start_time,sp.dbidFROM sys.sysprocesses AS spOUTER APPLY(SELECT TOP(1)CASEWHEN (sp.hostprocess > ''OR r.total_elapsed_time < 0) THENr.start_timeELSEDATEADD(ms, 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())), DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE()))END AS start_timeFROM sys.dm_exec_requests AS rWHEREr.session_id = sp.spidAND r.request_id = sp.request_id) AS reqWHERE--Process inclusive filter1 =CASEWHEN @filter <> '' THENCASE @filter_typeWHEN 'session' THENCASEWHENCONVERT(SMALLINT, @filter) = 0OR sp.spid = CONVERT(SMALLINT, @filter)THEN 1ELSE 0ENDWHEN 'program' THENCASEWHEN sp.program_name LIKE @filter THEN 1ELSE 0ENDWHEN 'login' THENCASEWHEN sp.loginame LIKE @filter THEN 1ELSE 0ENDWHEN 'host' THENCASEWHEN sp.hostname LIKE @filter THEN 1ELSE 0ENDWHEN 'database' THENCASEWHEN DB_NAME(sp.dbid) LIKE @filter THEN 1ELSE 0ENDELSE 0ENDELSE 1END--Process exclusive filterAND 0 =CASEWHEN @not_filter <> '' THENCASE @not_filter_typeWHEN 'session' THENCASEWHEN sp.spid = CONVERT(SMALLINT, @not_filter) THEN 1ELSE 0ENDWHEN 'program' THENCASEWHEN sp.program_name LIKE @not_filter THEN 1ELSE 0ENDWHEN 'login' THENCASEWHEN sp.loginame LIKE @not_filter THEN 1ELSE 0ENDWHEN 'host' THENCASEWHEN sp.hostname LIKE @not_filter THEN 1ELSE 0ENDWHEN 'database' THENCASEWHEN DB_NAME(sp.dbid) LIKE @not_filter THEN 1ELSE 0ENDELSE 0ENDELSE 0ENDAND (@show_own_spid = 1OR sp.spid <> @@SPID)AND (@show_system_spids = 1OR sp.hostprocess > '')AND sp.ecid = 0) AS sINNER HASH JOIN(SELECTx.resource_type,x.database_name,x.object_id,x.file_id,CASEWHEN x.page_no = 1 OR x.page_no % 8088 = 0 THEN 'PFS'WHEN x.page_no = 2 OR x.page_no % 511232 = 0 THEN 'GAM'WHEN x.page_no = 3 OR (x.page_no - 1) % 511232 = 0 THEN 'SGAM'WHEN x.page_no = 6 OR (x.page_no - 6) % 511232 = 0 THEN 'DCM'WHEN x.page_no = 7 OR (x.page_no - 7) % 511232 = 0 THEN 'BCM'WHEN x.page_no IS NOT NULL THEN '*'ELSE NULLEND AS page_type,x.hobt_id,x.allocation_unit_id,x.index_id,x.schema_id,x.principal_id,x.request_mode,x.request_status,x.session_id,x.request_id,CASEWHEN COALESCE(x.object_id, x.file_id, x.hobt_id, x.allocation_unit_id, x.index_id, x.schema_id, x.principal_id) IS NULL THEN NULLIF(resource_description, '')ELSE NULLEND AS resource_description,COUNT(*) AS request_countFROM(SELECTtl.resource_type +CASEWHEN tl.resource_subtype = '' THEN ''ELSE '.' + tl.resource_subtypeEND AS resource_type,COALESCE(DB_NAME(tl.resource_database_id), N'(null)') AS database_name,CONVERT(INT,CASEWHEN tl.resource_type = 'OBJECT' THEN tl.resource_associated_entity_idWHEN tl.resource_description LIKE '%object_id = %' THEN(SUBSTRING(tl.resource_description, (CHARINDEX('object_id = ', tl.resource_description) + 12), COALESCE(NULLIF(CHARINDEX(',', tl.resource_description, CHARINDEX('object_id = ', tl.resource_description) + 12),0), DATALENGTH(tl.resource_description)+1) - (CHARINDEX('object_id = ', tl.resource_description) + 12)))ELSE NULLEND) AS object_id,CONVERT(INT,CASE WHEN tl.resource_type = 'FILE' THEN CONVERT(INT, tl.resource_description)WHEN tl.resource_type IN ('PAGE', 'EXTENT', 'RID') THEN LEFT(tl.resource_description, CHARINDEX(':', tl.resource_description)-1)ELSE NULLEND) AS file_id,CONVERT(INT,CASEWHEN tl.resource_type IN ('PAGE', 'EXTENT', 'RID') THEN SUBSTRING(tl.resource_description, CHARINDEX(':', tl.resource_description) + 1, COALESCE(NULLIF(CHARINDEX(':', tl.resource_description, CHARINDEX(':', tl.resource_description) + 1), 0), DATALENGTH(tl.resource_description)+1) - (CHARINDEX(':', tl.resource_description) + 1))ELSE NULLEND) AS page_no,CASEWHEN tl.resource_type IN ('PAGE', 'KEY', 'RID', 'HOBT') THEN tl.resource_associated_entity_idELSE NULLEND AS hobt_id,CASEWHEN tl.resource_type = 'ALLOCATION_UNIT' THEN tl.resource_associated_entity_idELSE NULLEND AS allocation_unit_id,CONVERT(INT,CASEWHEN/*TODO: Deal with server principals*/ tl.resource_subtype <> 'SERVER_PRINCIPAL' AND tl.resource_description LIKE '%index_id or stats_id = %' THEN(SUBSTRING(tl.resource_description, (CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23), COALESCE(NULLIF(CHARINDEX(',', tl.resource_description, CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23), 0), DATALENGTH(tl.resource_description)+1) - (CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23)))ELSE NULLEND ) AS index_id,CONVERT(INT,CASEWHEN tl.resource_description LIKE '%schema_id = %' THEN(SUBSTRING(tl.resource_description, (CHARINDEX('schema_id = ', tl.resource_description) + 12), COALESCE(NULLIF(CHARINDEX(',', tl.resource_description, CHARINDEX('schema_id = ', tl.resource_description) + 12), 0), DATALENGTH(tl.resource_description)+1) - (CHARINDEX('schema_id = ', tl.resource_description) + 12)))ELSE NULLEND ) AS schema_id,CONVERT(INT,CASEWHEN tl.resource_description LIKE '%principal_id = %' THEN(SUBSTRING(tl.resource_description, (CHARINDEX('principal_id = ', tl.resource_description) + 15), COALESCE(NULLIF(CHARINDEX(',', tl.resource_description, CHARINDEX('principal_id = ', tl.resource_description) + 15), 0), DATALENGTH(tl.resource_description)+1) - (CHARINDEX('principal_id = ', tl.resource_description) + 15)))ELSE NULLEND) AS principal_id,tl.request_mode,tl.request_status,tl.request_session_id AS session_id,tl.request_request_id AS request_id,/*TODO: Applocks, other resource_descriptions*/RTRIM(tl.resource_description) AS resource_description,tl.resource_associated_entity_id/*********************************************/FROM (SELECT request_session_id,CONVERT(VARCHAR(120), resource_type) COLLATE Latin1_General_Bin2 AS resource_type,CONVERT(VARCHAR(120), resource_subtype) COLLATE Latin1_General_Bin2 AS resource_subtype,resource_database_id,CONVERT(VARCHAR(512), resource_description) COLLATE Latin1_General_Bin2 AS resource_description,resource_associated_entity_id,CONVERT(VARCHAR(120), request_mode) COLLATE Latin1_General_Bin2 AS request_mode,CONVERT(VARCHAR(120), request_status) COLLATE Latin1_General_Bin2 AS request_status,request_request_idFROM sys.dm_tran_locks) AS tl) AS xGROUP BYx.resource_type,x.database_name,x.object_id,x.file_id,CASEWHEN x.page_no = 1 OR x.page_no % 8088 = 0 THEN 'PFS'WHEN x.page_no = 2 OR x.page_no % 511232 = 0 THEN 'GAM'WHEN x.page_no = 3 OR (x.page_no - 1) % 511232 = 0 THEN 'SGAM'WHEN x.page_no = 6 OR (x.page_no - 6) % 511232 = 0 THEN 'DCM'WHEN x.page_no = 7 OR (x.page_no - 7) % 511232 = 0 THEN 'BCM'WHEN x.page_no IS NOT NULL THEN '*'ELSE NULLEND,x.hobt_id,x.allocation_unit_id,x.index_id,x.schema_id,x.principal_id,x.request_mode,x.request_status,x.session_id,x.request_id,CASEWHEN COALESCE(x.object_id, x.file_id, x.hobt_id, x.allocation_unit_id, x.index_id, x.schema_id, x.principal_id) IS NULL THEN NULLIF(resource_description, '')ELSE NULLEND) AS y ONy.session_id = s.session_idAND y.request_id = s.request_idOPTION (HASH GROUP);--Disable unnecessary autostats on the tableCREATE STATISTICS s_database_name ON #locks (database_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_object_id ON #locks (object_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_hobt_id ON #locks (hobt_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_allocation_unit_id ON #locks (allocation_unit_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_index_id ON #locks (index_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_schema_id ON #locks (schema_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_principal_id ON #locks (principal_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_request_id ON #locks (request_id)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_start_time ON #locks (start_time)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_resource_type ON #locks (resource_type)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_object_name ON #locks (object_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_schema_name ON #locks (schema_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_page_type ON #locks (page_type)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_request_mode ON #locks (request_mode)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_request_status ON #locks (request_status)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_resource_description ON #locks (resource_description)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_index_name ON #locks (index_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_principal_name ON #locks (principal_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;END;DECLARE @sql VARCHAR(MAX), @sql_n NVARCHAR(MAX);SET @sql = CONVERT(VARCHAR(MAX), '') +'DECLARE @blocker BIT;SET @blocker = 0;DECLARE @i INT;SET @i = 2147483647;DECLARE @sessions TABLE(session_id SMALLINT NOT NULL,request_id INT NOT NULL,login_time DATETIME,last_request_end_time DATETIME,status VARCHAR(30),statement_start_offset INT,statement_end_offset INT,sql_handle BINARY(20),host_name NVARCHAR(128),login_name NVARCHAR(128),program_name NVARCHAR(128),database_id SMALLINT,memory_usage INT,open_tran_count SMALLINT, ' +CASEWHEN (@get_task_info <> 0 OR @find_block_leaders = 1 ) THEN'wait_type NVARCHAR(32),wait_resource NVARCHAR(256),wait_time BIGINT, 'ELSE ''END +'blocked SMALLINT,is_user_process BIT,cmd VARCHAR(32),PRIMARY KEY CLUSTERED (session_id, request_id) WITH (IGNORE_DUP_KEY = ON));DECLARE @blockers TABLE(session_id INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON));BLOCKERS:;INSERT @sessions(session_id,request_id,login_time,last_request_end_time,status,statement_start_offset,statement_end_offset,sql_handle,host_name,login_name,program_name,database_id,memory_usage,open_tran_count, ' +CASEWHEN (@get_task_info <> 0OR @find_block_leaders = 1 ) THEN'wait_type,wait_resource,wait_time, 'ELSE''END +'blocked,is_user_process,cmd )SELECT TOP(@i)spy.session_id,spy.request_id,spy.login_time,spy.last_request_end_time,spy.status,spy.statement_start_offset,spy.statement_end_offset,spy.sql_handle,spy.host_name,spy.login_name,spy.program_name,spy.database_id,spy.memory_usage,spy.open_tran_count,' +CASEWHEN (@get_task_info <> 0  OR @find_block_leaders = 1 ) THEN'spy.wait_type,CASEWHENspy.wait_type LIKE N''PAGE%LATCH_%''OR spy.wait_type = N''CXPACKET''OR spy.wait_type LIKE N''LATCH[_]%''OR spy.wait_type = N''OLEDB'' THENspy.wait_resourceELSENULLEND AS wait_resource,spy.wait_time, 'ELSE''END +'spy.blocked,spy.is_user_process,spy.cmdFROM(SELECT TOP(@i)spx.*, ' +CASEWHEN (@get_task_info <> 0 OR @find_block_leaders = 1 ) THEN'ROW_NUMBER() OVER(PARTITION BYspx.session_id,spx.request_idORDER BYCASEWHEN spx.wait_type LIKE N''LCK[_]%'' THEN 1ELSE99END,spx.wait_time DESC,spx.blocked DESC) AS r 'ELSE '1 AS r 'END +'FROM(SELECT TOP(@i)sp0.session_id,sp0.request_id,sp0.login_time,sp0.last_request_end_time,LOWER(sp0.status) AS status,CASEWHEN sp0.cmd = ''CREATE INDEX'' THEN0ELSEsp0.stmt_startEND AS statement_start_offset,CASEWHEN sp0.cmd = N''CREATE INDEX'' THEN-1ELSECOALESCE(NULLIF(sp0.stmt_end, 0), -1)END AS statement_end_offset,sp0.sql_handle,sp0.host_name,sp0.login_name,sp0.program_name,sp0.database_id,sp0.memory_usage,sp0.open_tran_count, ' +CASEWHEN (@get_task_info <> 0 OR @find_block_leaders = 1 ) THEN'CASEWHEN sp0.wait_time > 0 AND sp0.wait_type <> N''CXPACKET'' THENsp0.wait_typeELSENULLEND AS wait_type,CASEWHEN sp0.wait_time > 0 AND sp0.wait_type <> N''CXPACKET'' THEN sp0.wait_resourceELSENULLEND AS wait_resource,CASEWHEN sp0.wait_type <> N''CXPACKET'' THENsp0.wait_timeELSE0END AS wait_time, 'ELSE''END +'sp0.blocked,sp0.is_user_process,sp0.cmdFROM(SELECT TOP(@i)sp1.session_id,sp1.request_id,sp1.login_time,sp1.last_request_end_time,sp1.status,sp1.cmd,sp1.stmt_start,sp1.stmt_end,MAX(NULLIF(sp1.sql_handle, 0x00)) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS sql_handle,sp1.host_name,MAX(sp1.login_name) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS login_name,sp1.program_name,sp1.database_id,MAX(sp1.memory_usage)  OVER (PARTITION BY sp1.session_id, sp1.request_id) AS memory_usage,MAX(sp1.open_tran_count)  OVER (PARTITION BY sp1.session_id, sp1.request_id) AS open_tran_count,sp1.wait_type,sp1.wait_resource,sp1.wait_time,sp1.blocked,sp1.hostprocess,sp1.is_user_processFROM(SELECT TOP(@i)sp2.spid AS session_id,CASE sp2.statusWHEN ''sleeping'' THENCONVERT(INT, 0)ELSEsp2.request_idEND AS request_id,MAX(sp2.login_time) AS login_time,MAX(sp2.last_batch) AS last_request_end_time,MAX(CONVERT(VARCHAR(30), RTRIM(sp2.status)) COLLATE Latin1_General_Bin2) AS status,MAX(CONVERT(VARCHAR(32), RTRIM(sp2.cmd)) COLLATE Latin1_General_Bin2) AS cmd,MAX(sp2.stmt_start) AS stmt_start,MAX(sp2.stmt_end) AS stmt_end,MAX(sp2.sql_handle) AS sql_handle,MAX(CONVERT(sysname, RTRIM(sp2.hostname)) COLLATE SQL_Latin1_General_CP1_CI_AS) AS host_name,MAX(CONVERT(sysname, RTRIM(sp2.loginame)) COLLATE SQL_Latin1_General_CP1_CI_AS) AS login_name,MAX(CASEWHEN blk.queue_id IS NOT NULL THENN''Service Brokerdatabase_id: '' + CONVERT(NVARCHAR, blk.database_id) +N'' queue_id: '' + CONVERT(NVARCHAR, blk.queue_id)ELSECONVERT(sysname,RTRIM(sp2.program_name))END COLLATE SQL_Latin1_General_CP1_CI_AS) AS program_name,MAX(sp2.dbid) AS database_id,MAX(sp2.memusage) AS memory_usage,MAX(sp2.open_tran) AS open_tran_count,RTRIM(sp2.lastwaittype) AS wait_type,RTRIM(sp2.waitresource) AS wait_resource,MAX(sp2.waittime) AS wait_time,COALESCE(NULLIF(sp2.blocked, sp2.spid), 0) AS blocked,MAX(CASEWHEN blk.session_id = sp2.spid THEN''blocker''ELSERTRIM(sp2.hostprocess)END) AS hostprocess,CONVERT(BIT,MAX(CASEWHEN sp2.hostprocess > '''' THEN1ELSE0END)) AS is_user_processFROM(SELECT TOP(@i)session_id,CONVERT(INT, NULL) AS queue_id,CONVERT(INT, NULL) AS database_idFROM @blockersUNION ALLSELECT TOP(@i)CONVERT(SMALLINT, 0),CONVERT(INT, NULL) AS queue_id,CONVERT(INT, NULL) AS database_idWHERE@blocker = 0UNION ALLSELECT TOP(@i)CONVERT(SMALLINT, spid),queue_id,database_idFROM sys.dm_broker_activated_tasksWHERE@blocker = 0) AS blkINNER JOIN sys.sysprocesses AS sp2 ONsp2.spid = blk.session_idOR(blk.session_id = 0AND @blocker = 0)' +CASE WHEN (@get_task_info = 0 AND @find_block_leaders = 0) THEN'WHEREsp2.ecid = 0 ' ELSE''END +'GROUP BYsp2.spid,CASE sp2.statusWHEN ''sleeping'' THENCONVERT(INT, 0)ELSEsp2.request_idEND,RTRIM(sp2.lastwaittype),RTRIM(sp2.waitresource),COALESCE(NULLIF(sp2.blocked, sp2.spid), 0)) AS sp1) AS sp0WHERE@blocker = 1OR(1=1 ' +--inclusive filterCASEWHEN @filter <> '' THENCASE @filter_typeWHEN 'session' THENCASEWHEN CONVERT(SMALLINT, @filter) <> 0 THEN'AND sp0.session_id = CONVERT(SMALLINT, @filter) 'ELSE''ENDWHEN 'program' THEN'AND sp0.program_name LIKE @filter 'WHEN 'login' THEN'AND sp0.login_name LIKE @filter 'WHEN 'host' THEN'AND sp0.host_name LIKE @filter 'WHEN 'database' THEN'AND DB_NAME(sp0.database_id) LIKE @filter 'ELSE''ENDELSE''END +--exclusive filterCASEWHEN @not_filter <> '' THENCASE @not_filter_typeWHEN 'session' THENCASEWHEN CONVERT(SMALLINT, @not_filter) <> 0 THEN'AND sp0.session_id <> CONVERT(SMALLINT, @not_filter) 'ELSE''ENDWHEN 'program' THEN'AND sp0.program_name NOT LIKE @not_filter 'WHEN 'login' THEN'AND sp0.login_name NOT LIKE @not_filter 'WHEN 'host' THEN'AND sp0.host_name NOT LIKE @not_filter 'WHEN 'database' THEN'AND DB_NAME(sp0.database_id) NOT LIKE @not_filter 'ELSE''ENDELSE''END +CASE @show_own_spidWHEN 1 THEN''ELSE'AND sp0.session_id <> @@spid 'END +CASE WHEN @show_system_spids = 0 THEN'AND sp0.hostprocess > '''' ' ELSE''END +CASE @show_sleeping_spidsWHEN 0 THEN'AND sp0.status <> ''sleeping'' 'WHEN 1 THEN'AND(sp0.status <> ''sleeping''OR sp0.open_tran_count > 0)'ELSE''END +')) AS spx) AS spyWHEREspy.r = 1; ' + CASE @recursionWHEN 1 THEN 'IF @@ROWCOUNT > 0BEGIN;INSERT @blockers(session_id)SELECT TOP(@i)blockedFROM @sessionsWHERENULLIF(blocked, 0) IS NOT NULLEXCEPTSELECT TOP(@i)session_idFROM @sessions; ' +CASEWHEN(@get_task_info > 0OR @find_block_leaders = 1) THEN'IF @@ROWCOUNT > 0BEGIN;SET @blocker = 1;GOTO BLOCKERS;END; 'ELSE ''END +'END; 'ELSE ''END +'SELECT TOP(@i)@recursion AS recursion,x.session_id,x.request_id,DENSE_RANK() OVER(ORDER BYx.session_id) AS session_number,' +CASEWHEN @output_column_list LIKE '%|[dd hh:mm:ss.mss|]%' ESCAPE '|' THEN 'x.elapsed_time 'ELSE '0 'END + 'AS elapsed_time, ' +CASEWHEN(@output_column_list LIKE '%|[dd hh:mm:ss.mss (avg)|]%' ESCAPE '|' OR @output_column_list LIKE '%|[avg_elapsed_time|]%' ESCAPE '|')AND @recursion = 1THEN 'x.avg_elapsed_time / 1000 'ELSE 'NULL 'END + 'AS avg_elapsed_time, ' +CASEWHEN @output_column_list LIKE '%|[physical_io|]%' ESCAPE '|'OR @output_column_list LIKE '%|[physical_io_delta|]%' ESCAPE '|'THEN 'x.physical_io 'ELSE 'NULL 'END + 'AS physical_io, ' +CASEWHEN @output_column_list LIKE '%|[reads|]%' ESCAPE '|'OR @output_column_list LIKE '%|[reads_delta|]%' ESCAPE '|'THEN 'x.reads 'ELSE '0 'END + 'AS reads, ' +CASEWHEN @output_column_list LIKE '%|[physical_reads|]%' ESCAPE '|'OR @output_column_list LIKE '%|[physical_reads_delta|]%' ESCAPE '|'THEN 'x.physical_reads 'ELSE '0 'END + 'AS physical_reads, ' +CASEWHEN @output_column_list LIKE '%|[writes|]%' ESCAPE '|'OR @output_column_list LIKE '%|[writes_delta|]%' ESCAPE '|'THEN 'x.writes 'ELSE '0 'END + 'AS writes, ' +CASEWHEN @output_column_list LIKE '%|[tempdb_allocations|]%' ESCAPE '|'OR @output_column_list LIKE '%|[tempdb_allocations_delta|]%' ESCAPE '|'THEN 'x.tempdb_allocations 'ELSE '0 'END + 'AS tempdb_allocations, ' +CASEWHEN @output_column_list LIKE '%|[tempdb_current|]%' ESCAPE '|'OR @output_column_list LIKE '%|[tempdb_current_delta|]%' ESCAPE '|'THEN 'x.tempdb_current 'ELSE '0 'END + 'AS tempdb_current, ' +CASEWHEN @output_column_list LIKE '%|[CPU|]%' ESCAPE '|'OR @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'THEN'x.CPU 'ELSE'0 'END + 'AS CPU, ' +CASEWHEN @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'AND @get_task_info = 2AND @sys_info = 1THEN 'x.thread_CPU_snapshot 'ELSE '0 'END + 'AS thread_CPU_snapshot, ' +CASEWHEN @output_column_list LIKE '%|[context_switches|]%' ESCAPE '|'OR @output_column_list LIKE '%|[context_switches_delta|]%' ESCAPE '|'THEN 'x.context_switches 'ELSE 'NULL 'END + 'AS context_switches, ' +CASEWHEN @output_column_list LIKE '%|[used_memory|]%' ESCAPE '|'OR @output_column_list LIKE '%|[used_memory_delta|]%' ESCAPE '|'THEN 'x.used_memory 'ELSE '0 'END + 'AS used_memory, ' +CASEWHEN @output_column_list LIKE '%|[tasks|]%' ESCAPE '|'AND @recursion = 1THEN 'x.tasks 'ELSE 'NULL 'END + 'AS tasks, ' +CASEWHEN (@output_column_list LIKE '%|[status|]%' ESCAPE '|' OR @output_column_list LIKE '%|[sql_command|]%' ESCAPE '|')AND @recursion = 1THEN 'x.status 'ELSE ''''' 'END + 'AS status, ' +CASEWHEN @output_column_list LIKE '%|[wait_info|]%' ESCAPE '|' AND @recursion = 1THEN CASE @get_task_infoWHEN 2 THEN'COALESCE(x.task_wait_info, x.sys_wait_info) 'ELSE'x.sys_wait_info 'ENDELSE 'NULL 'END + 'AS wait_info, ' +CASEWHEN (@output_column_list LIKE '%|[tran_start_time|]%' ESCAPE '|' OR @output_column_list LIKE '%|[tran_log_writes|]%' ESCAPE '|' )AND @recursion = 1THEN 'x.transaction_id 'ELSE 'NULL 'END + 'AS transaction_id, ' +CASEWHEN @output_column_list LIKE '%|[open_tran_count|]%' ESCAPE '|' AND @recursion = 1THEN 'x.open_tran_count 'ELSE 'NULL 'END + 'AS open_tran_count, ' +CASEWHEN @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|' AND @recursion = 1THEN 'x.sql_handle 'ELSE 'NULL 'END + 'AS sql_handle, ' +CASEWHEN (@output_column_list LIKE '%|[sql_text|]%' ESCAPE '|' OR @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|' )AND @recursion = 1THEN 'x.statement_start_offset 'ELSE 'NULL 'END + 'AS statement_start_offset, ' +CASEWHEN (@output_column_list LIKE '%|[sql_text|]%' ESCAPE '|' OR @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|' )AND @recursion = 1THEN 'x.statement_end_offset 'ELSE 'NULL 'END + 'AS statement_end_offset, ' +'NULL AS sql_text, ' +CASEWHEN @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|' AND @recursion = 1THEN 'x.plan_handle 'ELSE 'NULL 'END + 'AS plan_handle, ' +CASEWHEN @output_column_list LIKE '%|[blocking_session_id|]%' ESCAPE '|' AND @recursion = 1THEN 'NULLIF(x.blocking_session_id, 0) 'ELSE 'NULL 'END + 'AS blocking_session_id, ' +CASEWHEN @output_column_list LIKE '%|[percent_complete|]%' ESCAPE '|'AND @recursion = 1THEN 'x.percent_complete 'ELSE 'NULL 'END + 'AS percent_complete, ' +CASEWHEN @output_column_list LIKE '%|[host_name|]%' ESCAPE '|' AND @recursion = 1THEN 'x.host_name 'ELSE ''''' 'END + 'AS host_name, ' +CASEWHEN @output_column_list LIKE '%|[login_name|]%' ESCAPE '|' AND @recursion = 1THEN 'x.login_name 'ELSE ''''' 'END + 'AS login_name, ' +CASEWHEN @output_column_list LIKE '%|[database_name|]%' ESCAPE '|' AND @recursion = 1THEN 'DB_NAME(x.database_id) 'ELSE 'NULL 'END + 'AS database_name, ' +CASEWHEN @output_column_list LIKE '%|[program_name|]%' ESCAPE '|' AND @recursion = 1THEN 'x.program_name 'ELSE ''''' 'END + 'AS program_name, ' +CASEWHEN@output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'AND @recursion = 1THEN'(SELECT TOP(@i)x.text_size,x.language,x.date_format,x.date_first,CASE x.quoted_identifierWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS quoted_identifier,CASE x.arithabortWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS arithabort,CASE x.ansi_null_dflt_onWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS ansi_null_dflt_on,CASE x.ansi_defaultsWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS ansi_defaults,CASE x.ansi_warningsWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS ansi_warnings,CASE x.ansi_paddingWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS ansi_padding,CASE ansi_nullsWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS ansi_nulls,CASE x.concat_null_yields_nullWHEN 0 THEN ''OFF''WHEN 1 THEN ''ON''END AS concat_null_yields_null,CASE x.transaction_isolation_levelWHEN 0 THEN ''Unspecified''WHEN 1 THEN ''ReadUncomitted''WHEN 2 THEN ''ReadCommitted''WHEN 3 THEN ''Repeatable''WHEN 4 THEN ''Serializable''WHEN 5 THEN ''Snapshot''END AS transaction_isolation_level,x.lock_timeout,x.deadlock_priority,x.row_count,x.command_type, ' +CASEWHEN OBJECT_ID('master.dbo.fn_varbintohexstr') IS NOT NULL THEN'master.dbo.fn_varbintohexstr(x.sql_handle) AS sql_handle,master.dbo.fn_varbintohexstr(x.plan_handle) AS plan_handle,'ELSE'CONVERT(VARCHAR(256), x.sql_handle, 1) AS sql_handle,CONVERT(VARCHAR(256), x.plan_handle, 1) AS plan_handle,'END +'' +CASEWHEN @output_column_list LIKE '%|[program_name|]%' ESCAPE '|' THEN'(SELECT TOP(1)CONVERT(uniqueidentifier, CONVERT(XML, '''').value(''xs:hexBinary( substring(sql:column("agent_info.job_id_string"), 0) )'', ''binary(16)'')) AS job_id,agent_info.step_id,(SELECT TOP(1)NULLFOR XMLPATH(''job_name''),TYPE),(SELECT TOP(1)NULLFOR XMLPATH(''step_name''),TYPE)FROM(SELECT TOP(1)SUBSTRING(x.program_name, CHARINDEX(''0x'', x.program_name) + 2, 32) AS job_id_string,SUBSTRING(x.program_name, CHARINDEX('': Step '', x.program_name) + 7, CHARINDEX('')'', x.program_name, CHARINDEX('': Step '', x.program_name)) - (CHARINDEX('': Step '', x.program_name) + 7)) AS step_idWHEREx.program_name LIKE N''SQLAgent - TSQL JobStep (Job 0x%'') AS agent_infoFOR XMLPATH(''agent_job_info''),TYPE),'ELSE ''END +CASEWHEN @get_task_info = 2 THEN'CONVERT(XML, x.block_info) AS block_info, 'ELSE''END + 'x.host_process_id,x.group_idFOR XMLPATH(''additional_info''),TYPE) 'ELSE'NULL 'END + 'AS additional_info, x.start_time, ' +CASEWHEN@output_column_list LIKE '%|[login_time|]%' ESCAPE '|'AND @recursion = 1THEN'x.login_time 'ELSE 'NULL 'END + 'AS login_time, x.last_request_start_timeFROM(SELECT TOP(@i)y.*,CASEWHEN DATEDIFF(hour, y.start_time, GETDATE()) > 576 THENDATEDIFF(second, GETDATE(), y.start_time)ELSE DATEDIFF(ms, y.start_time, GETDATE())END AS elapsed_time,COALESCE(tempdb_info.tempdb_allocations, 0) AS tempdb_allocations,COALESCE(CASEWHEN tempdb_info.tempdb_current < 0 THEN 0ELSE tempdb_info.tempdb_currentEND,0) AS tempdb_current, ' +CASEWHEN (@get_task_info <> 0OR @find_block_leaders = 1) THEN'N''('' + CONVERT(NVARCHAR, y.wait_duration_ms) + N''ms)'' +y.wait_type +CASEWHEN y.wait_type LIKE N''PAGE%LATCH_%'' THENN'':'' +COALESCE(DB_NAME(CONVERT(INT, LEFT(y.resource_description, CHARINDEX(N'':'', y.resource_description) - 1))), N''(null)'') +N'':'' +SUBSTRING(y.resource_description, CHARINDEX(N'':'', y.resource_description) + 1, LEN(y.resource_description) - CHARINDEX(N'':'', REVERSE(y.resource_description)) - CHARINDEX(N'':'', y.resource_description)) +N''('' +CASEWHENCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 1 ORCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) % 8088 = 0THEN N''PFS''WHENCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 2 ORCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) % 511232 = 0THEN N''GAM''WHENCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 3 OR(CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 1) % 511232 = 0THENN''SGAM''WHENCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 6 OR(CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 6) % 511232 = 0 THEN N''DCM''WHENCONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 7 OR(CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 7) % 511232 = 0 THEN N''BCM''ELSE N''*''END +N'')''WHEN y.wait_type = N''CXPACKET'' THENN'':'' + SUBSTRING(y.resource_description, CHARINDEX(N''nodeId'', y.resource_description) + 7, 4)WHEN y.wait_type LIKE N''LATCH[_]%'' THENN'' ['' + LEFT(y.resource_description, COALESCE(NULLIF(CHARINDEX(N'' '', y.resource_description), 0), LEN(y.resource_description) + 1) - 1) + N'']''WHENy.wait_type = N''OLEDB''AND y.resource_description LIKE N''%(SPID=%)'' THENN''['' + LEFT(y.resource_description, CHARINDEX(N''(SPID='', y.resource_description) - 2) +N'':'' + SUBSTRING(y.resource_description, CHARINDEX(N''(SPID='', y.resource_description) + 6, CHARINDEX(N'')'', y.resource_description, (CHARINDEX(N''(SPID='', y.resource_description) + 6)) - (CHARINDEX(N''(SPID='', y.resource_description) + 6)) + '']''ELSEN''''END COLLATE Latin1_General_Bin2 AS sys_wait_info, 'ELSE''END +CASEWHEN @get_task_info = 2 THEN'tasks.physical_io,tasks.context_switches,tasks.tasks,tasks.block_info,tasks.wait_info AS task_wait_info,tasks.thread_CPU_snapshot,'ELSE'' END +CASE WHEN NOT (@get_avg_time = 1 AND @recursion = 1) THEN'CONVERT(INT, NULL) 'ELSE 'qs.total_elapsed_time / qs.execution_count 'END + 'AS avg_elapsed_time FROM(SELECT TOP(@i)sp.session_id,sp.request_id,COALESCE(r.logical_reads, s.logical_reads) AS reads,COALESCE(r.reads, s.reads) AS physical_reads,COALESCE(r.writes, s.writes) AS writes,COALESCE(r.CPU_time, s.CPU_time) AS CPU,sp.memory_usage + COALESCE(r.granted_query_memory, 0) AS used_memory,LOWER(sp.status) AS status,COALESCE(r.sql_handle, sp.sql_handle) AS sql_handle,COALESCE(r.statement_start_offset, sp.statement_start_offset) AS statement_start_offset,COALESCE(r.statement_end_offset, sp.statement_end_offset) AS statement_end_offset,' +CASEWHEN (@get_task_info <> 0OR @find_block_leaders = 1 ) THEN'sp.wait_type COLLATE Latin1_General_Bin2 AS wait_type,sp.wait_resource COLLATE Latin1_General_Bin2 AS resource_description,sp.wait_time AS wait_duration_ms, 'ELSE''END +'NULLIF(sp.blocked, 0) AS blocking_session_id,r.plan_handle,NULLIF(r.percent_complete, 0) AS percent_complete,sp.host_name,sp.login_name,sp.program_name,s.host_process_id,COALESCE(r.text_size, s.text_size) AS text_size,COALESCE(r.language, s.language) AS language,COALESCE(r.date_format, s.date_format) AS date_format,COALESCE(r.date_first, s.date_first) AS date_first,COALESCE(r.quoted_identifier, s.quoted_identifier) AS quoted_identifier,COALESCE(r.arithabort, s.arithabort) AS arithabort,COALESCE(r.ansi_null_dflt_on, s.ansi_null_dflt_on) AS ansi_null_dflt_on,COALESCE(r.ansi_defaults, s.ansi_defaults) AS ansi_defaults,COALESCE(r.ansi_warnings, s.ansi_warnings) AS ansi_warnings,COALESCE(r.ansi_padding, s.ansi_padding) AS ansi_padding,COALESCE(r.ansi_nulls, s.ansi_nulls) AS ansi_nulls,COALESCE(r.concat_null_yields_null, s.concat_null_yields_null) AS concat_null_yields_null,COALESCE(r.transaction_isolation_level, s.transaction_isolation_level) AS transaction_isolation_level,COALESCE(r.lock_timeout, s.lock_timeout) AS lock_timeout,COALESCE(r.deadlock_priority, s.deadlock_priority) AS deadlock_priority,COALESCE(r.row_count, s.row_count) AS row_count,COALESCE(r.command, sp.cmd) AS command_type,COALESCE(CASEWHEN(s.is_user_process = 0AND r.total_elapsed_time >= 0) THENDATEADD(ms,1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE()))END,NULLIF(COALESCE(r.start_time, sp.last_request_end_time), CONVERT(DATETIME, ''19000101'', 112)),sp.login_time) AS start_time,sp.login_time,CASEWHEN s.is_user_process = 1 THENs.last_request_start_timeELSECOALESCE(DATEADD(ms,1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),s.last_request_start_time)END AS last_request_start_time,r.transaction_id,sp.database_id,sp.open_tran_count,' +CASEWHEN EXISTS(SELECT*FROM sys.all_columns AS acWHEREac.object_id = OBJECT_ID('sys.dm_exec_sessions')AND ac.name = 'group_id')THEN 's.group_id'ELSE 'CONVERT(INT, NULL) AS group_id'END + 'FROM @sessions AS spLEFT OUTER LOOP JOIN sys.dm_exec_sessions AS s ONs.session_id = sp.session_idAND s.login_time = sp.login_timeLEFT OUTER LOOP JOIN sys.dm_exec_requests AS r ONsp.status <> ''sleeping''AND r.session_id = sp.session_idAND r.request_id = sp.request_idAND((s.is_user_process = 0AND sp.is_user_process = 0)OR(r.start_time = s.last_request_start_timeAND s.last_request_end_time <= sp.last_request_end_time))) AS y' + CASE WHEN @get_task_info = 2 THENCONVERT(VARCHAR(MAX), '') +'LEFT OUTER HASH JOIN(SELECT TOP(@i)task_nodes.task_node.value(''(session_id/text())[1]'', ''SMALLINT'') AS session_id,task_nodes.task_node.value(''(request_id/text())[1]'', ''INT'') AS request_id,task_nodes.task_node.value(''(physical_io/text())[1]'', ''BIGINT'') AS physical_io,task_nodes.task_node.value(''(context_switches/text())[1]'', ''BIGINT'') AS context_switches,task_nodes.task_node.value(''(tasks/text())[1]'', ''INT'') AS tasks,task_nodes.task_node.value(''(block_info/text())[1]'', ''NVARCHAR(4000)'') AS block_info,task_nodes.task_node.value(''(waits/text())[1]'', ''NVARCHAR(4000)'') AS wait_info,task_nodes.task_node.value(''(thread_CPU_snapshot/text())[1]'', ''BIGINT'') AS thread_CPU_snapshotFROM(SELECT TOP(@i)CONVERT(XML,REPLACE(CONVERT(NVARCHAR(MAX), tasks_raw.task_xml_raw) COLLATE Latin1_General_Bin2,N''</waits></tasks><tasks><waits>'',N'', '')) AS task_xmlFROM(SELECT TOP(@i)CASE waits.rWHEN 1 THENwaits.session_idELSENULLEND AS [session_id],CASE waits.rWHEN 1 THENwaits.request_idELSENULLEND AS [request_id],                                           CASE waits.rWHEN 1 THENwaits.physical_ioELSENULLEND AS [physical_io],CASE waits.rWHEN 1 THENwaits.context_switchesELSENULLEND AS [context_switches],CASE waits.rWHEN 1 THENwaits.thread_CPU_snapshotELSENULLEND AS [thread_CPU_snapshot],CASE waits.rWHEN 1 THENwaits.tasksELSENULLEND AS [tasks],CASE waits.rWHEN 1 THENwaits.block_infoELSENULLEND AS [block_info],REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(MAX),N''('' +CONVERT(NVARCHAR, num_waits) + N''x: '' +CASE num_waitsWHEN 1 THENCONVERT(NVARCHAR, min_wait_time) + N''ms''WHEN 2 THENCASEWHEN min_wait_time <> max_wait_time THENCONVERT(NVARCHAR, min_wait_time) + N''/'' + CONVERT(NVARCHAR, max_wait_time) + N''ms''ELSECONVERT(NVARCHAR, max_wait_time) + N''ms''ENDELSECASEWHEN min_wait_time <> max_wait_time THENCONVERT(NVARCHAR, min_wait_time) + N''/'' + CONVERT(NVARCHAR, avg_wait_time) + N''/'' + CONVERT(NVARCHAR, max_wait_time) + N''ms''ELSE CONVERT(NVARCHAR, max_wait_time) + N''ms''ENDEND +N'')'' + wait_type COLLATE Latin1_General_Bin2),NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),NCHAR(0),N'''') AS [waits]FROM(SELECT TOP(@i)w1.*,ROW_NUMBER() OVER(PARTITION BYw1.session_id,w1.request_idORDER BYw1.block_info DESC,w1.num_waits DESC,w1.wait_type) AS rFROM(SELECT TOP(@i)task_info.session_id,task_info.request_id,task_info.physical_io,task_info.context_switches,task_info.thread_CPU_snapshot,task_info.num_tasks AS tasks,CASEWHEN task_info.runnable_time IS NOT NULL THEN''RUNNABLE''ELSEwt2.wait_typeEND AS wait_type,NULLIF(COUNT(COALESCE(task_info.runnable_time, wt2.waiting_task_address)), 0) AS num_waits,MIN(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS min_wait_time,AVG(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS avg_wait_time,MAX(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS max_wait_time,MAX(wt2.block_info) AS block_infoFROM(SELECT TOP(@i)t.session_id,t.request_id,SUM(CONVERT(BIGINT, t.pending_io_count)) OVER (PARTITION BY t.session_id, t.request_id) AS physical_io,SUM(CONVERT(BIGINT, t.context_switches_count)) OVER (PARTITION BY t.session_id, t.request_id) AS context_switches, ' +CASEWHEN @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'AND @sys_info = 1THEN'SUM(tr.usermode_time + tr.kernel_time) OVER (PARTITION BY t.session_id, t.request_id) 'ELSE'CONVERT(BIGINT, NULL) 'END + ' AS thread_CPU_snapshot, COUNT(*) OVER (PARTITION BY t.session_id, t.request_id) AS num_tasks,t.task_address,t.task_state,CASEWHENt.task_state = ''RUNNABLE''AND w.runnable_time > 0 THENw.runnable_timeELSENULLEND AS runnable_timeFROM sys.dm_os_tasks AS tCROSS APPLY(SELECT TOP(1)sp2.session_idFROM @sessions AS sp2WHEREsp2.session_id = t.session_idAND sp2.request_id = t.request_idAND sp2.status <> ''sleeping'') AS sp20LEFT OUTER HASH JOIN( ' +CASEWHEN @sys_info = 1 THEN'SELECT TOP(@i)(SELECT TOP(@i)ms_ticksFROM sys.dm_os_sys_info) -w0.wait_resumed_ms_ticks AS runnable_time,w0.worker_address,w0.thread_address,w0.task_bound_ms_ticksFROM sys.dm_os_workers AS w0WHEREw0.state = ''RUNNABLE''OR @first_collection_ms_ticks >= w0.task_bound_ms_ticks'ELSE'SELECTCONVERT(BIGINT, NULL) AS runnable_time,CONVERT(VARBINARY(8), NULL) AS worker_address,CONVERT(VARBINARY(8), NULL) AS thread_address,CONVERT(BIGINT, NULL) AS task_bound_ms_ticksWHERE1 = 0'END +') AS w ONw.worker_address = t.worker_address ' +CASEWHEN@output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'AND @sys_info = 1THEN'LEFT OUTER HASH JOIN sys.dm_os_threads AS tr ONtr.thread_address = w.thread_addressAND @first_collection_ms_ticks >= w.task_bound_ms_ticks'ELSE''END +') AS task_infoLEFT OUTER HASH JOIN(SELECT TOP(@i)wt1.wait_type,wt1.waiting_task_address,MAX(wt1.wait_duration_ms) AS wait_duration_ms,MAX(wt1.block_info) AS block_infoFROM(SELECT DISTINCT TOP(@i)wt.wait_type +CASEWHEN wt.wait_type LIKE N''PAGE%LATCH_%'' THEN'':'' +COALESCE(DB_NAME(CONVERT(INT, LEFT(wt.resource_description, CHARINDEX(N'':'', wt.resource_description) - 1))), N''(null)'') +N'':'' +SUBSTRING(wt.resource_description, CHARINDEX(N'':'', wt.resource_description) + 1, LEN(wt.resource_description) - CHARINDEX(N'':'', REVERSE(wt.resource_description)) - CHARINDEX(N'':'', wt.resource_description)) +N''('' +CASEWHENCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 1 ORCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) % 8088 = 0THEN N''PFS''WHENCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 2 ORCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) % 511232 = 0 THEN N''GAM''WHENCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 3 OR(CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 1) % 511232 = 0 THEN N''SGAM''WHENCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 6 OR(CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 6) % 511232 = 0 THEN N''DCM''WHENCONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 7 OR(CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 7) % 511232 = 0THEN N''BCM''ELSEN''*''END +N'')''WHEN wt.wait_type = N''CXPACKET'' THENN'':'' + SUBSTRING(wt.resource_description, CHARINDEX(N''nodeId'', wt.resource_description) + 7, 4)WHEN wt.wait_type LIKE N''LATCH[_]%'' THENN'' ['' + LEFT(wt.resource_description, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description), 0), LEN(wt.resource_description) + 1) - 1) + N'']''ELSE N''''END COLLATE Latin1_General_Bin2 AS wait_type,CASEWHEN(wt.blocking_session_id IS NOT NULLAND wt.wait_type LIKE N''LCK[_]%'') THEN(SELECT TOP(@i)x.lock_type,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(DB_NAME(CONVERT(INT,SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''dbid='', wt.resource_description), 0) + 5, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''dbid='', wt.resource_description) + 5), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''dbid='', wt.resource_description) - 5))),NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),NCHAR(0),N'''') AS database_name,CASE x.lock_typeWHEN N''objectlock'' THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''objid='', wt.resource_description), 0) + 6, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''objid='', wt.resource_description) + 6), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''objid='', wt.resource_description) - 6)ELSENULLEND AS object_id,CASE x.lock_typeWHEN N''filelock'' THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''fileid='', wt.resource_description), 0) + 7, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''fileid='', wt.resource_description) + 7), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''fileid='', wt.resource_description) - 7)ELSENULLEND AS file_id,CASEWHEN x.lock_type in (N''pagelock'', N''extentlock'', N''ridlock'') THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''associatedObjectId='', wt.resource_description), 0) + 19, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''associatedObjectId='', wt.resource_description) + 19), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''associatedObjectId='', wt.resource_description) - 19)WHEN x.lock_type in (N''keylock'', N''hobtlock'', N''allocunitlock'') THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''hobtid='', wt.resource_description), 0) + 7, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''hobtid='', wt.resource_description) + 7), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''hobtid='', wt.resource_description) - 7)ELSENULLEND AS hobt_id,CASE x.lock_typeWHEN N''applicationlock'' THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''hash='', wt.resource_description), 0) + 5, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''hash='', wt.resource_description) + 5), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''hash='', wt.resource_description) - 5)ELSENULLEND AS applock_hash,CASE x.lock_typeWHEN N''metadatalock'' THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''subresource='', wt.resource_description), 0) + 12, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''subresource='', wt.resource_description) + 12), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''subresource='', wt.resource_description) - 12)ELSENULLEND AS metadata_resource,CASE x.lock_typeWHEN N''metadatalock'' THENSUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''classid='', wt.resource_description), 0) + 8, COALESCE(NULLIF(CHARINDEX(N'' dbid='', wt.resource_description) - CHARINDEX(N''classid='', wt.resource_description), 0), LEN(wt.resource_description) + 1) - 8)ELSENULLEND AS metadata_class_idFROM(SELECT TOP(1)LEFT(wt.resource_description, CHARINDEX(N'' '', wt.resource_description) - 1) COLLATE Latin1_General_Bin2 AS lock_type) AS xFOR XMLPATH(''''))ELSE NULLEND AS block_info,wt.wait_duration_ms,wt.waiting_task_addressFROM(SELECT TOP(@i)wt0.wait_type COLLATE Latin1_General_Bin2 AS wait_type,wt0.resource_description COLLATE Latin1_General_Bin2 AS resource_description,wt0.wait_duration_ms,wt0.waiting_task_address,CASEWHEN wt0.blocking_session_id = p.blocked THENwt0.blocking_session_idELSENULLEND AS blocking_session_idFROM sys.dm_os_waiting_tasks AS wt0CROSS APPLY(SELECT TOP(1)s0.blockedFROM @sessions AS s0WHEREs0.session_id = wt0.session_idAND COALESCE(s0.wait_type, N'''') <> N''OLEDB''AND wt0.wait_type <> N''OLEDB'') AS p) AS wt) AS wt1GROUP BYwt1.wait_type,wt1.waiting_task_address) AS wt2 ONwt2.waiting_task_address = task_info.task_addressAND wt2.wait_duration_ms > 0AND task_info.runnable_time IS NULLGROUP BYtask_info.session_id,task_info.request_id,task_info.physical_io,task_info.context_switches,task_info.thread_CPU_snapshot,task_info.num_tasks,CASEWHEN task_info.runnable_time IS NOT NULL THEN''RUNNABLE''ELSEwt2.wait_typeEND) AS w1) AS waitsORDER BYwaits.session_id,waits.request_id,waits.rFOR XMLPATH(N''tasks''),TYPE) AS tasks_raw (task_xml_raw)) AS tasks_finalCROSS APPLY tasks_final.task_xml.nodes(N''/tasks'') AS task_nodes (task_node)WHEREtask_nodes.task_node.exist(N''session_id'') = 1) AS tasks ONtasks.session_id = y.session_idAND tasks.request_id = y.request_id 'ELSE''END +'LEFT OUTER HASH JOIN(SELECT TOP(@i)t_info.session_id,COALESCE(t_info.request_id, -1) AS request_id,SUM(t_info.tempdb_allocations) AS tempdb_allocations,SUM(t_info.tempdb_current) AS tempdb_currentFROM(SELECT TOP(@i)tsu.session_id,tsu.request_id,tsu.user_objects_alloc_page_count +tsu.internal_objects_alloc_page_count AS tempdb_allocations,tsu.user_objects_alloc_page_count +tsu.internal_objects_alloc_page_count -tsu.user_objects_dealloc_page_count -tsu.internal_objects_dealloc_page_count AS tempdb_currentFROM sys.dm_db_task_space_usage AS tsuCROSS APPLY(SELECT TOP(1)s0.session_idFROM @sessions AS s0WHEREs0.session_id = tsu.session_id) AS pUNION ALLSELECT TOP(@i)ssu.session_id,NULL AS request_id,ssu.user_objects_alloc_page_count +ssu.internal_objects_alloc_page_count AS tempdb_allocations,ssu.user_objects_alloc_page_count +ssu.internal_objects_alloc_page_count -ssu.user_objects_dealloc_page_count -ssu.internal_objects_dealloc_page_count AS tempdb_currentFROM sys.dm_db_session_space_usage AS ssuCROSS APPLY(SELECT TOP(1)s0.session_idFROM @sessions AS s0WHEREs0.session_id = ssu.session_id) AS p) AS t_infoGROUP BYt_info.session_id,COALESCE(t_info.request_id, -1)) AS tempdb_info ONtempdb_info.session_id = y.session_idAND tempdb_info.request_id =CASEWHEN y.status = N''sleeping'' THEN-1ELSEy.request_idEND' +CASE WHEN NOT (@get_avg_time = 1 AND @recursion = 1) THEN ''ELSE'LEFT OUTER HASH JOIN(SELECT TOP(@i)*FROM sys.dm_exec_query_stats) AS qs ONqs.sql_handle = y.sql_handleAND qs.plan_handle = y.plan_handleAND qs.statement_start_offset = y.statement_start_offsetAND qs.statement_end_offset = y.statement_end_offset'END + ') AS xOPTION (KEEPFIXED PLAN, OPTIMIZE FOR (@i = 1)); ';SET @sql_n = CONVERT(NVARCHAR(MAX), @sql);SET @last_collection_start = GETDATE();IF @recursion = -1AND @sys_info = 1BEGIN;SELECT@first_collection_ms_ticks = ms_ticksFROM sys.dm_os_sys_info;END;INSERT #sessions(recursion,session_id,request_id,session_number,elapsed_time,avg_elapsed_time,physical_io,reads,physical_reads,writes,tempdb_allocations,tempdb_current,CPU,thread_CPU_snapshot,context_switches,used_memory,tasks,status,wait_info,transaction_id,open_tran_count,sql_handle,statement_start_offset,statement_end_offset,        sql_text,plan_handle,blocking_session_id,percent_complete,host_name,login_name,database_name,program_name,additional_info,start_time,login_time,last_request_start_time)EXEC sp_executesql @sql_n,N'@recursion SMALLINT, @filter sysname, @not_filter sysname, @first_collection_ms_ticks BIGINT',@recursion, @filter, @not_filter, @first_collection_ms_ticks;--Collect transaction information?IF@recursion = 1AND(@output_column_list LIKE '%|[tran_start_time|]%' ESCAPE '|'OR @output_column_list LIKE '%|[tran_log_writes|]%' ESCAPE '|' )BEGIN;   DECLARE @i INT;SET @i = 2147483647;UPDATE sSETtran_start_time =CONVERT(DATETIME,LEFT(x.trans_info,NULLIF(CHARINDEX(NCHAR(254) COLLATE Latin1_General_Bin2, x.trans_info) - 1, -1)),121),tran_log_writes =RIGHT(x.trans_info,LEN(x.trans_info) - CHARINDEX(NCHAR(254) COLLATE Latin1_General_Bin2, x.trans_info))FROM(SELECT TOP(@i)trans_nodes.trans_node.value('(session_id/text())[1]', 'SMALLINT') AS session_id,COALESCE(trans_nodes.trans_node.value('(request_id/text())[1]', 'INT'), 0) AS request_id,trans_nodes.trans_node.value('(trans_info/text())[1]', 'NVARCHAR(4000)') AS trans_info               FROM(SELECT TOP(@i)CONVERT(XML,REPLACE(CONVERT(NVARCHAR(MAX), trans_raw.trans_xml_raw) COLLATE Latin1_General_Bin2, N'</trans_info></trans><trans><trans_info>', N''))FROM(SELECT TOP(@i)CASE u_trans.rWHEN 1 THEN u_trans.session_idELSE NULLEND AS [session_id],CASE u_trans.rWHEN 1 THEN u_trans.request_idELSE NULLEND AS [request_id],CONVERT(NVARCHAR(MAX),CASEWHEN u_trans.database_id IS NOT NULL THENCASE u_trans.rWHEN 1 THEN COALESCE(CONVERT(NVARCHAR, u_trans.transaction_start_time, 121) + NCHAR(254), N'')ELSE N''END + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(128), COALESCE(DB_NAME(u_trans.database_id), N'(null)')),NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),NCHAR(0),N'?') +N': ' +CONVERT(NVARCHAR, u_trans.log_record_count) + N' (' + CONVERT(NVARCHAR, u_trans.log_kb_used) + N' kB)' +N','ELSEN'N/A,'END COLLATE Latin1_General_Bin2) AS [trans_info]FROM(SELECT TOP(@i)trans.*,ROW_NUMBER() OVER(PARTITION BYtrans.session_id,trans.request_idORDER BYtrans.transaction_start_time DESC) AS rFROM(SELECT TOP(@i)session_tran_map.session_id,session_tran_map.request_id,s_tran.database_id,COALESCE(SUM(s_tran.database_transaction_log_record_count), 0) AS log_record_count,COALESCE(SUM(s_tran.database_transaction_log_bytes_used), 0) / 1024 AS log_kb_used,MIN(s_tran.database_transaction_begin_time) AS transaction_start_timeFROM(SELECT TOP(@i)*FROM sys.dm_tran_active_transactionsWHEREtransaction_begin_time <= @last_collection_start) AS a_tranINNER HASH JOIN(SELECT TOP(@i)*FROM sys.dm_tran_database_transactionsWHEREdatabase_id < 32767) AS s_tran ONs_tran.transaction_id = a_tran.transaction_idLEFT OUTER HASH JOIN(SELECT TOP(@i)*FROM sys.dm_tran_session_transactions) AS tst ONs_tran.transaction_id = tst.transaction_idCROSS APPLY(SELECT TOP(1)s3.session_id,s3.request_idFROM(SELECT TOP(1)s1.session_id,s1.request_idFROM #sessions AS s1WHEREs1.transaction_id = s_tran.transaction_idAND s1.recursion = 1UNION ALLSELECT TOP(1)s2.session_id,s2.request_idFROM #sessions AS s2WHEREs2.session_id = tst.session_idAND s2.recursion = 1) AS s3ORDER BYs3.request_id) AS session_tran_mapGROUP BYsession_tran_map.session_id,session_tran_map.request_id,s_tran.database_id) AS trans) AS u_transFOR XMLPATH('trans'),TYPE) AS trans_raw (trans_xml_raw)) AS trans_final (trans_xml)CROSS APPLY trans_final.trans_xml.nodes('/trans') AS trans_nodes (trans_node)) AS xINNER HASH JOIN #sessions AS s ONs.session_id = x.session_idAND s.request_id = x.request_idOPTION (OPTIMIZE FOR (@i = 1));END;--Variables for text and plan collectionDECLARE   @session_id SMALLINT,@request_id INT,@sql_handle VARBINARY(64),@plan_handle VARBINARY(64),@statement_start_offset INT,@statement_end_offset INT,@start_time DATETIME,@database_name sysname;IF @recursion = 1AND @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'BEGIN;DECLARE sql_cursorCURSOR LOCAL FAST_FORWARDFOR SELECT session_id,request_id,sql_handle,statement_start_offset,statement_end_offsetFROM #sessionsWHERErecursion = 1AND sql_handle IS NOT NULLOPTION (KEEPFIXED PLAN);OPEN sql_cursor;FETCH NEXT FROM sql_cursorINTO @session_id,@request_id,@sql_handle,@statement_start_offset,@statement_end_offset;--Wait up to 5 ms for the SQL text, then give upSET LOCK_TIMEOUT 5;WHILE @@FETCH_STATUS = 0BEGIN;BEGIN TRY;UPDATE sSETs.sql_text =(SELECTREPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(N'--' + NCHAR(13) + NCHAR(10) +CASE WHEN @get_full_inner_text = 1 THEN est.textWHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN est.textWHEN SUBSTRING(est.text, (@statement_start_offset/2), 2) LIKE N'[a-zA-Z0-9][a-zA-Z0-9]' THEN est.textELSECASEWHEN @statement_start_offset > 0 THENSUBSTRING(est.text,((@statement_start_offset/2) + 1),(CASEWHEN @statement_end_offset = -1 THEN 2147483647ELSE ((@statement_end_offset - @statement_start_offset)/2) + 1END))ELSE RTRIM(LTRIM(est.text))ENDEND +NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2,NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),NCHAR(0),N'') AS [processing-instruction(query)]FOR XMLPATH(''),TYPE),s.statement_start_offset = CASE WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN 0WHEN SUBSTRING(CONVERT(VARCHAR(MAX), est.text), (@statement_start_offset/2), 2) LIKE '[a-zA-Z0-9][a-zA-Z0-9]' THEN 0ELSE @statement_start_offsetEND,s.statement_end_offset = CASE WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN -1WHEN SUBSTRING(CONVERT(VARCHAR(MAX), est.text), (@statement_start_offset/2), 2) LIKE '[a-zA-Z0-9][a-zA-Z0-9]' THEN -1ELSE @statement_end_offsetENDFROM #sessions AS s,(SELECT TOP(1)textFROM(SELECT text, 0 AS row_numFROM sys.dm_exec_sql_text(@sql_handle)UNION ALLSELECT NULL,1 AS row_num) AS est0ORDER BYrow_num) AS estWHERE s.session_id = @session_idAND s.request_id = @request_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END TRYBEGIN CATCH;UPDATE sSETs.sql_text = CASE ERROR_NUMBER() WHEN 1222 THEN '<timeout_exceeded />'ELSE '<error message="' + ERROR_MESSAGE() + '" />'ENDFROM #sessions AS sWHERE s.session_id = @session_idAND s.request_id = @request_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END CATCH;FETCH NEXT FROM sql_cursorINTO@session_id,@request_id,@sql_handle,@statement_start_offset,@statement_end_offset;END;--Return this to the defaultSET LOCK_TIMEOUT -1;CLOSE sql_cursor;DEALLOCATE sql_cursor;END;IF @get_outer_command = 1 AND @recursion = 1AND @output_column_list LIKE '%|[sql_command|]%' ESCAPE '|'BEGIN;DECLARE @buffer_results TABLE(EventType VARCHAR(30),Parameters INT,EventInfo NVARCHAR(4000),start_time DATETIME,session_number INT IDENTITY(1,1) NOT NULL PRIMARY KEY);DECLARE buffer_cursorCURSOR LOCAL FAST_FORWARDFOR SELECT session_id,MAX(start_time) AS start_timeFROM #sessionsWHERErecursion = 1GROUP BYsession_idORDER BYsession_idOPTION (KEEPFIXED PLAN);OPEN buffer_cursor;FETCH NEXT FROM buffer_cursorINTO @session_id,@start_time;WHILE @@FETCH_STATUS = 0BEGIN;BEGIN TRY;--In SQL Server 2008, DBCC INPUTBUFFER will throw --an exception if the session no longer existsINSERT @buffer_results(EventType,Parameters,EventInfo)EXEC sp_executesqlN'DBCC INPUTBUFFER(@session_id) WITH NO_INFOMSGS;',N'@session_id SMALLINT',@session_id;UPDATE brSETbr.start_time = @start_timeFROM @buffer_results AS brWHEREbr.session_number = (SELECT MAX(br2.session_number)FROM @buffer_results br2);END TRYBEGIN CATCHEND CATCH;FETCH NEXT FROM buffer_cursorINTO @session_id,@start_time;END;UPDATE sSETsql_command = (SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(MAX),N'--' + NCHAR(13) + NCHAR(10) + br.EventInfo + NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2),NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),NCHAR(0),N'') AS [processing-instruction(query)]FROM @buffer_results AS brWHERE br.session_number = s.session_numberAND br.start_time = s.start_timeAND ((s.start_time = s.last_request_start_timeAND EXISTS(SELECT *FROM sys.dm_exec_requests r2WHEREr2.session_id = s.session_idAND r2.request_id = s.request_idAND r2.start_time = s.start_time))OR (s.request_id = 0AND EXISTS(SELECT *FROM sys.dm_exec_sessions s2WHEREs2.session_id = s.session_idAND s2.last_request_start_time = s.last_request_start_time)))FOR XMLPATH(''),TYPE)FROM #sessions AS sWHERErecursion = 1OPTION (KEEPFIXED PLAN);CLOSE buffer_cursor;DEALLOCATE buffer_cursor;END;IF @get_plans >= 1 AND @recursion = 1AND @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'BEGIN;DECLARE @live_plan BIT;SET @live_plan = ISNULL(CONVERT(BIT, SIGN(OBJECT_ID('sys.dm_exec_query_statistics_xml'))), 0)DECLARE plan_cursorCURSOR LOCAL FAST_FORWARDFOR SELECTsession_id,request_id,plan_handle,statement_start_offset,statement_end_offsetFROM #sessionsWHERErecursion = 1AND plan_handle IS NOT NULLOPTION (KEEPFIXED PLAN);OPEN plan_cursor;FETCH NEXT FROM plan_cursorINTO @session_id,@request_id,@plan_handle,@statement_start_offset,@statement_end_offset;--Wait up to 5 ms for a query plan, then give upSET LOCK_TIMEOUT 5;WHILE @@FETCH_STATUS = 0BEGIN;DECLARE @query_plan XML;IF @live_plan = 1BEGIN;BEGIN TRY;SELECT@query_plan = x.query_planFROM sys.dm_exec_query_statistics_xml(@session_id) AS x;IF @query_plan IS NOT NULLAND EXISTS(SELECT*FROM sys.dm_exec_requests AS rWHEREr.session_id = @session_idAND r.request_id = @request_idAND r.plan_handle = @plan_handleAND r.statement_start_offset = @statement_start_offsetAND r.statement_end_offset = @statement_end_offset)BEGIN;UPDATE sSETs.query_plan = @query_planFROM #sessions AS sWHERE s.session_id = @session_idAND s.request_id = @request_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END;END TRYBEGIN CATCH;SET @query_plan = NULL;END CATCH;END;IF @query_plan IS NULLBEGIN;BEGIN TRY;UPDATE sSETs.query_plan =(SELECTCONVERT(xml, query_plan)FROM sys.dm_exec_text_query_plan(@plan_handle, CASE @get_plansWHEN 1 THEN@statement_start_offsetELSE0END, CASE @get_plansWHEN 1 THEN@statement_end_offsetELSE-1END))FROM #sessions AS sWHERE s.session_id = @session_idAND s.request_id = @request_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END TRYBEGIN CATCH;IF ERROR_NUMBER() = 6335BEGIN;UPDATE sSETs.query_plan =(SELECTN'--' + NCHAR(13) + NCHAR(10) + N'-- Could not render showplan due to XML data type limitations. ' + NCHAR(13) + NCHAR(10) + N'-- To see the graphical plan save the XML below as a .SQLPLAN file and re-open in SSMS.' + NCHAR(13) + NCHAR(10) +N'--' + NCHAR(13) + NCHAR(10) +REPLACE(qp.query_plan, N'<RelOp', NCHAR(13)+NCHAR(10)+N'<RelOp') + NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2 AS [processing-instruction(query_plan)]FROM sys.dm_exec_text_query_plan(@plan_handle, CASE @get_plansWHEN 1 THEN@statement_start_offsetELSE0END, CASE @get_plansWHEN 1 THEN@statement_end_offsetELSE-1END) AS qpFOR XMLPATH(''),TYPE)FROM #sessions AS sWHERE s.session_id = @session_idAND s.request_id = @request_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END;ELSEBEGIN;UPDATE sSETs.query_plan = CASE ERROR_NUMBER() WHEN 1222 THEN '<timeout_exceeded />'ELSE '<error message="' + ERROR_MESSAGE() + '" />'ENDFROM #sessions AS sWHERE s.session_id = @session_idAND s.request_id = @request_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END;END CATCH;END;FETCH NEXT FROM plan_cursorINTO@session_id,@request_id,@plan_handle,@statement_start_offset,@statement_end_offset;END;--Return this to the defaultSET LOCK_TIMEOUT -1;CLOSE plan_cursor;DEALLOCATE plan_cursor;END;IF @get_locks = 1 AND @recursion = 1AND @output_column_list LIKE '%|[locks|]%' ESCAPE '|'BEGIN;DECLARE locks_cursorCURSOR LOCAL FAST_FORWARDFOR SELECT DISTINCTdatabase_nameFROM #locksWHEREEXISTS(SELECT *FROM #sessions AS sWHEREs.session_id = #locks.session_idAND recursion = 1)AND database_name <> '(null)'OPTION (KEEPFIXED PLAN);OPEN locks_cursor;FETCH NEXT FROM locks_cursorINTO @database_name;WHILE @@FETCH_STATUS = 0BEGIN;BEGIN TRY;SET @sql_n = CONVERT(NVARCHAR(MAX), '') +'UPDATE l ' +'SET ' +'object_name = ' +'REPLACE ' +'( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'o.name COLLATE Latin1_General_Bin2, ' +'NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''), ' +'NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''), ' +'NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''), ' +'NCHAR(0), ' +N''''' ' +'), ' +'index_name = ' +'REPLACE ' +'( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'i.name COLLATE Latin1_General_Bin2, ' +'NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''), ' +'NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''), ' +'NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''), ' +'NCHAR(0), ' +N''''' ' +'), ' +'schema_name = ' +'REPLACE ' +'( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'s.name COLLATE Latin1_General_Bin2, ' +'NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''), ' +'NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''), ' +'NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''), ' +'NCHAR(0), ' +N''''' ' +'), ' +'principal_name = ' + 'REPLACE ' +'( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'dp.name COLLATE Latin1_General_Bin2, ' +'NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''), ' +'NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''), ' +'NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''), ' +'NCHAR(0), ' +N''''' ' +') ' +'FROM #locks AS l ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.allocation_units AS au ON ' +'au.allocation_unit_id = l.allocation_unit_id ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.partitions AS p ON ' +'p.hobt_id = ' +'COALESCE ' +'( ' +'l.hobt_id, ' +'CASE ' +'WHEN au.type IN (1, 3) THEN au.container_id ' +'ELSE NULL ' +'END ' +') ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.partitions AS p1 ON ' +'l.hobt_id IS NULL ' +'AND au.type = 2 ' +'AND p1.partition_id = au.container_id ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.objects AS o ON ' +'o.object_id = COALESCE(l.object_id, p.object_id, p1.object_id) ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.indexes AS i ON ' +'i.object_id = COALESCE(l.object_id, p.object_id, p1.object_id) ' +'AND i.index_id = COALESCE(l.index_id, p.index_id, p1.index_id) ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.schemas AS s ON ' +'s.schema_id = COALESCE(l.schema_id, o.schema_id) ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.database_principals AS dp ON ' +'dp.principal_id = l.principal_id ' +'WHERE ' +'l.database_name = @database_name ' +'OPTION (KEEPFIXED PLAN); ';EXEC sp_executesql@sql_n,N'@database_name sysname',@database_name;END TRYBEGIN CATCH;UPDATE #locksSETquery_error = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), ERROR_MESSAGE() COLLATE Latin1_General_Bin2),NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),NCHAR(0),N'')WHERE database_name = @database_nameOPTION (KEEPFIXED PLAN);END CATCH;FETCH NEXT FROM locks_cursorINTO@database_name;END;CLOSE locks_cursor;DEALLOCATE locks_cursor;CREATE CLUSTERED INDEX IX_SRD ON #locks (session_id, request_id, database_name);UPDATE sSET s.locks =(SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), l1.database_name COLLATE Latin1_General_Bin2),NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),NCHAR(0),N'') AS [Database/@name],MIN(l1.query_error) AS [Database/@query_error],(SELECT l2.request_mode AS [Lock/@request_mode],l2.request_status AS [Lock/@request_status],COUNT(*) AS [Lock/@request_count]FROM #locks AS l2WHERE l1.session_id = l2.session_idAND l1.request_id = l2.request_idAND l2.database_name = l1.database_nameAND l2.resource_type = 'DATABASE'GROUP BYl2.request_mode,l2.request_statusFOR XMLPATH(''),TYPE) AS [Database/Locks],(SELECTCOALESCE(l3.object_name, '(null)') AS [Object/@name],l3.schema_name AS [Object/@schema_name],(SELECTl4.resource_type AS [Lock/@resource_type],l4.page_type AS [Lock/@page_type],l4.index_name AS [Lock/@index_name],CASE WHEN l4.object_name IS NULL THEN l4.schema_nameELSE NULLEND AS [Lock/@schema_name],l4.principal_name AS [Lock/@principal_name],l4.resource_description AS [Lock/@resource_description],l4.request_mode AS [Lock/@request_mode],l4.request_status AS [Lock/@request_status],SUM(l4.request_count) AS [Lock/@request_count]FROM #locks AS l4WHERE l4.session_id = l3.session_idAND l4.request_id = l3.request_idAND l3.database_name = l4.database_nameAND COALESCE(l3.object_name, '(null)') = COALESCE(l4.object_name, '(null)')AND COALESCE(l3.schema_name, '') = COALESCE(l4.schema_name, '')AND l4.resource_type <> 'DATABASE'GROUP BYl4.resource_type,l4.page_type,l4.index_name,CASE WHEN l4.object_name IS NULL THEN l4.schema_nameELSE NULLEND,l4.principal_name,l4.resource_description,l4.request_mode,l4.request_statusFOR XMLPATH(''),TYPE) AS [Object/Locks]FROM #locks AS l3WHERE l3.session_id = l1.session_idAND l3.request_id = l1.request_idAND l3.database_name = l1.database_nameAND l3.resource_type <> 'DATABASE'GROUP BY l3.session_id,l3.request_id,l3.database_name,COALESCE(l3.object_name, '(null)'),l3.schema_nameFOR XMLPATH(''),TYPE) AS [Database/Objects]FROM #locks AS l1WHEREl1.session_id = s.session_idAND l1.request_id = s.request_idAND l1.start_time IN (s.start_time, s.last_request_start_time)AND s.recursion = 1GROUP BY l1.session_id,l1.request_id,l1.database_nameFOR XMLPATH(''),TYPE)FROM #sessions sOPTION (KEEPFIXED PLAN);END;IF @find_block_leaders = 1AND @recursion = 1AND @output_column_list LIKE '%|[blocked_session_count|]%' ESCAPE '|'BEGIN;WITHblockers AS(SELECTsession_id,session_id AS top_level_session_id,CONVERT(VARCHAR(8000), '.' + CONVERT(VARCHAR(8000), session_id) + '.') AS the_pathFROM #sessionsWHERErecursion = 1UNION ALLSELECTs.session_id,b.top_level_session_id,CONVERT(VARCHAR(8000), b.the_path + CONVERT(VARCHAR(8000), s.session_id) + '.') AS the_pathFROM blockers AS bJOIN #sessions AS s ONs.blocking_session_id = b.session_idAND s.recursion = 1AND b.the_path NOT LIKE '%.' + CONVERT(VARCHAR(8000), s.session_id) + '.%' COLLATE Latin1_General_Bin2)UPDATE sSETs.blocked_session_count = x.blocked_session_countFROM #sessions AS sJOIN(SELECTb.top_level_session_id AS session_id,COUNT(*) - 1 AS blocked_session_countFROM blockers AS bGROUP BYb.top_level_session_id) x ONs.session_id = x.session_idWHEREs.recursion = 1;END;IF@get_task_info = 2AND @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'AND @recursion = 1BEGIN;CREATE TABLE #blocked_requests(session_id SMALLINT NOT NULL,request_id INT NOT NULL,database_name sysname NOT NULL,object_id INT,hobt_id BIGINT,schema_id INT,schema_name sysname NULL,object_name sysname NULL,query_error NVARCHAR(2048),PRIMARY KEY (database_name, session_id, request_id));CREATE STATISTICS s_database_name ON #blocked_requests (database_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_schema_name ON #blocked_requests (schema_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_object_name ON #blocked_requests (object_name)WITH SAMPLE 0 ROWS, NORECOMPUTE;CREATE STATISTICS s_query_error ON #blocked_requests (query_error)WITH SAMPLE 0 ROWS, NORECOMPUTE;INSERT #blocked_requests(session_id,request_id,database_name,object_id,hobt_id,schema_id)SELECTsession_id,request_id,database_name,object_id,hobt_id,CONVERT(INT, SUBSTRING(schema_node, CHARINDEX(' = ', schema_node) + 3, LEN(schema_node))) AS schema_idFROM(SELECTsession_id,request_id,agent_nodes.agent_node.value('(database_name/text())[1]', 'sysname') AS database_name,agent_nodes.agent_node.value('(object_id/text())[1]', 'int') AS object_id,agent_nodes.agent_node.value('(hobt_id/text())[1]', 'bigint') AS hobt_id,agent_nodes.agent_node.value('(metadata_resource/text()[.="SCHEMA"]/../../metadata_class_id/text())[1]', 'varchar(100)') AS schema_nodeFROM #sessions AS sCROSS APPLY s.additional_info.nodes('//block_info') AS agent_nodes (agent_node)WHEREs.recursion = 1) AS tWHEREt.database_name IS NOT NULLAND(t.object_id IS NOT NULLOR t.hobt_id IS NOT NULLOR t.schema_node IS NOT NULL);DECLARE blocks_cursorCURSOR LOCAL FAST_FORWARDFORSELECT DISTINCTdatabase_nameFROM #blocked_requests;OPEN blocks_cursor;FETCH NEXT FROM blocks_cursorINTO @database_name;WHILE @@FETCH_STATUS = 0BEGIN;BEGIN TRY;SET @sql_n = CONVERT(NVARCHAR(MAX), '') +'UPDATE b ' +'SET ' +'b.schema_name = ' +'REPLACE ' +'( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'s.name COLLATE Latin1_General_Bin2, ' +'NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''), ' +'NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''), ' +'NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''), ' +'NCHAR(0), ' +N''''' ' +'), ' +'b.object_name = ' +'REPLACE ' +'( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( ' +'o.name COLLATE Latin1_General_Bin2, ' +'NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''), ' +'NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''), ' +'NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''), ' +'NCHAR(0), ' +N''''' ' +') ' +'FROM #blocked_requests AS b ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.partitions AS p ON ' +'p.hobt_id = b.hobt_id ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.objects AS o ON ' +'o.object_id = COALESCE(p.object_id, b.object_id) ' +'LEFT OUTER JOIN ' + QUOTENAME(@database_name) + '.sys.schemas AS s ON ' +'s.schema_id = COALESCE(o.schema_id, b.schema_id) ' +'WHERE ' +'b.database_name = @database_name; ';EXEC sp_executesql@sql_n,N'@database_name sysname',@database_name;END TRYBEGIN CATCH;UPDATE #blocked_requestsSETquery_error = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), ERROR_MESSAGE() COLLATE Latin1_General_Bin2),NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),NCHAR(0),N'')WHEREdatabase_name = @database_name;END CATCH;FETCH NEXT FROM blocks_cursorINTO@database_name;END;CLOSE blocks_cursor;DEALLOCATE blocks_cursor;UPDATE sSETadditional_info.modify('insert <schema_name>{sql:column("b.schema_name")}</schema_name>as lastinto (/additional_info/block_info)[1]')FROM #sessions AS sINNER JOIN #blocked_requests AS b ONb.session_id = s.session_idAND b.request_id = s.request_idAND s.recursion = 1WHEREb.schema_name IS NOT NULL;UPDATE sSETadditional_info.modify('insert <object_name>{sql:column("b.object_name")}</object_name>as lastinto (/additional_info/block_info)[1]')FROM #sessions AS sINNER JOIN #blocked_requests AS b ONb.session_id = s.session_idAND b.request_id = s.request_idAND s.recursion = 1WHEREb.object_name IS NOT NULL;UPDATE sSETadditional_info.modify('insert <query_error>{sql:column("b.query_error")}</query_error>as lastinto (/additional_info/block_info)[1]')FROM #sessions AS sINNER JOIN #blocked_requests AS b ONb.session_id = s.session_idAND b.request_id = s.request_idAND s.recursion = 1WHEREb.query_error IS NOT NULL;END;IF@output_column_list LIKE '%|[program_name|]%' ESCAPE '|'AND @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'AND @recursion = 1AND DB_ID('msdb') IS NOT NULLBEGIN;SET @sql_n =N'BEGIN TRY;DECLARE @job_name sysname;SET @job_name = NULL;DECLARE @step_name sysname;SET @step_name = NULL;SELECT@job_name = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(j.name,NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),NCHAR(0),N''?''),@step_name = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(s.step_name,NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),NCHAR(0),N''?'')FROM msdb.dbo.sysjobs AS jINNER JOIN msdb.dbo.sysjobsteps AS s ONj.job_id = s.job_idWHEREj.job_id = @job_idAND s.step_id = @step_id;IF @job_name IS NOT NULLBEGIN;UPDATE sSETadditional_info.modify(''insert text{sql:variable("@job_name")}into (/additional_info/agent_job_info/job_name)[1]'')FROM #sessions AS sWHERE s.session_id = @session_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);UPDATE sSETadditional_info.modify(''insert text{sql:variable("@step_name")}into (/additional_info/agent_job_info/step_name)[1]'')FROM #sessions AS sWHERE s.session_id = @session_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END;END TRYBEGIN CATCH;DECLARE @msdb_error_message NVARCHAR(256);SET @msdb_error_message = ERROR_MESSAGE();UPDATE sSETadditional_info.modify(''insert <msdb_query_error>{sql:variable("@msdb_error_message")}</msdb_query_error>as lastinto (/additional_info/agent_job_info)[1]'')FROM #sessions AS sWHERE s.session_id = @session_idAND s.recursion = 1OPTION (KEEPFIXED PLAN);END CATCH;'DECLARE @job_id UNIQUEIDENTIFIER;DECLARE @step_id INT;DECLARE agent_cursorCURSOR LOCAL FAST_FORWARDFOR SELECTs.session_id,agent_nodes.agent_node.value('(job_id/text())[1]', 'uniqueidentifier') AS job_id,agent_nodes.agent_node.value('(step_id/text())[1]', 'int') AS step_idFROM #sessions AS sCROSS APPLY s.additional_info.nodes('//agent_job_info') AS agent_nodes (agent_node)WHEREs.recursion = 1OPTION (KEEPFIXED PLAN);OPEN agent_cursor;FETCH NEXT FROM agent_cursorINTO @session_id,@job_id,@step_id;WHILE @@FETCH_STATUS = 0BEGIN;EXEC sp_executesql@sql_n,N'@job_id UNIQUEIDENTIFIER, @step_id INT, @session_id SMALLINT',@job_id, @step_id, @session_idFETCH NEXT FROM agent_cursorINTO @session_id,@job_id,@step_id;END;CLOSE agent_cursor;DEALLOCATE agent_cursor;END; IF @delta_interval > 0 AND @recursion <> 1BEGIN;SET @recursion = 1;DECLARE @delay_time CHAR(12);SET @delay_time = CONVERT(VARCHAR, DATEADD(second, @delta_interval, 0), 114);WAITFOR DELAY @delay_time;GOTO REDO;END;END;SET @sql = --Outer column listCONVERT(VARCHAR(MAX),CASEWHEN @destination_table <> '' AND @return_schema = 0 THEN 'INSERT ' + @destination_table + ' 'ELSE ''END +'SELECT ' +@output_column_list + ' ' +CASE @return_schemaWHEN 1 THEN 'INTO #session_schema 'ELSE ''END--End outer column list) + --Inner column listCONVERT(VARCHAR(MAX),'FROM ' +'( ' +'SELECT ' +'session_id, ' +--[dd hh:mm:ss.mss]CASEWHEN @format_output IN (1, 2) THEN'CASE ' +'WHEN elapsed_time < 0 THEN ' +'RIGHT ' +'( ' +'REPLICATE(''0'', max_elapsed_length) + CONVERT(VARCHAR, (-1 * elapsed_time) / 86400), ' +'max_elapsed_length ' +') + ' +'RIGHT ' +'( ' +'CONVERT(VARCHAR, DATEADD(second, (-1 * elapsed_time), 0), 120), ' +'9 ' +') + ' +'''.000'' ' +'ELSE ' +'RIGHT ' +'( ' +'REPLICATE(''0'', max_elapsed_length) + CONVERT(VARCHAR, elapsed_time / 86400000), ' +'max_elapsed_length ' +') + ' +'RIGHT ' +'( ' +'CONVERT(VARCHAR, DATEADD(second, elapsed_time / 1000, 0), 120), ' +'9 ' +') + ' +'''.'' + ' + 'RIGHT(''000'' + CONVERT(VARCHAR, elapsed_time % 1000), 3) ' +'END AS [dd hh:mm:ss.mss], 'ELSE''END +--[dd hh:mm:ss.mss (avg)] / avg_elapsed_timeCASE WHEN  @format_output IN (1, 2) THEN 'RIGHT ' +'( ' +'''00'' + CONVERT(VARCHAR, avg_elapsed_time / 86400000), ' +'2 ' +') + ' +'RIGHT ' +'( ' +'CONVERT(VARCHAR, DATEADD(second, avg_elapsed_time / 1000, 0), 120), ' +'9 ' +') + ' +'''.'' + ' +'RIGHT(''000'' + CONVERT(VARCHAR, avg_elapsed_time % 1000), 3) AS [dd hh:mm:ss.mss (avg)], 'ELSE'avg_elapsed_time, 'END +--physical_ioCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, physical_io))) OVER() - LEN(CONVERT(VARCHAR, physical_io))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_io), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_io), 1), 19)) AS 'ELSE ''END + 'physical_io, ' +--readsCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, reads))) OVER() - LEN(CONVERT(VARCHAR, reads))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, reads), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, reads), 1), 19)) AS 'ELSE ''END + 'reads, ' +--physical_readsCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, physical_reads))) OVER() - LEN(CONVERT(VARCHAR, physical_reads))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_reads), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_reads), 1), 19)) AS 'ELSE ''END + 'physical_reads, ' +--writesCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, writes))) OVER() - LEN(CONVERT(VARCHAR, writes))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, writes), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, writes), 1), 19)) AS 'ELSE ''END + 'writes, ' +--tempdb_allocationsCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, tempdb_allocations))) OVER() - LEN(CONVERT(VARCHAR, tempdb_allocations))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_allocations), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_allocations), 1), 19)) AS 'ELSE ''END + 'tempdb_allocations, ' +--tempdb_currentCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, tempdb_current))) OVER() - LEN(CONVERT(VARCHAR, tempdb_current))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_current), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_current), 1), 19)) AS 'ELSE ''END + 'tempdb_current, ' +--CPUCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, CPU))) OVER() - LEN(CONVERT(VARCHAR, CPU))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CPU), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CPU), 1), 19)) AS 'ELSE ''END + 'CPU, ' +--context_switchesCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, context_switches))) OVER() - LEN(CONVERT(VARCHAR, context_switches))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, context_switches), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, context_switches), 1), 19)) AS 'ELSE ''END + 'context_switches, ' +--used_memoryCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, used_memory))) OVER() - LEN(CONVERT(VARCHAR, used_memory))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, used_memory), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, used_memory), 1), 19)) AS 'ELSE ''END + 'used_memory, ' +CASEWHEN @output_column_list LIKE '%|_delta|]%' ESCAPE '|' THEN--physical_io_delta         'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND physical_io_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, physical_io_delta))) OVER() - LEN(CONVERT(VARCHAR, physical_io_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_io_delta), 1), 19)) ' WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_io_delta), 1), 19)) 'ELSE 'physical_io_delta 'END +'ELSE NULL ' +'END AS physical_io_delta, ' +--reads_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND reads_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, reads_delta))) OVER() - LEN(CONVERT(VARCHAR, reads_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, reads_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, reads_delta), 1), 19)) 'ELSE 'reads_delta 'END +'ELSE NULL ' +'END AS reads_delta, ' +--physical_reads_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND physical_reads_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, physical_reads_delta))) OVER() - LEN(CONVERT(VARCHAR, physical_reads_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_reads_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, physical_reads_delta), 1), 19)) 'ELSE 'physical_reads_delta 'END + 'ELSE NULL ' +'END AS physical_reads_delta, ' +--writes_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND writes_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, writes_delta))) OVER() - LEN(CONVERT(VARCHAR, writes_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, writes_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, writes_delta), 1), 19)) 'ELSE 'writes_delta 'END + 'ELSE NULL ' +'END AS writes_delta, ' +--tempdb_allocations_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND tempdb_allocations_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, tempdb_allocations_delta))) OVER() - LEN(CONVERT(VARCHAR, tempdb_allocations_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_allocations_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_allocations_delta), 1), 19)) 'ELSE 'tempdb_allocations_delta 'END + 'ELSE NULL ' +'END AS tempdb_allocations_delta, ' +--tempdb_current_delta--this is the only one that can (legitimately) go negative 'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, tempdb_current_delta))) OVER() - LEN(CONVERT(VARCHAR, tempdb_current_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_current_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tempdb_current_delta), 1), 19)) 'ELSE 'tempdb_current_delta 'END + 'ELSE NULL ' +'END AS tempdb_current_delta, ' +--CPU_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'THEN ' +'CASE ' +'WHEN ' +'thread_CPU_delta > CPU_delta ' +'AND thread_CPU_delta > 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, thread_CPU_delta + CPU_delta))) OVER() - LEN(CONVERT(VARCHAR, thread_CPU_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, thread_CPU_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, thread_CPU_delta), 1), 19)) 'ELSE 'thread_CPU_delta 'END + 'WHEN CPU_delta >= 0 THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, thread_CPU_delta + CPU_delta))) OVER() - LEN(CONVERT(VARCHAR, CPU_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CPU_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CPU_delta), 1), 19)) 'ELSE 'CPU_delta 'END + 'ELSE NULL ' +'END ' +'ELSE ' +'NULL ' +'END AS CPU_delta, ' +--context_switches_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND context_switches_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, context_switches_delta))) OVER() - LEN(CONVERT(VARCHAR, context_switches_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, context_switches_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, context_switches_delta), 1), 19)) 'ELSE 'context_switches_delta 'END + 'ELSE NULL ' +'END AS context_switches_delta, ' +--used_memory_delta'CASE ' +'WHEN ' +'first_request_start_time = last_request_start_time ' + 'AND num_events = 2 ' +'AND used_memory_delta >= 0 ' +'THEN ' +CASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, used_memory_delta))) OVER() - LEN(CONVERT(VARCHAR, used_memory_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, used_memory_delta), 1), 19)) 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, used_memory_delta), 1), 19)) 'ELSE 'used_memory_delta 'END + 'ELSE NULL ' +'END AS used_memory_delta, 'ELSE ''END +--tasksCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, tasks))) OVER() - LEN(CONVERT(VARCHAR, tasks))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tasks), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, tasks), 1), 19)) 'ELSE ''END + 'tasks, ' +'status, ' +'wait_info, ' +'locks, ' +'tran_start_time, ' +'LEFT(tran_log_writes, LEN(tran_log_writes) - 1) AS tran_log_writes, ' +--open_tran_countCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, open_tran_count))) OVER() - LEN(CONVERT(VARCHAR, open_tran_count))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, open_tran_count), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, open_tran_count), 1), 19)) AS 'ELSE ''END + 'open_tran_count, ' +--sql_commandCASE @format_output WHEN 0 THEN 'REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), sql_command), ''<?query --''+CHAR(13)+CHAR(10), ''''), CHAR(13)+CHAR(10)+''--?>'', '''') AS 'ELSE ''END + 'sql_command, ' +--sql_textCASE @format_output WHEN 0 THEN 'REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), sql_text), ''<?query --''+CHAR(13)+CHAR(10), ''''), CHAR(13)+CHAR(10)+''--?>'', '''') AS 'ELSE ''END + 'sql_text, ' +'query_plan, ' +'blocking_session_id, ' +--blocked_session_countCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, blocked_session_count))) OVER() - LEN(CONVERT(VARCHAR, blocked_session_count))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, blocked_session_count), 1), 19)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, blocked_session_count), 1), 19)) AS 'ELSE ''END + 'blocked_session_count, ' +--percent_completeCASE @format_outputWHEN 1 THEN 'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, CONVERT(MONEY, percent_complete), 2))) OVER() - LEN(CONVERT(VARCHAR, CONVERT(MONEY, percent_complete), 2))) + CONVERT(CHAR(22), CONVERT(MONEY, percent_complete), 2)) AS 'WHEN 2 THEN 'CONVERT(VARCHAR, CONVERT(CHAR(22), CONVERT(MONEY, blocked_session_count), 1)) AS 'ELSE ''END + 'percent_complete, ' +'host_name, ' +'login_name, ' +'database_name, ' +'program_name, ' +'additional_info, ' +'start_time, ' +'login_time, ' +'CASE ' +'WHEN status = N''sleeping'' THEN NULL ' +'ELSE request_id ' +'END AS request_id, ' +'GETDATE() AS collection_time '--End inner column list) +--Derived table and INSERT specificationCONVERT(VARCHAR(MAX),'FROM ' +'( ' +'SELECT TOP(2147483647) ' +'*, ' +'CASE ' +'MAX ' +'( ' +'LEN ' +'( ' +'CONVERT ' +'( ' +'VARCHAR, ' +'CASE ' +'WHEN elapsed_time < 0 THEN ' +'(-1 * elapsed_time) / 86400 ' +'ELSE ' +'elapsed_time / 86400000 ' +'END ' +') ' +') ' +') OVER () ' +'WHEN 1 THEN 2 ' +'ELSE ' +'MAX ' +'( ' +'LEN ' +'( ' +'CONVERT ' +'( ' +'VARCHAR, ' +'CASE ' +'WHEN elapsed_time < 0 THEN ' +'(-1 * elapsed_time) / 86400 ' +'ELSE ' +'elapsed_time / 86400000 ' +'END ' +') ' +') ' +') OVER () ' +'END AS max_elapsed_length, ' +CASEWHEN @output_column_list LIKE '%|_delta|]%' ESCAPE '|' THEN'MAX(physical_io * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(physical_io * recursion) OVER (PARTITION BY session_id, request_id) AS physical_io_delta, ' +'MAX(reads * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(reads * recursion) OVER (PARTITION BY session_id, request_id) AS reads_delta, ' +'MAX(physical_reads * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(physical_reads * recursion) OVER (PARTITION BY session_id, request_id) AS physical_reads_delta, ' +'MAX(writes * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(writes * recursion) OVER (PARTITION BY session_id, request_id) AS writes_delta, ' +'MAX(tempdb_allocations * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(tempdb_allocations * recursion) OVER (PARTITION BY session_id, request_id) AS tempdb_allocations_delta, ' +'MAX(tempdb_current * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(tempdb_current * recursion) OVER (PARTITION BY session_id, request_id) AS tempdb_current_delta, ' +'MAX(CPU * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(CPU * recursion) OVER (PARTITION BY session_id, request_id) AS CPU_delta, ' +'MAX(thread_CPU_snapshot * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(thread_CPU_snapshot * recursion) OVER (PARTITION BY session_id, request_id) AS thread_CPU_delta, ' +'MAX(context_switches * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(context_switches * recursion) OVER (PARTITION BY session_id, request_id) AS context_switches_delta, ' +'MAX(used_memory * recursion) OVER (PARTITION BY session_id, request_id) + ' +'MIN(used_memory * recursion) OVER (PARTITION BY session_id, request_id) AS used_memory_delta, ' +'MIN(last_request_start_time) OVER (PARTITION BY session_id, request_id) AS first_request_start_time, 'ELSE ''END +'COUNT(*) OVER (PARTITION BY session_id, request_id) AS num_events ' +'FROM #sessions AS s1 ' +CASE WHEN @sort_order = '' THEN ''ELSE'ORDER BY ' +@sort_orderEND +') AS s ' +'WHERE ' +'s.recursion = 1 ' +') x ' +'OPTION (KEEPFIXED PLAN); ' +'' +CASE @return_schemaWHEN 1 THEN'SET @schema = ' +'''CREATE TABLE <table_name> ( '' + ' +'STUFF ' +'( ' +'( ' +'SELECT ' +''','' + ' +'QUOTENAME(COLUMN_NAME) + '' '' + ' +'DATA_TYPE + ' + 'CASE ' +'WHEN DATA_TYPE LIKE ''%char'' THEN ''('' + COALESCE(NULLIF(CONVERT(VARCHAR, CHARACTER_MAXIMUM_LENGTH), ''-1''), ''max'') + '') '' ' +'ELSE '' '' ' +'END + ' +'CASE IS_NULLABLE ' +'WHEN ''NO'' THEN ''NOT '' ' +'ELSE '''' ' +'END + ''NULL'' AS [text()] ' +'FROM tempdb.INFORMATION_SCHEMA.COLUMNS ' +'WHERE ' +'TABLE_NAME = (SELECT name FROM tempdb.sys.objects WHERE object_id = OBJECT_ID(''tempdb..#session_schema'')) ' +'ORDER BY ' +'ORDINAL_POSITION ' +'FOR XML ' +'PATH('''') ' +'), + ' +'1, ' +'1, ' +''''' ' +') + ' +''')''; ' ELSE ''END--End derived table and INSERT specification);SET @sql_n = CONVERT(NVARCHAR(MAX), @sql);EXEC sp_executesql@sql_n,N'@schema VARCHAR(MAX) OUTPUT',@schema OUTPUT;
END;
GO

转载于:https://my.oschina.net/u/200350/blog/1808237

sp_WhoIsActive相关推荐

  1. 在SQL Server中使用sp_WhoIsActive监视活动

    In this article, we will talk about sp_WhoIsActive stored procedure and how we can use it to monitor ...

  2. 为什么数据库有时候不能定位阻塞(Blocker)源头的SQL语句

    在SQL Server数据库或OACLE数据库当中,通常一个会话持有某个资源的锁,而另一个会话在请求这个资源,就会出现阻塞(blocking).这是DBA经常会遇到的情况.当出现SQL语句的阻塞时,很 ...

  3. 最常用的数据库脚本前十名

    最常用的数据库脚本前十名 英文原文: https://www.simple-talk.com/sql/t-sql-programming/top-10-most-common-database-scr ...

  4. ssms应用程序错误_来自应用程序的查询计划与SSMS不同时的性能故障排除

    ssms应用程序错误 Troubleshooting performance issues in a database is one of the main jobs of DBAs and by n ...

  5. sql azure 语法_Azure Data Studio中SQL Server Profiler

    sql azure 语法 In this article, we will explore SQL Server Profiler in Azure Data Studio in detail inc ...

  6. sql tempdb清理_SQL Server TempDB数据库和闩锁争用

    sql tempdb清理 In this article, we will learn latch contention issues that we might experience in the ...

  7. sql server 事务_如何使用显式SQL Server事务回滚

    sql server 事务 In this article, we will explore the process of rollback an explicit SQL Server transa ...

  8. dmv io读写高的sql_使用内置的动态管理视图(DMV)发现更多SQL Server信息

    dmv io读写高的sql 介绍 (Introduction) This is the second article in a continuing series on the many system ...

  9. sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定

    sql server 锁定 When you perform a SQL Server Online Index Rebuild operation, introduced for the first ...

最新文章

  1. XCOM串口助手打印不出数据
  2. 关于如如何运行tensorrt
  3. java怎么调用存储函数_java中调用存储过程或存储函数的方法
  4. ubuntu mysql备份_Ubuntu下进行MYSQL自动备份
  5. Java框架学习顺序是哪些?
  6. 数据库的同步和复制----sql语句方法
  7. php划分年龄段,儿童时期是怎样划分年龄阶段的
  8. 详述欺骗性断言如何引发严重的 Windows 内核漏洞 (CVE-2020-0792)
  9. 第十篇 requests模块
  10. 基于投资组合问题的凸二次规划模型及求解——Gurobi求解器+高阶牛顿法(python)
  11. Qt信号与槽机制原理及优缺点
  12. 十分钟快速讲明白K均值聚类算法
  13. 小学-知识与能力【7】
  14. java毕业设计蜗牛兼职网mybatis+源码+调试部署+系统+数据库+lw
  15. idea 提示Expecting newline or semicolon解决办法
  16. 新型工业路由器,为进入智能工业时代加快步伐
  17. USB学习入门(三)------众里寻他千百度(windows)
  18. 如何对固定资产、耗材全流程管理
  19. 使用注解来开发登录检查的切面功能
  20. Socks5代理Socks5 Proxy

热门文章

  1. 〖Python接口自动化测试实战篇①〗- 自动化测试基础扫盲及项目的生命周期详述
  2. paddlepaddle测试安装_专栏 | 新手入门?一步一步教你如何安装PaddlePaddle
  3. 卡巴斯基网络安全解决方案-服务器虚拟化安全2.0安装方法,营销材料(内部)_卡巴斯基网络安全解决方案-虚拟化安全(KSV2.0)_V1.0.docx...
  4. python--真气网城市空气质量数据抓取
  5. 我们实际上是房地产开发商 和 我们政府的奴隶
  6. Android手机间语音通话使用webrtc消除回音
  7. html 图片自动滚动播放,javascript+html5实现仿flash滚动播放图片的方法
  8. 【UV打印机】电器之开关电源LRS-350
  9. IIC串行通信总线介绍
  10. 软通纽约_纽约地铁数学