J'ai une instance RDS (Postgres) avec stockage SSD 1000 Go, mais les données ne font que 100 Go.
Comment réduire facilement la ressource de stockage de RDS?
RDS ne vous permet pas de réduire la quantité de stockage allouée à une instance de base de données, mais seulement de l'augmenter.
Pour déplacer votre base de données vers moins de stockage, vous devez créer une nouvelle instance RDS avec l'espace de stockage souhaité, puis utiliser quelque chose comme pg_dump/pg_restore pour déplacer les données de l'ancienne base de données vers la nouvelle.
Sachez également qu'une instance RDS avec 1 000 Go de stockage SSD a un IOPS de base de 3 000. Une instance RDS avec 100 Go de stockage SSD a un IOPS de base de 300, avec des rafales occasionnelles allant jusqu'à 3 000.
D'après l'aide d'AWS ici , voici le processus complet qui a fonctionné pour moi:
1) Vider la base de données dans un fichier : exécutez-le sur une machine disposant d'un accès réseau à la base de données: pg_dump -Fc -v -h your-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username your-databasename > your-databasename.dump
2) Dans la console AWS, créez une nouvelle instance RDS avec un stockage plus petit. (Vous souhaiterez probablement le configurer avec le même nom d'utilisateur, mot de passe et nom de base de données.)
3) Restaurez la base de données sur la nouvelle instance RDS : exécutez cette commande (évidemment sur la même machine que la commande précédente): pg_restore -v -h the-new-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username -d your-databasename your-databasename.dump
(Notez, à l'étape 3, que j'utilise le point de terminaison de la nouvelle instance RDS. Notez également qu'il n'y a pas de :5432
à la fin des adresses de noeud final.)
Amazon ne permet pas de réduire la taille du disque dur de l'instance RDS, vous pouvez avoir deux options pour réduire la taille du stockage.
1: -si vous pouvez vous permettre des temps d'arrêt, la sauvegarde mysqldump de l'ancienne instance peut être restaurée sur une nouvelle instance ayant une taille de stockage moindre.
2: - Vous pouvez utiliser le service de migration de base de données pour déplacer des données d'une instance vers une autre instance sans aucun temps d'arrêt.
Lorsque vous utilisez RDS, au lieu de faire une "planification de capacité" matérielle typique, vous provisionnez juste assez d’espace disque à court ou moyen terme (dépend), l’étendez si nécessaire.
Comme @Mark B l'a mentionné, vous devez également surveiller les IOPS. Vous pouvez utiliser des "IOPS provisionnés" si vous avez besoin d'une base de données hautes performances.
Vous devez effectuer votre ajustement des coûts par rapport aux performances avant de vous lancer dans la partie de stockage de l'espace disque. Par exemple. si vous réduisez de 1000 Go à 120 Go, pour l'ouest américain, vous économiserez 0,125 x 880 Go = 110/mois. Mais le Max IOPS sera 120x 3 = 360IOPS
Il vous en coûtera 0,10 $ pour provisionner des IOPS supplémentaires pour augmenter les performances. Dites si vous avez réellement besoin de 800IOPS pour une réponse plus élevée des utilisateurs en ligne,
(800-360) x 0,10 = 44 $. Ainsi, l'économie réelle peut finalement "être moindre". Vous n'économiserez pas d'argent si votre RDS a besoin de 1100 IOPS constants. Et un autre facteur d'actualisation peut également entrer en jeu.
Vous pouvez le faire en migrant la base de données vers Aurora.
Si vous ne voulez pas d'Aurora, le service de migration de données est la meilleure option à mon avis. Nous déplaçons la production vers Aurora, donc cela n'avait pas d'importance, et nous pouvons toujours la récupérer d'Aurora en utilisant pg_dump
ou DMS. (Je suppose que cela s'appliquera également à MySQL, mais je ne l'ai pas testé.)
Mon objectif spécifique était de réduire la taille finale des instantanés RDS Postgres après avoir mis hors service certaines instances initialement créées avec 1 To + de stockage chacune.
Vous pouvez vous arrêter à 3 si vous le souhaitez et utiliser simplement la base de données Aurora à l'avenir.