Contexte
100 conseillers clients utilisent des widgets qui interrogent une vue SQL. Cette vue effectue de nombreux calculs et consomme beaucoup de CPU. Rapidement le CPU de la base de données atteint 100%.
Défi
La charge CPU sur la base étant telle qu'elle risque de bloquer les autres application. En fin de journée, la requête ne réponds quasiment plus.
Technologies utilisées
SGBD : MS SQL Server 2016 EE
Méthodologie et réalisation
Optimisation radicale par utilisation des tables In-Memory OLTP de SQL Server 2016 :
**Diagnostic** - Requête complexe avec nombreux calculs - Vue interrogée 100+ fois par seconde aux heures de pointe - Plans d'exécution parallèles saturant tous les CPU - Impact sur les autres applications de la base
**Solution In-Memory OLTP** 1. Création d'une table In-Memory pour le cache 2. Remplacement de la vue par une procédure stockée compilée nativement 3. Job de rafraîchissement toutes les 5 minutes 4. Exploitation du compilateur natif pour optimiser le code T-SQL
**Avantages techniques** - Données stockées en mémoire (pas d'I/O disque) - Code compilé en natif (pas d'interprétation T-SQL) - Pas de locks/latches sur les tables In-Memory - Exécution monothread ultra-rapide
Le gain de performance est spectaculaire : passage de 10 secondes à moins de 1 milliseconde !
Résultats
Une fois la procédure stockée compilée nativement utilisée en lieu et place de la requête sur la vue SQL, le CPU de la base de données retombe à 20%. La procédure renvois les données en moins de 1 ms au lieu de 10s. C'est 10000 fois plus rapide !
Visualisations

Analyse de charge CPU la nuit

Planification du job de rafraîchissement du cache

Détail de l'étape de rafraîchissement du cache

Impact du cache sur l'utilisation CPU
