D'accord, alors tout d'abord, permettez-moi de dire que je ne suis pas un opérateur, mais un développeur. Je vais donc dans un peu de terre inconnue ici, alors soyez indulgent avec moi.
Je souhaite utiliser une machine virtuelle Azure pour extraire un fichier XML de 50 Go à partir d'un fichier zip de 1,9 Go. J'ai donc testé la taille d'instance sur Azure que je devrais utiliser pour obtenir de bonnes performances tout en ne payant pas plus que ce dont j'ai besoin.
Cependant, les performances du disque des machines virtuelles Azure n'ont pas été incroyables, et je voudrais savoir si c'est moi qui fais quelque chose de mal, ou si mes résultats sont ce à quoi on peut s'attendre.
Tout d'abord, avec quoi ai-je testé? J'ai une application de console .NET personnalisée qui ne fait que prendre un fichier zip comme argument et commence immédiatement à extraire le fichier zip dans le même répertoire que le fichier zip. Pendant que l'extraction se poursuit, l'application calcule le nombre de mégaoctets l'application a écrit dans le fichier cible par seconde et l'a édité.
Sur ma machine de développement local, j'obtiens de très bonnes performances avec cette application, 160-210 Mo / s écrite. Ainsi, l'ensemble du processus d'extraction prend environ 8 minutes. Les spécifications de ma machine locale sont Intel Core i7 950, 3 GHz, 4 cœurs (8 logiques), 12 Go de RAM, Samsung SSD 830 series 250 Go.
D'accord, j'ai donc commencé à tester différentes tailles d'instances, et voici mes résultats.
- Sur une instance A4 avec Windows Server 2012 Datacenter R2 (8 cœurs, 14 Go de RAM) avec un RAID rayé de 4 disques virtuels utilisant le même compte de stockage, sans mise en cache de l'hôte, j'ai obtenu une stabilité de 30 à 35 Mo / s, ce qui signifie que l'ensemble l'extraction a pris 24 minutes et 48 secondes. J'ai également essayé d'activer la mise en cache de l'hôte, mais cela n'a pas vraiment fait de différence.
- Sur une instance D4 avec Windows Server 2012 Datacenter (8 cœurs, 28 Go de RAM, 500 Go de disque SSD local), j'ai obtenu de très bonnes performances (150+ Mo / s) pendant les premières minutes, puis des performances variables avec des pics à 200 Mo / s et vallées à 9 Mo / s. Les performances moyennes se situaient entre 70 et 100 Mo / s. L'extraction a pris 9 min et 40 secondes.
- Sur une instance D3 avec Windows Server 2012 Datacenter (4 cœurs, 14 Go de RAM, 250 Go de disque SSD local), j'ai obtenu de très bonnes performances (150+ Mo / s) la première minute, mais ensuite les performances ont baissé pour se stabiliser à 20-40 Mo / s, ce qui rend le processus d'extraction prendre 21 minutes et 49 secondes.
Sur une instance D2 et D1, les performances du disque sont pires que sur le D3.
Et cela me surprend vraiment. Comment un disque SSD local peut-il fonctionner si mal, comme il le fait sur les instances D1, D2 et D3? Et quelqu'un sait-il pourquoi les performances du disque diffèrent tellement entre D1 et D4? Est-ce un problème de mémoire? Lorsque je regarde le gestionnaire de tâches pendant l'extraction, la consommation de mémoire explose. Je soupçonne que c'est parce que Windows met en cache les données écrites, mais lorsqu'il manque de mémoire, il doit vider les données sur le disque. Lorsque cela se produit, les performances du disque diminuent. Mais cela ne se produit pas sur ma machine locale, alors pourquoi une mise en cache aussi agressive est-elle nécessaire sur ces machines virtuelles?
Je sais qu'il y a des différences entre ma machine locale et une machine virtuelle hébergée dans Azure, mais est-ce que les performances du disque que je connais sont vraiment à prévoir?
(J'ai initialement posté ma question sur Stackoverflow , car je soupçonnais que c'était ma candidature qui en était la cause. Mais je n'en suis plus si sûr)
Peut-être que ce n'est pas lié à la mémoire. Les disques "physiques" sur Azure utilisent ce qu'on appelle le stockage Blob et c'est la raison pour laquelle les performances ne sont pas les mêmes que sur votre ordinateur local, même avec un matériel similaire. Vous pouvez trouver plus d'informations sur ce lien . Cela semble être un problème courant pour la communauté SQL Server qui dépend fortement des performances du disque. Je citerai un article que j'ai trouvé à ce sujet
Les espaces de stockage sont une fonctionnalité intégrée de Windows Server 2012 qui vous permet d'utiliser plusieurs disques physiques pour créer un seul disque virtuel, donc comme solution de contournement pour les limitations d'E / S du disque VM lui-même. Citant encore:
Cet article vous montrera les étapes pour créer un espace de stockage.
Vous devriez essayer ceci en premier. Vous pouvez probablement même utiliser une instance plus petite car le service de stockage est un service distinct de l'instance elle-même.
la source