Обсуждение: Slow Executing queries

Поиск
Список
Период
Сортировка

Slow Executing queries

От
"Ing. Gabriel Monsalvo"
Дата:
<font face="Courier New">Tom:<br /><br />We have a IBM NetServer i with 2.5 GB de Ram and RAID 5 with 137 GB, two<br
/>PIVXeon at 1.6 GHZ... I mounted Linux in this server with<br />PostgreSQL 7.3, we start to deploy the database and we
havea lot of<br />performance problems, i need help for tune up the server....i read the faqs,<br />a lots of documents
aboutgets better performance but i don't obtain good<br />results...for example this table: OBLIGACION have 15 millions
ofrecords<br /><br />Column | Type | Modifiers<br />----------+-----------------------+-----------<br />cuil |
numeric(11,0)|<br />objeto | character varying(11) |<br />impuesto | numeric(3,0) |<br />concepto | numeric(3,0) |<br
/>tipobj| numeric(3,0) |<br />fecvtop | date |<br />fecvtod | date |<br />graba | date |<br />fecgen | date |<br />hora
|character varying(4) |<br />operador | character varying(10) |<br />numoble | numeric(13,0) |<br />puesto |
numeric(3,0)|<br />secsec | numeric(4,0) |<br />periodo | numeric(6,0) |<br />cuota | numeric(3,0) |<br />ctrlpago |
numeric(3,0)|<br />ddjjd | numeric(3,0) |<br />tipopp | numeric(4,0) |<br />nroppago | numeric(8,0) |<br />marca |
numeric(3,0)|<br />Indexes: numoble_oblig btree (numoble),<br />objeto_oblig btree (objeto),<br />periodo_oblig btree
(periodo)<br/><br />sapym=# explain select max(numoble) from obligacion where periodo=200100;<br />QUERY PLAN<br
/>----------------------------------------------------------------------------<br/>-----------------------<br
/>Aggregate(cost=6983070.47..6983070.47 rows=1 width=16)<br />-> Index Scan using periodo_oblig on obligacion
(cost=0.00..6978186.18<br/>rows=1953717 width=16)<br />Index Cond: (periodo = 200100::numeric)<br />(3 rows)<br /><br
/>>>there is a index for obligacion on periodo but this query takes over 2<br />minutes for finish.<br /><br
/><br/>sapym=# explain select count(*) from obligacion where periodo=200100;<br />QUERY PLAN<br
/>----------------------------------------------------------------------------<br/>----------------------<br
/>Aggregate(cost=6983070.47..6983070.47 rows=1 width=0)<br />-> Index Scan using periodo_oblig on obligacion
(cost=0.00..6978186.18<br/>rows=1953717 width=0)<br />Index Cond: (periodo = 200100::numeric)<br />(3 rows)<br /><br
/>canyou help to solve the problem? i really want to use PostgreSQL in my<br />organization but if i can't solve this
problemwe must<br />migrate to ugly DB2 .<br /><br />thanks in advance.<br /><br />Gabriel Monsalvo</font><br /><br
/><br/><br /><br /><br /><br /> ________________________________________________________________________<br /><br
/><fontname="verdana"> Este Mail Ha sido enviado por <a href="http://www.correomovil.com.ar"><b>CorreoMovil</b></a> -
Sucuenta POP este donde este</font><br /><br /> 

Re: Slow Executing queries

От
Administrador Squid
Дата:
Gabriel:
 No soy un administrador de mucha experiencia, pero también sufrí muchos problemas de rendimiento hasta que modifiqué
dos parámetros en postgresql.conf y en el kernel.
  Los parámetros que cambie en postgresql.conf son "sort_mem", donde debes poner cuantos kilobytes va a utilizar cada proceso
cuando deba realizar el ordenamiento de una tabla (ojo que si pones 10 megabytes. en este parámetro son 10 megabytes. por cada proceso que
esté realizando un ordenamiento en ese momento), y el otro es "shared_buffers", que es la cantidad de bloques de 8 kb. que se van
a utilizar de memoria compartida, para subir las tablas completas a memoria, por ejemplo.  Este último espacio se ocupa una única vez
y lo utilizan todos los procesos que cree el postmaster.
 Mi (modesta) configuración es:
 sort_mem = 1024 (un megabyte)
 shared_buffers = 2048 (16 megabytes)
 Seguramente tus números van a ser más grandes y quizá debas modificar un par de parámetros del kernel vía /etc/sysctl.conf y luego
ejecutar sysctl.
 Los parámetros que hay que tocar son shmall y shmmax y los valores se deben expresar en bytes.  El valor que se debe poner debe
ser igual o mayor (expresado en bytes por supuesto) que el de shared_buffers.

 Quizá esto ya lo hayas probado, si no que sirva, te mando unos enlaces interesantes de donde saque esta información y otros datos
copados.

http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
http://candle.pha.pa.us/main/writings/pgsql/performance.pdf

 Saludos,

Juan M. Fera
Maxiconsumo S.A.

Ing. Gabriel Monsalvo escribió:
Tom:

We have a IBM NetServer i with 2.5 GB de Ram and RAID 5 with 137 GB, two
PIV Xeon at 1.6 GHZ... I mounted Linux in this server with
PostgreSQL 7.3, we start to deploy the database and we have a lot of
performance problems, i need help for tune up the server....i read the faqs,
a lots of documents about gets better performance but i don't obtain good
results...for example this table: OBLIGACION have 15 millions of records

Column | Type | Modifiers
----------+-----------------------+-----------
cuil | numeric(11,0) |
objeto | character varying(11) |
impuesto | numeric(3,0) |
concepto | numeric(3,0) |
tipobj | numeric(3,0) |
fecvtop | date |
fecvtod | date |
graba | date |
fecgen | date |
hora | character varying(4) |
operador | character varying(10) |
numoble | numeric(13,0) |
puesto | numeric(3,0) |
secsec | numeric(4,0) |
periodo | numeric(6,0) |
cuota | numeric(3,0) |
ctrlpago | numeric(3,0) |
ddjjd | numeric(3,0) |
tipopp | numeric(4,0) |
nroppago | numeric(8,0) |
marca | numeric(3,0) |
Indexes: numoble_oblig btree (numoble),
objeto_oblig btree (objeto),
periodo_oblig btree (periodo)

sapym=# explain select max(numoble) from obligacion where periodo=200100;
QUERY PLAN
----------------------------------------------------------------------------
-----------------------
Aggregate (cost=6983070.47..6983070.47 rows=1 width=16)
-> Index Scan using periodo_oblig on obligacion (cost=0.00..6978186.18
rows=1953717 width=16)
Index Cond: (periodo = 200100::numeric)
(3 rows)

>> there is a index for obligacion on periodo but this query takes over 2
minutes for finish.


sapym=# explain select count(*) from obligacion where periodo=200100;
QUERY PLAN
----------------------------------------------------------------------------
----------------------
Aggregate (cost=6983070.47..6983070.47 rows=1 width=0)
-> Index Scan using periodo_oblig on obligacion (cost=0.00..6978186.18
rows=1953717 width=0)
Index Cond: (periodo = 200100::numeric)
(3 rows)

can you help to solve the problem? i really want to use PostgreSQL in my
organization but if i can't solve this problem we must
migrate to ugly DB2 .

thanks in advance.

Gabriel Monsalvo







________________________________________________________________________

Este Mail Ha sido enviado por CorreoMovil - Su cuenta POP este donde este