Como sé si mi hardware ya no me permite ejecutar más rapidamente una setencia SELECT en PostgreSQL

From: Alfredo Rico <alfredorico(at)gmail(dot)com>
To: undisclosed-recipients:;
Subject: Como sé si mi hardware ya no me permite ejecutar más rapidamente una setencia SELECT en PostgreSQL
Date: 2014-05-04 23:14:02
Message-ID: CAGWUuq2AZbZTsd3RAua5nc_O2Cw+=zJd=NPGduJDfmoa=B-TgA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos amigos de la lista.

Estoy tratando de optimizar una simple consulta select en mi base de datos
postgresql y de verdad no sé si ya llegué al tope de lo que me ofrece mi
hardware subyacente.

Es una situación bastante simple. A conitnuación muestro una tabla de la
que omito algunas columnas y constraints por simplicidad además que no uso
esas columnas para mi query en estudio.

=> \d+ rmcv

Table "public.rmcv"
Column | Type | Modifiers |
Storage | Description
-------------------------------------+------------------------+-----------+----------+-------------
fecha_snapshot | date | not null |
plain |
saldo_contable | numeric(20,2) | |
main |
tasa_interes | numeric(5,2) | |
main |
Indexes:
"rmcv_fecha_snapshot" btree (fecha_snapshot)

La tabla posee 21.029.008 de registros.

La sentencia es:
select saldo_contable, tasa_interes, tasa_interes * saldo_contable as
multi from rmcv where fecha_snapshot = '2014-03-17' ;

A continuación el explain analyze

explain (analyze,buffer)

QUERY PLAN

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using idx_rm_cuentas_vistas_fecha_snapshot on rm_cuentas_vistas
(cost=0.00..106882.75 rows=976948 width=11) (actual time=0.032..729.346
rows=1043549 loops=1)
Index Cond: (fecha_snapshot = '2014-03-17'::date)
Buffers: shared hit=32369
Total runtime: 782.213 ms

Como pueden ver el tiempo es de 782.213 ms considerando que previamente
ejecuté un VACUUM (verbose, analyze) rmcv;

A continuación información sobre el servidor:

Se tienen 8GB de memoria RAM

~$ sudo lshw -C DISK
*-disk
description: SCSI Disk
product: LOGICAL VOLUME
vendor: HP
physical id: 0.0.0
bus info: scsi(at)0:0.0.0
logical name: /dev/sda
version: 5.14
serial: PACCRID12051LHD
size: 419GiB (450GB)
capabilities: 15000rpm partitioned partitioned:dos
configuration: ansiversion=5 signature=000abeda

Sólo hay una única partición sobre LVM.
$ df -h
/dev/mapper/brmsuiste--riskguard--des--vg-root 405G 242G 143G 63% /
...

(Procesador doble núcleo, sólo muestro uno)
sudo lshw -C CPU
*-cpu:0
description: CPU
product: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
vendor: Intel Corp.
physical id: 4
bus info: cpu(at)0
version: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
slot: Proc 1
size: 1600MHz
capacity: 2400MHz
width: 64 bits
clock: 532MHz

Los parámetros de entonación aplicados al postgresql fueron:

sysctl -w kernel.shmmax=2684354560

En postgresql.conf
shared_buffers = 2GB
effective_cache_size = 4GB
work_mem = 25MB
maintenance_work_mem = 128MB
random_page_cost = 1.0 # Este fué crucial dejarlo en uno.

Requiero que esa consulta sea más rápida. ¿Habrá algo más a nivel de
entonación que se pueda hacer? ¿Mi hardware ya no puede ejecutar más rapido?

Puede ser que 728 ms sea rápido sin embargo hay otros detalles que omito
acá para no desviarse del objetivo del post en donde este tiempo de
respuesta me resulta inaceptable.

Agradezco sus comentarios.

--
Saludos Cordiales.-
Alfredo Rico.
San Cristóbal - Venezuela.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2014-05-05 10:58:02 Re: ODBC 32 bits no funciona en win2008R2
Previous Message motum hesa 2014-05-03 00:46:40 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Error 08003 en ejecución local