DECLARE @rroad_group_2_property_pivot_row_count BIGINT;
DECLARE @start_at_row_count BIGINT;
DECLARE @continue_updating VARCHAR ( 1 );
DECLARE @remaining_row_count BIGINT;
DECLARE @top_limit_row_count BIGINT;
DECLARE @batch_count BIGINT;
DECLARE @batch_counter BIGINT;
DECLARE @batch_description LONG VARCHAR;
CHECKPOINT;
SELECT SYSTAB.count
INTO @rroad_group_2_property_pivot_row_count
FROM SYSTAB
WHERE SYSTAB.table_name = 'rroad_group_2_property_pivot';
SET @start_at_row_count = 1;
IF @start_at_row_count <= @rroad_group_2_property_pivot_row_count THEN
SET @continue_updating = 'Y';
SET @remaining_row_count = @rroad_group_2_property_pivot_row_count;
SET @top_limit_row_count = LESSER ( @remaining_row_count, 1000000 );
SET @batch_count = CAST ( CEILING ( CAST ( @rroad_group_2_property_pivot_row_count AS DOUBLE ) / CAST ( 1000000 AS DOUBLE ) ) AS BIGINT );
SET @batch_counter = 1;
ELSE
SET @continue_updating = 'N';
END IF;
WHILE @continue_updating = 'Y' LOOP
INSERT rroad_progress_messages_requested ( requested_by_connection_id ) VALUES ( @@SPID );
COMMIT;
IF @batch_count > 1 THEN
MESSAGE STRING (
CURRENT TIMESTAMP,
' DATA UPGRADE: Updating Foxhound Monitor connection-level sample rows, batch ',
rroad_f_number_with_commas ( @batch_counter ),
' of ',
rroad_f_number_with_commas ( @batch_count ),
' of ',
rroad_f_number_with_commas ( @rroad_group_2_property_pivot_row_count ),
' total rows.' ) TO CONSOLE;
SET @batch_description = STRING (
' in batch ',
rroad_f_number_with_commas ( @batch_counter ),
' of ',
rroad_f_number_with_commas ( @batch_count ),
' of ',
rroad_f_number_with_commas ( @rroad_group_2_property_pivot_row_count ),
' total rows' );
ELSE
SET @batch_description = '';
END IF;
TRIGGER EVENT rroad_display_progress_messages (
@row_count_string = STRING ( @top_limit_row_count ),
@batch_description = @batch_description );
UPDATE TOP @top_limit_row_count
START AT @start_at_row_count
rroad_group_2_property_pivot
INNER JOIN rroad_sample_set
ON rroad_sample_set.sample_set_number = rroad_group_2_property_pivot.sample_set_number
LEFT OUTER JOIN ( SELECT rroad_group_2_property_pivot.sample_set_number AS sample_set_number,
rroad_group_2_property_pivot.BlockedOn AS blocking_connection_number,
COUNT(*) AS blocked_connection_count
FROM rroad_group_2_property_pivot
WHERE rroad_group_2_property_pivot.BlockedOn > 0
GROUP BY rroad_group_2_property_pivot.sample_set_number,
rroad_group_2_property_pivot.BlockedOn ) AS blocking_connection
ON blocking_connection.sample_set_number = rroad_group_2_property_pivot.sample_set_number
AND blocking_connection.blocking_connection_number = rroad_group_2_property_pivot.connection_number
SET rroad_group_2_property_pivot.blocked_connection_count
= COALESCE ( blocking_connection.blocked_connection_count, 0 ),
rroad_group_2_property_pivot.current_req_status
= IF TRIM ( COALESCE ( rroad_group_2_property_pivot.ReqStatus, '' ) ) = ''
THEN '-'
ELSE CASE TRIM ( rroad_group_2_property_pivot.ReqStatus )
WHEN 'Idle' THEN 'Idle'
WHEN 'Unscheduled' THEN 'Waiting for thread'
WHEN 'BlockedIO' THEN 'Waiting for I/O'
WHEN 'BlockedContention' THEN 'Waiting for shared resource'
WHEN 'BlockedLock' THEN 'Blocked by lock'
WHEN 'Executing' THEN 'Executing'
ELSE TRIM ( rroad_group_2_property_pivot.ReqStatus )
END
ENDIF,
rroad_group_2_property_pivot.cache_satisfaction
= LESSER ( GREATER (
COALESCE (
CAST ( ROUND ( CAST ( rroad_group_2_property_pivot.CacheHits AS DECIMAL ( 30, 6 ) )
/ CAST ( GREATER ( 1, rroad_group_2_property_pivot.CacheRead ) AS DECIMAL ( 30, 6 ) )
* 100.0,
0 )
AS DECIMAL ( 30, 0 ) ),
0.0 ),
0.0 ), 100.0 ), -- limit the cache_satisfaction to between 0 and 100
rroad_group_2_property_pivot.time_connected
= IF TRIM ( COALESCE ( rroad_group_2_property_pivot.LoginTime, '' ) ) = ''
THEN 0
ELSE DATEDIFF ( MILLISECOND,
rroad_f_dateadd_msec ( 3,
rroad_group_2_property_pivot.LoginTime ),
rroad_sample_set.sample_finished_at ) -- also called "sample_recorded_at"
ENDIF,
rroad_group_2_property_pivot.total_waits
= COALESCE ( rroad_group_2_property_pivot.ReqCountBlockContention, 0 )
+ COALESCE ( rroad_group_2_property_pivot.ReqCountBlockIO, 0 )
+ COALESCE ( rroad_group_2_property_pivot.ReqCountBlockLock, 0 )
+ COALESCE ( rroad_group_2_property_pivot.ReqCountUnscheduled, 0 ),
rroad_group_2_property_pivot.waiting_time
= COALESCE ( rroad_group_2_property_pivot.ReqTimeBlockContention, 0.0 )
+ COALESCE ( rroad_group_2_property_pivot.ReqTimeBlockIO, 0.0 )
+ COALESCE ( rroad_group_2_property_pivot.ReqTimeBlockLock, 0.0 )
+ COALESCE ( rroad_group_2_property_pivot.ReqTimeUnscheduled, 0.0 ),
rroad_group_2_property_pivot.transaction_running_time
= IF TRIM ( COALESCE ( rroad_group_2_property_pivot.TransactionStartTime, '' ) ) = ''
THEN 0
ELSE DATEDIFF ( MILLISECOND,
rroad_f_dateadd_msec ( rroad_sample_set.datediff_msec_between_target_and_local,
rroad_group_2_property_pivot.TransactionStartTime ),
rroad_sample_set.sample_finished_at ) -- also called "sample_recorded_at"
ENDIF,
rroad_group_2_property_pivot.time_since_last_request
= IF TRIM ( COALESCE ( rroad_group_2_property_pivot.LastReqTime, '' ) ) = ''
THEN 0
ELSE DATEDIFF ( MILLISECOND,
rroad_f_dateadd_msec ( rroad_sample_set.datediff_msec_between_target_and_local,
rroad_group_2_property_pivot.LastReqTime ),
rroad_sample_set.sample_finished_at ) -- also called "sample_recorded_at"
ENDIF,
rroad_group_2_property_pivot.index_satisfaction
= LESSER ( GREATER (
COALESCE (
CAST ( ROUND ( CAST ( rroad_group_2_property_pivot.IndLookup
- LESSER ( rroad_group_2_property_pivot.IndLookup, rroad_group_2_property_pivot.FullCompare )
AS DECIMAL ( 30, 6 ) )
/ CAST ( GREATER ( 1, rroad_group_2_property_pivot.IndLookup )
AS DECIMAL ( 30, 6 ) )
* 100.0,
0 )
AS DECIMAL ( 30, 0 ) ),
0.0 ),
0.0 ), 100.0 ) -- limit the index_satisfaction to between 0 and 100
ORDER BY rroad_group_2_property_pivot.sample_set_number,
rroad_group_2_property_pivot.connection_number;
COMMIT;
DELETE rroad_progress_messages_requested
WHERE requested_by_connection_id = @@spid;
COMMIT;
SET @start_at_row_count = @start_at_row_count + 1000000;
IF @start_at_row_count <= @rroad_group_2_property_pivot_row_count THEN
SET @continue_updating = 'Y';
SET @remaining_row_count = @remaining_row_count - @top_limit_row_count;
SET @top_limit_row_count = LESSER ( @remaining_row_count, 1000000 );
SET @batch_counter = @batch_counter + 1;
ELSE
SET @continue_updating = 'N';
END IF;
END LOOP; -- WHILE @continue_updating = 'Y' LOOP