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

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top