Files
PolyHermes/scripts/leader-research-perf-check.sql
T
2026-05-05 18:17:51 +08:00

180 lines
3.8 KiB
SQL

-- Leader Research Agent performance fixture and query plan helper.
-- Intended for a disposable local/test database after migrations have run.
-- It seeds at least 100 candidates, 10k activity events, and 10k paper trades,
-- then runs EXPLAIN on the hot list/detail paths.
SET @now_ms = UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000;
WITH RECURSIVE seq(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM seq WHERE n < 10000
)
INSERT IGNORE INTO leader_research_candidate (
normalized_wallet,
research_state,
source,
score,
score_version,
agent_owned,
provenance,
first_seen_at,
last_source_seen_at,
last_transition_at,
created_at,
updated_at
)
SELECT
CONCAT('0x', LPAD(HEX(n), 40, '0')),
CASE WHEN n % 5 = 0 THEN 'TRIAL_READY' WHEN n % 3 = 0 THEN 'PAPER' ELSE 'CANDIDATE' END,
'PERF_FIXTURE',
60 + (n % 40),
'research-copyability-v1',
1,
'AGENT_CREATED',
@now_ms - 3600000,
@now_ms - 60000,
@now_ms - 60000,
@now_ms,
@now_ms
FROM seq
WHERE n <= 100;
WITH RECURSIVE seq(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM seq WHERE n < 10000
)
INSERT IGNORE INTO leader_activity_event (
source,
source_event_id,
stable_event_key,
normalized_wallet,
market_id,
asset,
side,
price,
size,
amount,
event_time,
raw_payload_hash,
payload_summary,
usable_for_discovery,
usable_for_paper,
paper_processing_status,
processing_attempts,
created_at,
updated_at
)
SELECT
'PERF_FIXTURE',
CONCAT('perf-event-', n),
CONCAT('perf-event-', n),
CONCAT('0x', LPAD(HEX(1 + (n % 100)), 40, '0')),
CONCAT('condition-', n % 200),
CONCAT('asset-', n % 200),
IF(n % 2 = 0, 'BUY', 'SELL'),
0.45,
10,
4.5,
@now_ms - (n * 1000),
SHA2(CONCAT('perf-event-', n), 256),
CONCAT('perf event ', n),
1,
1,
'NEW',
0,
@now_ms,
@now_ms
FROM seq;
WITH RECURSIVE seq(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM seq WHERE n < 10000
)
INSERT IGNORE INTO leader_paper_session (
id,
candidate_id,
status,
started_at,
trade_count,
filtered_count,
open_exposure,
copyable_pnl,
max_drawdown,
unknown_valuation_exposure,
confirmed_zero_exposure,
filtered_ratio,
created_at,
updated_at
)
SELECT
n,
1 + (n % 100),
'ACTIVE',
@now_ms - 604800000,
100,
5,
100,
10,
-3,
5,
0,
0.0476,
@now_ms,
@now_ms
FROM seq
WHERE n <= 100;
WITH RECURSIVE seq(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM seq WHERE n < 10000
)
INSERT IGNORE INTO leader_paper_trade (
session_id,
candidate_id,
leader_trade_id,
market_id,
side,
leader_price,
leader_size,
simulated_price,
simulated_size,
simulated_amount,
fill_assumption,
quote_confidence,
quote_source,
quote_timestamp,
filter_result,
valuation_status,
event_time,
created_at
)
SELECT
1 + (n % 100),
1 + (n % 100),
CONCAT('perf-trade-', n),
CONCAT('condition-', n % 200),
IF(n % 2 = 0, 'BUY', 'SELL'),
0.45,
10,
0.45,
2,
1,
'LEADER_PRICE',
'MEDIUM',
'perf',
@now_ms,
'PASSED',
IF(n % 20 = 0, 'UNKNOWN', 'AVAILABLE'),
@now_ms - (n * 1000),
@now_ms
FROM seq;
EXPLAIN SELECT * FROM leader_research_candidate WHERE research_state IN ('PAPER', 'TRIAL_READY') ORDER BY updated_at DESC LIMIT 50;
EXPLAIN SELECT * FROM leader_activity_event WHERE paper_processing_status IN ('NEW', 'RETRYABLE') AND usable_for_paper = 1 ORDER BY event_time ASC LIMIT 200;
EXPLAIN SELECT * FROM leader_paper_trade WHERE session_id = 1 ORDER BY event_time DESC LIMIT 100;
EXPLAIN SELECT * FROM leader_research_event ORDER BY created_at DESC LIMIT 100;