Domanda

Ho una tabella che mantiene le misurazioni delle latenze tra i nodi che eseguono le attività MPI in un cluster di grandi dimensioni. Il tavolo sembra così:

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);

Ora dopo un grande esperimento ho raccolto oltre 500 milioni di righe di dati. Trovo che interrogare questi dati dolorosamente lenti, di seguito è un esempio di conteggio selezionato (*)

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=#

Sto eseguendo sia il server PGSQL che il client sulla stessa macchina, che ha 4 Xeon E7-4870 (40 core/80 thread in totale) e 1 TB di RAM. L'effetto della memorizzazione nella cache dei file Linux è ovvio: la prima query ha richiesto ben oltre 12 minuti mentre quelli successivi hanno richiesto circa 1,5 minuti.

C'è qualcosa che posso fare per far funzionare la query più veloce, poiché 1,5 minuti non è esattamente reattivo.

Grazie.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top