MSSQL query store

Da Emigar.
Vai alla navigazione Vai alla ricerca

Attivare e Disattivare

attivare query store

ALTER DATABASE [NomeTuoDatabase] 
SET QUERY_STORE = ON (
   OPERATION_MODE = READ_WRITE,                -- Attiva la raccolta dati
   CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30), -- Conserva i dati per 30 giorni (regolabile)
   INTERVAL_LENGTH_MINUTES = 60,               -- Intervallo di aggregazione (es. 1 ora)
   MAX_STORAGE_SIZE_MB = 1000,                 -- Spazio massimo occupato dal Query Store (es. 1 GB)
   QUERY_CAPTURE_MODE = AUTO                   -- Modalità di cattura (cattura le query rilevanti evitando il rumore)
);


disattiva query store

ALTER DATABASE [NomeTuoDatabase]
SET QUERY_STORE = ON (
   OPERATION_MODE = READ_ONLY,                         -- Impedisce qualsiasi scrittura/cancellazione
   QUERY_CAPTURE_MODE = NONE,                          -- Disattiva la cattura di nuove query
   CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 0), -- 0 = Disabilita la pulizia automatica per età
   SIZE_BASED_CLEANUP_MODE = OFF                       -- Disabilita la pulizia al raggiungimento del limite di spazio
);

o più drastico:

ALTER DATABASE [NomeTuoDatabase] SET QUERY_STORE = OFF;

interrogare query store

Verifica se attivo.

SELECT 
   desired_state_desc, 
   actual_state_desc, 
   readonly_reason, 
   current_storage_size_mb, 
   max_storage_size_mb
FROM sys.database_query_store_options;

Analisi

analizzare query

SELECT
    qt.query_sql_text,
    rs.avg_duration,
    rs.count_executions,
    rs.avg_cpu_time,
    rsi.start_time,
    rsi.end_time
FROM sys.query_store_runtime_stats rs
JOIN sys.query_store_runtime_stats_interval rsi
    ON rs.runtime_stats_interval_id = rsi.runtime_stats_interval_id
JOIN sys.query_store_plan p
    ON rs.plan_id = p.plan_id
JOIN sys.query_store_query q
    ON p.query_id = q.query_id
JOIN sys.query_store_query_text qt
    ON q.query_text_id = qt.query_text_id
WHERE rsi.start_time >= '2026-06-11 14:00'
  AND rsi.end_time   <= '2026-06-11 16:00';