Architecture & Performance
Retour aux études de cas
DATABASESAssurance

Un cache de données avec une table in-memory MSSQL

2 jours

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

Analyse de charge CPU la nuit

Planification du job de rafraîchissement du cache

Planification du job de rafraîchissement du cache

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

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

Impact du cache sur l'utilisation CPU

Impact du cache sur l'utilisation CPU