docs: add shadow v3 field operations package
This commit is contained in:
190
scripts/shadow-v3-export.sql
Normal file
190
scripts/shadow-v3-export.sql
Normal file
@@ -0,0 +1,190 @@
|
||||
:on error exit
|
||||
|
||||
:out "$(OutputDir)\sql-diagnostics.txt"
|
||||
SET NOCOUNT ON;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar(30)) AS product_version,
|
||||
DB_NAME() AS database_name,
|
||||
SYSUTCDATETIME() AS checked_at_utc,
|
||||
CONVERT(datetime2(3), '$(StartUtc)', 127) AS export_start_utc,
|
||||
'$(WarehouseId)' AS warehouse_id;
|
||||
|
||||
SELECT package_id, package_version, installed_at
|
||||
FROM alg.shadow_package_manifest;
|
||||
|
||||
SELECT warehouse_id, snapshot_generation, snapshot_status, synchronized_at,
|
||||
DATEDIFF(SECOND, synchronized_at, SYSUTCDATETIME()) AS snapshot_age_seconds,
|
||||
CONVERT(varchar(64), source_signature, 2) AS source_signature,
|
||||
source_row_count, instance_id, last_error
|
||||
FROM alg.shadow_snapshot_state
|
||||
WHERE warehouse_id = '$(WarehouseId)';
|
||||
|
||||
SELECT warehouse_id, instance_id, claimed_at, last_seen_at,
|
||||
DATEDIFF(SECOND, last_seen_at, SYSUTCDATETIME()) AS heartbeat_age_seconds
|
||||
FROM alg.shadow_instance_heartbeat
|
||||
WHERE warehouse_id = '$(WarehouseId)';
|
||||
|
||||
SELECT 'cargo_space_snapshot' AS entity_name, state.snapshot_generation,
|
||||
COUNT_BIG(snapshot.space_id) AS row_count
|
||||
FROM alg.shadow_snapshot_state state
|
||||
LEFT JOIN alg.cargo_space_snapshot snapshot
|
||||
ON snapshot.warehouse_id = state.warehouse_id
|
||||
AND snapshot.snapshot_generation = state.snapshot_generation
|
||||
WHERE state.warehouse_id = '$(WarehouseId)'
|
||||
GROUP BY state.snapshot_generation
|
||||
UNION ALL
|
||||
SELECT 'active_job_snapshot', state.snapshot_generation, COUNT_BIG(snapshot.job_id)
|
||||
FROM alg.shadow_snapshot_state state
|
||||
LEFT JOIN alg.active_job_snapshot snapshot
|
||||
ON snapshot.warehouse_id = state.warehouse_id
|
||||
AND snapshot.snapshot_generation = state.snapshot_generation
|
||||
WHERE state.warehouse_id = '$(WarehouseId)'
|
||||
GROUP BY state.snapshot_generation
|
||||
UNION ALL
|
||||
SELECT 'shadow_inbound_request_snapshot', state.snapshot_generation, COUNT_BIG(snapshot.task_no)
|
||||
FROM alg.shadow_snapshot_state state
|
||||
LEFT JOIN alg.shadow_inbound_request_snapshot snapshot
|
||||
ON snapshot.warehouse_id = state.warehouse_id
|
||||
AND snapshot.snapshot_generation = state.snapshot_generation
|
||||
WHERE state.warehouse_id = '$(WarehouseId)'
|
||||
GROUP BY state.snapshot_generation
|
||||
UNION ALL
|
||||
SELECT 'shadow_outbound_request_snapshot', state.snapshot_generation, COUNT_BIG(snapshot.stockout_detail_id)
|
||||
FROM alg.shadow_snapshot_state state
|
||||
LEFT JOIN alg.shadow_outbound_request_snapshot snapshot
|
||||
ON snapshot.warehouse_id = state.warehouse_id
|
||||
AND snapshot.snapshot_generation = state.snapshot_generation
|
||||
WHERE state.warehouse_id = '$(WarehouseId)'
|
||||
GROUP BY state.snapshot_generation;
|
||||
|
||||
SELECT request.session_id, request.blocking_session_id, request.status,
|
||||
request.wait_type, request.wait_time, request.command,
|
||||
SUBSTRING(sql_text.text,
|
||||
(request.statement_start_offset / 2) + 1,
|
||||
((CASE request.statement_end_offset
|
||||
WHEN -1 THEN DATALENGTH(sql_text.text)
|
||||
ELSE request.statement_end_offset
|
||||
END - request.statement_start_offset) / 2) + 1) AS statement_text
|
||||
FROM sys.dm_exec_requests request
|
||||
OUTER APPLY sys.dm_exec_sql_text(request.sql_handle) sql_text
|
||||
WHERE request.database_id = DB_ID()
|
||||
AND (request.blocking_session_id <> 0 OR sql_text.text LIKE '%alg.%')
|
||||
ORDER BY request.session_id;
|
||||
GO
|
||||
|
||||
:out "$(OutputDir)\comparison-detail.txt"
|
||||
SET NOCOUNT ON;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
SELECT decision_type, result_code,
|
||||
CASE
|
||||
WHEN result_code = 'MATCH' THEN 'VALID_MATCH'
|
||||
WHEN result_code = 'DIFFERENT' THEN 'VALID_DIFFERENT'
|
||||
WHEN result_code LIKE 'SKIP_%' THEN 'SKIP'
|
||||
WHEN result_code LIKE 'ERROR_%' THEN 'ERROR'
|
||||
ELSE 'OTHER'
|
||||
END AS outcome_group,
|
||||
COUNT_BIG(*) AS row_count,
|
||||
MIN(created_at) AS first_created_at,
|
||||
MAX(created_at) AS last_created_at
|
||||
FROM alg.decision_log
|
||||
WHERE warehouse_id = '$(WarehouseId)'
|
||||
AND created_at >= CONVERT(datetime2(3), '$(StartUtc)', 127)
|
||||
GROUP BY decision_type, result_code,
|
||||
CASE
|
||||
WHEN result_code = 'MATCH' THEN 'VALID_MATCH'
|
||||
WHEN result_code = 'DIFFERENT' THEN 'VALID_DIFFERENT'
|
||||
WHEN result_code LIKE 'SKIP_%' THEN 'SKIP'
|
||||
WHEN result_code LIKE 'ERROR_%' THEN 'ERROR'
|
||||
ELSE 'OTHER'
|
||||
END
|
||||
ORDER BY decision_type, result_code;
|
||||
|
||||
SELECT decision_id, warehouse_id, decision_type, input_version,
|
||||
result_code, reason, created_at
|
||||
FROM alg.decision_log
|
||||
WHERE warehouse_id = '$(WarehouseId)'
|
||||
AND created_at >= CONVERT(datetime2(3), '$(StartUtc)', 127)
|
||||
ORDER BY created_at, decision_id;
|
||||
|
||||
SELECT SUM(CASE WHEN decision_type = 'INBOUND' THEN 1 ELSE 0 END) AS inbound_plan_count,
|
||||
SUM(CASE WHEN decision_type = 'INBOUND_COMPARE' THEN 1 ELSE 0 END) AS inbound_compare_count,
|
||||
SUM(CASE WHEN decision_type = 'OUTBOUND' THEN 1 ELSE 0 END) AS outbound_plan_count,
|
||||
SUM(CASE WHEN decision_type = 'OUTBOUND_COMPARE' THEN 1 ELSE 0 END) AS outbound_compare_count
|
||||
FROM alg.decision_log
|
||||
WHERE warehouse_id = '$(WarehouseId)'
|
||||
AND created_at >= CONVERT(datetime2(3), '$(StartUtc)', 127);
|
||||
GO
|
||||
|
||||
:out "$(OutputDir)\runtime-metrics.txt"
|
||||
SET NOCOUNT ON;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
SELECT warehouse_id, metric_name, bucket_upper_micros, metric_count,
|
||||
metric_total_micros, metric_max_micros, flushed_at
|
||||
FROM alg.shadow_runtime_metric
|
||||
WHERE warehouse_id = '$(WarehouseId)'
|
||||
ORDER BY metric_name, bucket_upper_micros;
|
||||
|
||||
SELECT CASE
|
||||
WHEN metric_name LIKE 'SKIP_%' THEN 'SKIP'
|
||||
WHEN metric_name LIKE 'ERROR_%' THEN 'ERROR'
|
||||
WHEN metric_name = 'ADMITTED' THEN 'ADMITTED'
|
||||
ELSE 'HISTOGRAM'
|
||||
END AS metric_group,
|
||||
SUM(metric_count) AS metric_count,
|
||||
MAX(flushed_at) AS latest_flush_at
|
||||
FROM alg.shadow_runtime_metric
|
||||
WHERE warehouse_id = '$(WarehouseId)'
|
||||
GROUP BY CASE
|
||||
WHEN metric_name LIKE 'SKIP_%' THEN 'SKIP'
|
||||
WHEN metric_name LIKE 'ERROR_%' THEN 'ERROR'
|
||||
WHEN metric_name = 'ADMITTED' THEN 'ADMITTED'
|
||||
ELSE 'HISTOGRAM'
|
||||
END
|
||||
ORDER BY metric_group;
|
||||
GO
|
||||
|
||||
:out "$(OutputDir)\inventory-parity.txt"
|
||||
SET NOCOUNT ON;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
WITH legacy_stock AS (
|
||||
SELECT stock.stock_id, stock.cargo_space_id, stock.tray_code,
|
||||
stock.spare4 AS project_no, stock.product_id AS product_no,
|
||||
stock.lot_no, stock.quantity, stock.out_quantity
|
||||
FROM dbo.bas_stock stock WITH (NOLOCK)
|
||||
INNER JOIN dbo.bas_cargo_space space WITH (NOLOCK)
|
||||
ON space.cargo_space_id = stock.cargo_space_id
|
||||
WHERE TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(space.warehouse_id))) =
|
||||
TRY_CONVERT(decimal(38,0), '$(WarehouseId)')
|
||||
), shadow_stock AS (
|
||||
SELECT snapshot.stock_id, snapshot.space_id AS cargo_space_id,
|
||||
snapshot.tray_code, snapshot.project_no, snapshot.product_no,
|
||||
snapshot.lot_no, snapshot.quantity, snapshot.out_quantity
|
||||
FROM alg.inventory_item_snapshot snapshot
|
||||
INNER JOIN alg.shadow_snapshot_state state
|
||||
ON state.warehouse_id = snapshot.warehouse_id
|
||||
AND state.snapshot_generation = snapshot.snapshot_generation
|
||||
AND state.snapshot_status = 'PUBLISHED'
|
||||
WHERE snapshot.warehouse_id = '$(WarehouseId)'
|
||||
)
|
||||
SELECT SUM(CASE WHEN legacy.stock_id IS NULL THEN 1 ELSE 0 END) AS shadow_only_count,
|
||||
SUM(CASE WHEN shadow.stock_id IS NULL THEN 1 ELSE 0 END) AS legacy_only_count,
|
||||
SUM(CASE WHEN legacy.stock_id IS NOT NULL AND shadow.stock_id IS NOT NULL
|
||||
AND (ISNULL(legacy.cargo_space_id, '') <> ISNULL(shadow.cargo_space_id, '')
|
||||
OR ISNULL(legacy.tray_code, '') <> ISNULL(shadow.tray_code, '')
|
||||
OR ISNULL(legacy.project_no, '') <> ISNULL(shadow.project_no, '')
|
||||
OR ISNULL(legacy.product_no, '') <> ISNULL(shadow.product_no, '')
|
||||
OR ISNULL(legacy.lot_no, '') <> ISNULL(shadow.lot_no, '')
|
||||
OR ISNULL(legacy.quantity, 0) <> ISNULL(shadow.quantity, 0)
|
||||
OR ISNULL(legacy.out_quantity, 0) <> ISNULL(shadow.out_quantity, 0))
|
||||
THEN 1 ELSE 0 END) AS differing_row_count,
|
||||
COUNT_BIG(*) AS compared_stock_count
|
||||
FROM legacy_stock legacy
|
||||
FULL OUTER JOIN shadow_stock shadow ON shadow.stock_id = legacy.stock_id;
|
||||
GO
|
||||
|
||||
:out stdout
|
||||
SELECT 'EXPORT_SQL_OK' AS export_status, SYSUTCDATETIME() AS completed_at_utc;
|
||||
Reference in New Issue
Block a user