pgsql requête lente sur le tableau de 500 millions de lignes
-
01-11-2019 - |
Question
J'ai un tableau qui conserve des mesures des latences entre les nœuds exécutant les tâches MPI dans un grand cluster. La table ressemble à ceci:
CREATE TABLE latency(
from_rank int,
to_rank int,
from_host varchar(20),
to_host varchar(20),
from_cpu varchar(20),
to_cpu varchar(20),
latency float8);
CREATE INDEX ON latency(from_host, to_host);
Maintenant, après une grande expérience, j'ai collecté plus de 500 millions de lignes de données. Je trouve que l'interrogation de ces données est douloureusement lente, ci-dessous est un exemple de nombre de sélection (*)
psql (9.4devel)
Type "help" for help.
routing=# \timing
Timing is on.
routing=# SELECT COUNT(*) FROM latency;
count
-----------
522190848
(1 row)
Time: 759462.969 ms
routing=# SELECT COUNT(*) FROM latency;
count
-----------
522190848
(1 row)
Time: 96775.036 ms
routing=# SELECT COUNT(*) FROM latency;
count
-----------
522190848
(1 row)
Time: 97708.132 ms
routing=#
J'exécute à la fois le serveur PGSQL et le client sur la même machine, qui a 4 Xeon E7-4870S (40 cœurs / threads 80 au total) et 1 To de RAM. L'effet de la mise en cache des fichiers Linux est évident: la première requête a pris bien plus de 12 minutes tandis que les suivantes ont pris environ 1,5 min.
Y a-t-il quelque chose que je puisse faire pour que la requête fonctionne plus rapidement, car 1,5min n'est pas exactement réactive.
Merci.
Pas de solution correcte