Outil d'analyse de bases de données
Application WinForms C# pour centraliser MySQL et Azure SQL
L'objectif
Développer une application WinForms en C# capable de centraliser, analyser et maintenir plusieurs bases de données MySQL et Azure SQL réparties sur les environnements DEV / PREPROD / PROD.
Le but : faciliter l'administration au quotidien, détecter les anomalies (index inutiles, clés étrangères orphelines, tables surdimensionnées) et automatiser les tâches répétitives. Un véritable mini-outil DBA interne.
Architecture
- Interface WinForms : boutons, checkboxes, ProgressBar, logs temps réel via
RichTextBox - Connexion multi-environnement : chaînes de connexion stockées dans
App.config, sélection dynamique entre DEV / PREPROD / PROD - Drivers :
MySqlConnectionpour MySQL,SqlConnectionpour Azure SQL - Base interne
db_cooldown_tool: miroir des métadonnées deinformation_schema(TABLES, COLUMNS, INDEX, TRIGGERS, VIEWS…). Permet d'analyser les bases de prod sans les solliciter directement
Fonctionnalités principales
Analyse des tables
Taille, nombre de lignes, nombre d'index, ratio index/données, date de mise à jour. Classe DbStatsExtractor.
Analyse des index
Détection des index non utilisés, doublons, invisibles. Classe IndexAnalyzer. Objectif : optimiser les performances et la taille des bases.
Analyse avancée
Repérage des clés étrangères orphelines, des colonnes / tables / schémas inutilisés.
Export personnalisable
Formats CSV et HTML, sélection des colonnes via checkboxes (taille DB, lignes, index, date, ratio…).
Maintenance
Création automatique de la base interne, reset, suppression, rechargement des métadonnées.
Support Azure SQL
Couverture complète : analyse multi-bases, connexions multiples (une par base), requêtes sys.resource_stats et vues sys.
Monitoring temps réel — verrous & exécutions
Une fonctionnalité dédiée permet de visualiser les verrous actifs et les requêtes en cours d'exécution sur une base.
L'utilisateur choisit le temps de rafraîchissement (polling configurable) pour suivre en direct ce qui se passe côté serveur — utile pour diagnostiquer les blocages et identifier les requêtes longues.
Performance & UX
- Analyses longues exécutées en async / multithreading — l'UI reste fluide pendant les traitements
- Boutons Stop et Pause / Reprendre pour reprendre la main à tout moment
- Suivi temps réel via
ManageInfoUser("message", increment)qui met à jour la ProgressBar, les logs et le label en parallèle - Custom controls (checkbox stylisée, ProgressBar colorée) pour un rendu cohérent dans toute l'application
Difficultés rencontrées
- Gestion propre des connexions multi-environnements (pool, libération, timeouts)
- Différences de syntaxe et de métadonnées entre MySQL et Azure SQL (
information_schemavs vuessys) - Performance des requêtes d'analyse sur de grosses bases — d'où l'intérêt de la base miroir
- Limites de WinForms pour certains rendus (recours au custom drawing)
- Synchronisation propre du multithreading avec l'UI (pattern
Invokeet progression coordonnée)
Stack technique
- Langage : C# / .NET
- Interface : WinForms
- Bases : MySQL, Azure SQL Server
- Métadonnées :
information_schema, vuessys - Concurrence :
async/Task, multithreading
Bilan
Un vrai mini-outil DBA interne. Le stage m'a permis de monter en compétence sur la manipulation SQL avancée, la programmation asynchrone et la conception d'une architecture modulaire en C#.
J'ai aussi appris à penser un outil destiné à des utilisateurs internes plus expérimentés que moi : ergonomie sobre, retours d'information clairs, possibilité de couper un traitement long.