Une importation massive de données MySQL sur un SSD peut-elle l'endommager?


28

Je dois importer pas mal de données (~ 100 millions de lignes, ~ 100 fois) dans une base de données MySQL. Actuellement, il est stocké sur mon disque dur et le goulot d'étranglement de mon importation semble être la vitesse d'écriture du disque dur.

J'ai entendu dire que les SSD n'aiment pas les écritures massives en continu et que cela a tendance à les endommager. Qu'est-ce que tu penses? Est-ce vraiment un problème sur les SSD modernes?


Tant que vous laissez (disons) 2-3 Go en dehors de la zone partitionnée pour un surapprovisionnement, je suppose que vous êtes en sécurité avec. Je ne vois pas beaucoup de problème avec ça. La plupart des SSD ont déjà une partie du disque qui n'est pas accessible au système d'exploitation. Cet espace est utilisé pour le nivellement de l'usure et le surprovisionnement, au cas où le disque dur serait trop plein. Ces Go supplémentaires donneront plus d'espace au SSD pour distribuer les données afin d'éviter des dommages. Si vous êtes un noyau dur et que vous souhaitez aller de l'avant, vous pouvez savoir combien de puces mémoire votre SSD possède et donner 1 Go par puce. 10 puces correspondent à 10 Go non partitionnés.
Ismael Miguel

5
Pour le peu que cela vaut, nous importons régulièrement beaucoup, beaucoup plus de données que cela. Une seule de nos tables contient beaucoup plus de données que vous n'en importez, et nous avons quelques centaines de tables. Nous utilisons des SSD. Je suppose que vous irez bien.
ChrisInEdmonton

4
De nos jours, les SSD sont suffisamment intelligents pour gérer eux-mêmes l'usure, même sans le support du système d'exploitation (même si le système d'exploitation demande de réécrire le même bloc, le contrôleur du SSD écrit de manière transparente dans un bloc différent à chaque fois), donc tout ira bien.

7
Hareng rouge. Le taux d'échec des SSD n'est pas une chose à craindre - il sera suffisamment long pour durer plus longtemps que la rouille rotative équivalente.
Sobrique

2
Les gens s'inquiètent beaucoup trop de leurs SSD. Fondamentalement, vous ne réussirez jamais à "détruire" votre SSD par accident, et même le faire exprès peut nécessiter des semaines ou des mois d'écriture continue. Même si vous le "détruisez", il fournira toujours les données en lecture seule. Arrêtez de vous inquiéter et utilisez-le. Vous pourriez tout aussi bien demander comment la tête de lecture / écriture de votre disque dur est usée par les accélérations.
mic_e

Réponses:


27

Ce n'est vraiment pas une réponse simple à cela.

Les SSD ne se soucient pas autant des écritures continues que du nombre de fois où un secteur particulier est écrasé. Lorsque les SSD sont sortis pour la première fois, quelque chose comme SQL était un mauvais mot car le système d'exploitation en général traitait le disque comme un disque dur traditionnel et les pannes étaient très fréquentes.

Depuis lors, les disques sont devenus plus gros, moins chers, plus fiables, destinés à plus de lecture / écriture et les systèmes d'exploitation sont devenus plus intelligents.

Les disques SSD en SQL sont non seulement courants, mais souvent encouragés. N'hésitez pas à parcourir le site sœur de DBA .

Mes pensées sont de le faire, en supposant que le serveur SQL est correctement construit avec des disques redondants. Sinon, attendez-vous finalement à un échec de toute façon.


5
"Sinon, attendez-vous finalement à un échec de toute façon." Si le serveur n'utilise des disques redondants, toujours attendre certainement un échec à un moment donné, et un plan pour elle. C'est juste qu'avec la redondance en place, une défaillance d'un seul périphérique de stockage a une probabilité beaucoup plus faible d'entraîner des temps d'arrêt du système.
un CVn du

@ MichaelKjörling oui, précisément. Dans mon esprit, "construit correctement" suppose également des sauvegardes de la base de données en cas de panne ... Mais parfois, même ce qui devrait être OK pour ne pas être dit doit être dit, merci.
Austin T French

19

Les lectures sont correctes et les disques SSD peuvent lire leurs bits sans aucun effet néfaste.

Les écritures sont une autre affaire. La suppression d'un bit affecte l'intégrité du bit et après un grand nombre d'écritures séquentielles, le bit cessera complètement d'accepter de nouvelles écritures. Il peut cependant encore être lu.

Permettez-moi de dire que les limites d'écriture sur les nouveaux disques d'entreprise sont énormes. Prenez le nouveau 845DC Pro de Samsung. Il est bon pour 10 écritures de lecteur par jour pendant 5 ans de garantie. J'imagine que cela fera le double de ce nombre. Pour résumer, c'est 14 600 To écrits sur 5 ans sur le modèle 800 Go.
Soit 2920 To par an,
soit 8 To par jour pendant cinq ans .

Montrez-moi un disque dur avec une garantie qui couvre une telle utilisation. Je ne suis même pas sûr que vous puissiez écrire 8 To sur un disque dur en une journée: - (débit moyen de 50 Mo / s * 60 (secondes) * 60 (minutes) * 24 (heures) = 4 320 000 Mo / jour = 4,32 To / jour) Il s'avère que vous ne pouvez pas (sur un lecteur moyen).

Tant que vous utilisez un lecteur comme celui-ci, basé sur V-NAND (ou SLC tout aussi durable), pas un basé sur TLC ou un mauvais flash MLC, tout devrait bien se passer. Et de toute façon, RAID 10 et les sauvegardes sont votre ami pour une raison. Et au moins si la limite d'écriture SSD devient un problème, vous pouvez toujours lire les données stockées dans les bits défectueux.

Les SSD sont également moins chers à utiliser, les modèles plus froids, plus silencieux et d'entreprise sont particulièrement résistants aux problèmes d'alimentation. Plus de craintes de crash de tête et bien sûr, une augmentation énorme des performances pour vos besoins d'accès à la base de données.


12
Puis-je demander pourquoi le downvote?
Ctrl-alt-dlt le

Vous pouvez demander, mais vous ne recevrez pas, apparemment.
Fund Monica's Lawsuit

12

L'écriture sur des SSD n'est pas nécessairement mauvaise. C'est l'écriture et la réécriture d'un seul bloc qui est mauvaise. Cela signifie que si vous écrivez un fichier, supprimez-le, puis réécrivez-le, ou apportez de petites quantités de modifications à un fichier encore et encore. Cela provoque une usure des SSD. Les bases de données entreraient certainement dans cette catégorie.

Cependant, selon cet article , des pétaoctets de données ont été écrits sur des SSD et sont toujours opérationnels. Cela est probablement dû aux progrès du nivellement de l'usure :

Porter des tentatives de mise à niveau pour contourner ces limitations en organisant les données de manière à ce que les effacements et les réécritures soient répartis uniformément sur le support. De cette façon, aucun bloc d'effacement unique ne tombe prématurément en raison d'une forte concentration de cycles d'écriture.

Dans votre situation particulière, je voudrais que les bases de données résident sur le SSD pour la vitesse, mais sauvegardées quotidiennement. Vous pouvez également envisager d'obtenir deux SSD dans une matrice RAID 1 également. La probabilité que deux SSD tombent en panne en même temps est faible.

Remarque: les matrices RAID ne sont PAS des sauvegardes !!!! Que vous utilisiez ou non une matrice RAID, ayez une sauvegarde. Que vous utilisiez ou non un SSD, ayez une sauvegarde.


1
RAID1 ferait très peu pour le type de dommage dont vous parlez. Le niveau d'usure est susceptible d'être déterministe, ce qui signifie qu'ils s'useront exactement au même rythme et de la même manière, ce qui provoquera des erreurs presque exactement aux mêmes endroits.
Aron

de l'article lié: "l'électronique dans le SSD va échouer bien avant que la NAND ne s'use" ... attendez, quoi?
Michael

4

Supposons que votre importation n'implique aucune mise à jour et aucune suppression. Vous faites donc toutes les insertions. Cela ne devrait être que l'écriture de nouvelles données dans le journal des transactions.

Cela signifie que lorsque des données sont ajoutées, elles sont toujours écrites dans un nouveau secteur. Il peut y avoir des tampons / swaps qui sont barattés / écrits plusieurs fois, mais en ignorant cela, toutes ces insertions n'entraîneraient théoriquement pas plus d'une écriture par secteur . En fonction de la façon dont MySQL est implémenté et du type d'insertion en bloc que vous effectuez, vous pouvez générer un deuxième ensemble d'écritures plus tard lorsque le journal des transactions est intégré au fichier de données principal (je pars d'une compréhension des différents moteurs de base de données , et en supposant que MySQL est quelque peu similaire dans la façon dont les journaux de transactions sont vidés).

Le fait est que vous ne "tournez" pas le SSD. Autrement dit, vous n'effectuez pas beaucoup de modifications / mouvements / suppressions / etc. cela pourrait réécrire plusieurs fois sur les mêmes secteurs. Donc, vous allez essentiellement générer un très petit nombre d' écritures par secteur et c'est ce qui compte vraiment.

En supposant que vous ne remplissez pas complètement le SSD, il devrait y avoir suffisamment d'espace libre pour les points chauds (tels que les tampons / swap) qui sont barattés pour minimiser l'usure grâce aux algorithmes de nivellement de l'usure.

(Les index peuvent être un autre problème. Comme les index clusterisés dans de nombreuses bases de données impliquent beaucoup de modifications à mesure que les données sont insérées. Habituellement, lorsque vous effectuez de grands incidents dans un environnement d'entrepôt de données, vous désactivez les index lors de l'importation en bloc, puis mettez-les à jour après.)


3

Ce n'est pas un problème.

Tout d'abord, les SSD se sont considérablement améliorés au cours des dernières années. Le surapprovisionnement et le nivellement de l'usure (et dans une petite mesure, la commande TRIM, bien que non applicable dans votre cas) les ont rendus tout à fait appropriés en tant que disques polyvalents à usage intensif. Je n'utilise rien d'autre que SSD sur mon PC de développement (qui fait régulièrement beaucoup de compilation) sans même s'approcher du nombre de cycles d'effacement.

En outre, cette déclaration:

Les SSD n'aiment pas les écritures massives en continu, et cela a tendance à les endommager

est carrément faux. Le contraire est le cas, de petites écritures fréquentes , le cas échéant, peuvent endommager les SSD.

Contrairement aux disques durs traditionnels, les SSD (ou plutôt le flash NAND à l'intérieur) sont physiquement organisés en grands blocs qui contiennent logiquement plusieurs secteurs. Une taille de bloc typique est de 512 Ko alors que les secteurs (qui est l'unité utilisée par le système de fichiers) sont traditionnellement de 1 Ko (différentes valeurs sont possibles, il y a deux décennies, 512 Go étaient courants).
Trois choses peuvent être faites avec un bloc de 512 Ko. Il peut être lu, une partie ou tout peut être programmé (= écrit dans), et le tout peut être effacé. L'effacement est ce qui pose problème car le nombre de cycles d'effacement est limité et vous ne pouvez effacer qu'un bloc complet.

Par conséquent, les grandes écritures sont très conviviales pour les disques SSD, tandis que les petites écritures ne le sont pas.

Dans le cas de petites écritures, le contrôleur doit lire un bloc, modifier la copie, effacer un autre bloc et le programmer. Sans mise en cache, dans le pire des cas, vous devez effacer 512 000 blocs pour écrire 512 kilo-octets. Dans le meilleur des cas (écriture large et continue), vous devez effectuer exactement 1 effacement.

Faire une importation dans une base de données MySQL est très différent de faire de nombreuses requêtes d'insertion distinctes. Le moteur est capable de réduire un grand nombre d'écritures (données et indices) ensemble et n'a pas besoin de se synchroniser entre chaque paire d'insertions. Cela équivaut à un modèle d'écriture beaucoup plus convivial pour les SSD.


2
Les secteurs sont traditionnellement de 1 Ko? Citation, s'il vous plaît. Sur les disques rotatifs, deux tailles de secteur sont courantes: 512 octets (traditionnels, comme sur mes disques durs de 4 To, en IBM-compatible remonte à environ 1981) et 4096 octets ("Advanced Format"). Les unités d'allocation au niveau du système de fichiers peuvent varier en taille, mais c'est une question complètement différente et est purement une construction de système de fichiers pour garder les structures de données suivant l'allocation à une taille raisonnable dans les systèmes de fichiers qui ne les développent pas dynamiquement selon les besoins. ; en outre, je doute que les tailles de blocs fixes de 1 Kio soient très courantes dans la pratique.
un CVn du

@ MichaelKjörling: Merci pour votre contribution très précieuse. Vous avez bien sûr lu et compris la réponse, n'est-ce pas? Le fait pertinent est que les SSD ont des tailles de bloc physiques qui sont beaucoup plus grandes que cela, quelle que soit la taille du secteur logique (que j'ai vu de 500 à 4096 octets, même sans taille de deux). Aucune citation nécessaire.
Damon

1

Les SSD ne l'aiment pas. Si vous maintenez la vitesse d'écriture maximale pendant 5 à 10 ans (24 heures par jour, 7 jours par semaine), vous risquez de vous retrouver avec un SSD cassé.

Ofc. Après 5 ans, la plupart des serveurs ont atteint leur fin de vie économique.


Avertissement:
n'essayez pas ceci avec la toute première génération de SSD. Celles où moins robustes.


Je suis bien conscient que l'utilisation d'un disque à sa capacité maximale 7/24 finirait par l'endommager ... Ma question est de savoir s'il est sûr pendant une durée limitée (disons plusieurs fois 2-3 heures)
christophetd

@christophetd - Cela dépend. Mettez à jour votre question pour estimer la quantité de données. C'est plus sur le pourcentage du lecteur. Il est pire d'écrire 20 Go par heure sur un SSD de 80 Go que de faire 20 Go par heure sur un SSD de 1 To.
Ramhound

Sur la même note: Avoir un lecteur presque vide signifie que la plupart des cellules flash «vides» sont utilisées dans le nivellement de l'usure. (et un disque plus gros avec la même quantité de données est% plus émetteur).
Hennes du

1

Si vous êtes vraiment intéressé à comprendre les détails, vous aurez besoin d'une réponse à la question suivante:

En moyenne, combien d'octets se trouvent dans chaque ligne?

Si vous pouvez me dire qu'il y a 10 colonnes, chaque colonne est varchar (100), et l'encodage est UTF-8 alors je peux deviner au pire des cas que vous avez 4 000 octets de données par ligne et ajoutez quelques octets supplémentaires pour les métadonnées permettent donc de dire 4 200 octets?

Votre torture SQL calcule les 4,200 x 100 x 100,000,000 = 42,000,000,000,000 bytesdonnées écrites sur le disque

42 000 000 000 000/1 000 = 42 000 000 000 Ko

42 000 000 000/1 000 = 42 000 000 Mo

42 000 000/1 000 = 42 000 Go

42 000/1 000 = 42 To

Dans ce pire scénario théorique, vous allez écrire 42 To sur le disque

Selon cet article , fourni par @KronoS, vous devriez être bon pour environ 25 tours de plus de votre torture SQL.


-2

Comme l'a dit l'affiche de ce texte sur les SSD , ce qui est vraiment dangereux, c'est d'écrire encore et encore de petits morceaux de données.

  • les bits sont stockés dans des cellules à {1,2,3} bits. Ceux-ci ont une durée de vie limitée.
  • les cellules sont regroupées en [2-16] pages KB (la plus petite unité inscriptible)
  • les pages sont regroupées en blocs (128-256 pages) (la plus petite unité effaçable)
  • pour qu'une page soit réécrite, elle --- et son bloc entier --- doivent d'abord être effacés

C’est pourquoi il est recommandé de

  • n'écrivez jamais moins d'une page à la fois,
  • tamponner les petites écritures, et
  • demandes de lecture et d'écriture séparées
  • "Une grande écriture monothread vaut mieux que de nombreuses petites écritures simultanées"

Donc, une très grosse somme à la fois semble bien meilleure.


2
Cette réponse ne fournit pas vraiment d'informations pertinentes qui n'ont pas été dites, en plus, c'est essentiellement un commentaire avec un lien qui y est contenu.
Ramhound

@Ramhound: donneriez-vous votre accord pour votre commentaire (merci, btw), et cela aussi, pour être étiqueté obsolète? Ou considérez-vous toujours les informations déjà dites / non pertinentes?
serv-inc

Bien que ce ne soit plus un lien, honnêtement, les informations techniques elles-mêmes ne s'appliquent pas vraiment à la question de l'utilisateur concernant l'exécution d'une base de données sur un SSD I
Ramhound

@Ramhound: pour moi, il s'agissait de l'importation, pas de la course. À en juger par les votes négatifs, il semble que vous ayez raison
serv-inc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.