2017-10-05 2 views
0

Nous avons créé une instance RDS postgres (m4.xlarge) avec 200 Go de stockage (IOPS provisionnées). Nous essayons de télécharger des données du magasin de données de l'entreprise vers les 23 tables de RDS en utilisant DataStage. Cependant, les téléchargements sont assez lents. Il faut environ 6 heures pour charger les enregistrements 400K.Chargement des données dans Postgres RDS est toujours lent après l'ajustement des paramètres

Ensuite, j'ai commencé à affiner les paramètres suivants selon Best Practices for Working with PostgreSQL:

autovacuum 0 
checkpoint_completion_target 0.9 
checkpoint_timeout 3600 
maintenance_work_mem {DBInstanceClassMemory/16384} 
max_wal_size 3145728 
synchronous_commit off 

Autre que ces derniers, je également désactivé multi AZ et back-up. SSL est cependant activé, pas sûr que cela changera quoi que ce soit. Cependant, après tous les changements, toujours pas beaucoup d'amélioration. DataStage télécharge des données en parallèle déjà ~ 12 threads. L'écriture IOPS est d'environ 40/sec. Cette valeur est-elle normale? Y a-t-il autre chose que je puisse faire pour accélérer le transfert de données?

+0

Votre instance RDS est-elle accessible au public? Est-ce qu'il passe par NAT ou d'autres goulets d'étranglement de réseau (proxies, VPN, etc) –

+0

Encore une chose .. avez-vous un tas d'index encore activés? Aussi, quelle est la taille de vos données (méga, pas de lignes) –

+0

@JoeLove l'instance est accessible au public sans proxy ou vpn, etc. Les données totales sont d'environ 50Go. Environ 10 Go de données ont été chargées en 5 heures. – ddd

Répondre

1

Dans Postgresql, vous devez attendre 1 aller-retour complet (latence) pour chaque instruction d'insertion écrite. Cette latence est la latence entre la base de données et la machine sur laquelle les données sont chargées.

Dans AWS, vous disposez de nombreuses options pour améliorer les performances.

  1. Pour commencer, vous pouvez charger vos données brutes sur une instance EC2 et commencer à importer à partir de là, cependant, vous ne pourrez probablement utiliser votre outil Datastage à moins qu'il puisse être chargé directement sur l'instance EC2.

  2. Vous pouvez configurer dataStage pour utiliser le traitement par lots dans lequel chaque instruction d'insertion contient en réalité plusieurs lignes. En général, plus il y en a, plus vite.

  3. Désactivez la compression des données et assurez-vous que vous avez fait tout ce que vous pouvez pour minimiser la latence entre les deux points de terminaison.