#!/bin/bash # Database Query Optimization Verification Script # Agent 135 - 2025-10-14 DB_URL="postgresql://foxhunt:foxhunt_dev_password@localhost:5432/foxhunt" echo "========================================" echo "DATABASE OPTIMIZATION VERIFICATION" echo "========================================" echo "" # Test 1: Check migration applied echo "Test 1: Migration 025 Objects Created" echo "--------------------------------------" echo -n "Function check_model_activity_health: " psql "$DB_URL" -tAc "SELECT COUNT(*) FROM pg_proc WHERE proname = 'check_model_activity_health';" echo -n "Function get_ensemble_performance_summary: " psql "$DB_URL" -tAc "SELECT COUNT(*) FROM pg_proc WHERE proname = 'get_ensemble_performance_summary';" echo -n "Materialized view model_activity_realtime: " psql "$DB_URL" -tAc "SELECT COUNT(*) FROM pg_matviews WHERE matviewname = 'model_activity_realtime';" echo -n "Materialized view paper_trading_execution_summary: " psql "$DB_URL" -tAc "SELECT COUNT(*) FROM pg_matviews WHERE matviewname = 'paper_trading_execution_summary';" echo -n "Indexes with 'active' pattern: " psql "$DB_URL" -tAc "SELECT COUNT(*) FROM pg_indexes WHERE indexname LIKE '%active%';" echo "" # Test 2: Query performance comparison echo "Test 2: Query Performance Benchmark" echo "------------------------------------" echo -n "Raw table aggregation (ms): " psql "$DB_URL" -tAc "EXPLAIN ANALYZE SELECT AVG(ensemble_confidence), AVG(disagreement_rate) FROM ensemble_predictions WHERE timestamp > NOW() - INTERVAL '1 day';" 2>&1 | grep "Execution Time" | awk '{print $3}' echo -n "Continuous aggregate (ms): " psql "$DB_URL" -tAc "EXPLAIN ANALYZE SELECT AVG(avg_confidence), AVG(avg_disagreement) FROM ensemble_performance_5min WHERE bucket > NOW() - INTERVAL '1 day';" 2>&1 | grep "Execution Time" | awk '{print $3}' echo "" # Test 3: Model activity health check echo "Test 3: Model Activity Diagnostics" echo "-----------------------------------" psql "$DB_URL" -c "SELECT model_name, is_active, predictions_in_window, activity_rate_pct FROM check_model_activity_health(60);" echo "" # Test 4: Paper trading execution summary echo "Test 4: Paper Trading Execution Rate" echo "-------------------------------------" psql "$DB_URL" -c "SELECT COUNT(*) as bucket_count, SUM(total_predictions) as total_preds, SUM(executed_orders) as total_orders, ROUND(100.0 * SUM(executed_orders) / NULLIF(SUM(total_predictions), 0), 2) as execution_rate_pct FROM paper_trading_execution_summary WHERE bucket > NOW() - INTERVAL '1 hour';" echo "" # Test 5: Index usage echo "Test 5: New Index Verification" echo "-------------------------------" psql "$DB_URL" -c "SELECT indexname FROM pg_indexes WHERE tablename = 'ensemble_predictions' AND indexname LIKE 'idx_ensemble_predictions_%active%' ORDER BY indexname;" echo "" echo "========================================" echo "VERIFICATION COMPLETE" echo "========================================" echo "" echo "Expected Results:" echo "- All object counts should be > 0" echo "- Continuous aggregate should be <0.2ms (10x+ faster)" echo "- All models should show 'false' for is_active (confirms NULL votes issue)" echo "- Execution rate should be 0% (confirms Agent 123's finding)" echo "- 4 model-specific indexes should be created"