Bonjour,
J'utilise une application éditeur (donc pas la main sur ce qu'elle fait, ni le détail de ce qu'elle fait vraiment).
Sur deux machines (une de DEV et une de TEST) j'ai SQL Server 2014 Express.
Chacune des machines a 10 Go de mémoire. La DEV a 4 CPU, la TEST n'en a que deux.
Ce sont des VM hébergées sous KVM.
Les serveurs ne sont pas dédiés, à savoir que d'autres applications que SQL Server tournent dessus (IIS et module "Win" de l'application).
SQL Server Express étant fortement limité en capacité RAM et CPU, je doute très fortement que cela ait le moindre impact que d'autres applications tournent en même temps, d'autant que le gros goulot d'étranglement, selon moi, devrait être la baie de disque, qui est de toute façon commune pour toutes les VM (il y en a des dizaines, on est dans un datacenter).
Bref. On lance un programme d'import de données.
Classique : lecture d'un fichier CSV, vérification de règles de gestion, insertion de données/mises à jour dans la base.
En soit, la technologie utilisée par ce module d'import est merdique et contre-performante (ligne à ligne, triggers logiciels, etc.)
Le module d'import utilise entre 5 et 10% de CPU.
C'est lui qui fait le plus d'accès disques pour alimenter un fichier de log.
Ensuite, vient SQL Server, qui utilise entre 60 et 70% de CPU, et autant d'accès disque pour alimenter le journal des transactions.
Ce que je ne m'explique pas, c'est cette utilisation CPU de SQL Server : qu'est-ce qu'il fabrique bon dieu ?
Et au final, ça met 3 heures pour importer 60 000 lignes !
Chez d'autres clients, avec une configuration similaire (y compris sur une VM hébergée sur mon ordinateur portable bien moins performant) j'insère le même nombre de données (avec des traitements similaires et une base de taille similaire) en moins de 5 minutes.
Qu'est-ce qui peut expliquer une telle lenteur ?
Si je fait un copier/coller d'un fichier sur le disque, ça tourne à 400 Mo/s. Donc c'est pas un souci de disque (enfin, je pense pas). Pas de notion de réseau puisqu'on est 100% en local.
Occupation de la RAM à 50% au total.
La base fait 350 Mo (une broutille quoi...)
Bref, je sèche.
Partager