Bonjour à tous,

J'utilise en Production une base de données sur SQL Server 2022.
Malheureusement de façon aléatoire (2 fois par mois environ), certaines requêtes (surtout une) sont très longues.
J'ai pu identifier grâce au "Query Store" que le "plan" avait changé.
SQL Server a subitement choisi d'utiliser un autre index.
Le plan de maintenance fonctionne correctement (j'utilise Ola Hallengren), mes index ne sont pas fragmentés, mes statistics sont en FULL SCAN.
Pour résoudre le problème de façon rapide, j'ai forcé le bon plan, mais j'aimerai bien trouver la raison de ce changement.

Le hasard fait que j'ai aussi le même problème quand j'utilise "Top Resource Consuming Queries" dans le "Query Store".
Du coup j'ai aussi forcé le plan pour ce cas...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT TOP (@results_row_count)
    p.query_id query_id,
    q.object_id object_id,
    ISNULL(OBJECT_NAME(q.object_id),'') object_name,
    qt.query_sql_text query_sql_text,
    ROUND(CONVERT(float, SUM(rs.avg_duration*rs.count_executions))*0.001,2) total_duration,
    SUM(rs.count_executions) count_executions,
    COUNT(distinct p.plan_id) num_plans
FROM sys.query_store_runtime_stats rs
    JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id
    JOIN sys.query_store_query q ON q.query_id = p.query_id
    JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id
WHERE NOT (rs.first_execution_time > @interval_end_time OR rs.last_execution_time < @interval_start_time)
GROUP BY p.query_id, qt.query_sql_text, q.object_id
HAVING COUNT(distinct p.plan_id) >= 1
ORDER BY total_duration DESC
Quelqu'un a une idée de ce que je peux vérifier ?
Merci
A+