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?
hard-drive
ssd
performance
mysql
christophetd
la source
la source
Réponses:
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.
la source
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.
la source
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 :
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.
la source
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.)
la source
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:
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.
la source
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.
la source
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 bytes
données écrites sur le disqueDans 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.
la source
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.
C’est pourquoi il est recommandé de
Donc, une très grosse somme à la fois semble bien meilleure.
la source