PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quelle est la meilleure façon de charger une quantité massive de données dans PostgreSQL ?

Ne PAS utiliser des index sauf pour la clé numérique unique.

Cela ne correspond pas à toutes les théories de base de données que nous avons reçues, mais des tests avec de lourdes charges de données le démontrent. Voici un résultat de 100M de chargements à la fois pour atteindre 2 Milliards de lignes dans une table, et à chaque fois un tas de requêtes diverses sur la table résultante. Premier graphique avec NAS 10 gigabits (150 Mo/s), deuxième avec 4 SSD en RAID 0 (R/W @ 2 Go/s).

Si vous avez plus de 200 millions de lignes dans une table sur des disques normaux, c'est plus rapide si vous oubliez les index. Sur les SSD, la limite est à 1 milliard.

Je l'ai fait aussi avec des partitions pour de meilleurs résultats mais avec PG9.2 il est difficile d'en bénéficier si vous utilisez des procédures stockées. Vous devez également veiller à écrire/lire sur une seule partition à la fois. Cependant, les partitions sont la voie à suivre pour maintenir vos tables sous le mur de 1 milliard de rangées. Cela aide aussi beaucoup pour multitraiter vos charges. Avec SSD, un seul processus me permet d'insérer (copier) 18 000 lignes/s (avec certains travaux de traitement inclus). Avec le multitraitement sur 6 CPU, il passe à 80 000 lignes/s.

Surveillez votre utilisation du processeur et des E/S lors des tests pour optimiser les deux.