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...
Quelqu'un a une idée de ce que je peux vérifier ?
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
Merci
A+
Partager