From: | Rémi Cura <remi(dot)cura(at)gmail(dot)com> |
---|---|
To: | Carlos Eduardo Sotelo Pinto <carlos(dot)sotelo(dot)pinto(at)gmail(dot)com> |
Cc: | Merlin Moncure <mmoncure(at)gmail(dot)com>, floriparob(at)gmail(dot)com, postgres performance list <pgsql-performance(at)postgresql(dot)org>, PostgreSQL General <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: [GENERAL] Re: [GENERAL] Help on ṕerformance |
Date: | 2013-10-04 08:46:06 |
Message-ID: | CAJvUf_vK=tHoNX+swdLiJgvBWFnmpqfhj=_XwHgz6=vVC85bMA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda pgsql-general pgsql-performance |
Hey short trick :
to avoid to use the schema name multiple time (more readable and more easy
to re use).
You can use the
SET search_path gpstracking_device_tracks, public;
(see manual here :
http://www.postgresql.org/docs/current/static/sql-set.html)
Cheers,
Rémi-C
2013/10/2 Carlos Eduardo Sotelo Pinto <carlos(dot)sotelo(dot)pinto(at)gmail(dot)com>
> Thanks to all
>
> I have fix that refactoring the function
>
> BEGIN
> arr := regexp_split_to_array(_imeis, E'\\s+');
> RETURN QUERY
> SELECT
> gpstracking_device_tracks.imei,
> gpstracking_device_tracks.device_id,
> gpstracking_device_tracks.date_time_process,
> gpstracking_device_tracks.latitude,
> gpstracking_device_tracks.longitude,
> gpstracking_device_tracks.course,
> gpstracking_device_tracks.speed,
> gpstracking_device_tracks.mileage,
> gpstracking_device_tracks.gps_signal,
> gpstracking_device_tracks.gsm_signal,
> gpstracking_device_tracks.alarm_status,
> gpstracking_device_tracks.gps_status,
> gpstracking_device_tracks.vehicle_status,
> gpstracking_device_tracks.alarm_over_speed,
> gpstracking_device_tracks.other,
> gpstracking_device_tracks.address
> FROM (
> SELECT
> gpstracking_device_tracks.imei,
> gpstracking_device_tracks.device_id,
> gpstracking_device_tracks.date_time_process,
> gpstracking_device_tracks.latitude,
> gpstracking_device_tracks.longitude,
> gpstracking_device_tracks.course,
> gpstracking_device_tracks.speed,
> gpstracking_device_tracks.mileage,
> gpstracking_device_tracks.gps_signal,
> gpstracking_device_tracks.gsm_signal,
> gpstracking_device_tracks.alarm_status,
> gpstracking_device_tracks.gps_status,
> gpstracking_device_tracks.vehicle_status,
> gpstracking_device_tracks.alarm_over_speed,
> gpstracking_device_tracks.other,
> gpstracking_device_tracks.address,
> ROW_NUMBER() OVER(PARTITION BY gpstracking_device_tracks.imei ORDER BY
> gpstracking_device_tracks.date_time_process DESC) as rnumber
> FROM gpstracking_device_tracks
> WHERE gpstracking_device_tracks.imei = ANY(arr)
> AND gpstracking_device_tracks.date_time_process >= date_trunc('hour',
> now())
> AND gpstracking_device_tracks.date_time_process <= NOW()
> ) AS gpstracking_device_tracks
> WHERE gpstracking_device_tracks.rnumber = 1;
> END;
>
>
> 2013/10/2 Merlin Moncure <mmoncure(at)gmail(dot)com>
>
>> On Mon, Sep 30, 2013 at 10:03 AM, Carlos Eduardo Sotelo Pinto
>> <carlos(dot)sotelo(dot)pinto(at)gmail(dot)com> wrote:
>> >
>> > I need a help on postgresql performance
>> >
>> > I have configurate my postgresql files for tunning my server, however
>> it is
>> > slow and cpu resources are highter than 120%
>> >
>> > I have no idea on how to solve this issue, I was trying to search more
>> infor
>> > on google but is not enough, I also have try autovacum sentences and
>> reindex
>> > db, but it continues beeing slow
>> >
>> > My app is a gps listener that insert more than 6000 records per minutes
>> > using a tcp server developed on python twisted, where there is no
>> problems,
>> > the problem is when I try to follow the gps devices on a map on a
>> relatime,
>> > I am doing queries each 6 seconds to my database from my django app, for
>> > request last position using a stored procedure, but the query get slow
>> on
>> > more than 50 devices and cpu start to using more than 120% of its
>> resources
>> >
>> > Django App connect the postgres database directly, and tcp listener
>> server
>> > for teh devices connect database on threaded way using pgbouncer, I
>> have not
>> > using my django web app on pgbouncer caause I dont want to crash gps
>> devices
>> > connection on the pgbouncer
>> >
>> > I hoe you could help on get a better performance
>> >
>> > I am attaching my store procedure, my conf files and my cpu, memory
>> > information
>> >
>> > **Stored procedure**
>> >
>> > CREATE OR REPLACE FUNCTION gps_get_live_location (
>> > _imeis varchar(8)
>> > )
>> > RETURNS TABLE (
>> > imei varchar,
>> > device_id integer,
>> > date_time_process timestamp with time zone,
>> > latitude double precision,
>> > longitude double precision,
>> > course smallint,
>> > speed smallint,
>> > mileage integer,
>> > gps_signal smallint,
>> > gsm_signal smallint,
>> > alarm_status boolean,
>> > gsm_status boolean,
>> > vehicle_status boolean,
>> > alarm_over_speed boolean,
>> > other text,
>> > address varchar
>> > ) AS $func$
>> > DECLARE
>> > arr varchar[];
>> > BEGIN
>> > arr := regexp_split_to_array(_imeis, E'\\s+');
>> > FOR i IN 1..array_length(arr, 1) LOOP
>> > RETURN QUERY
>> > SELECT
>> > gpstracking_device_tracks.imei,
>> > gpstracking_device_tracks.device_id,
>> > gpstracking_device_tracks.date_time_process,
>> > gpstracking_device_tracks.latitude,
>> > gpstracking_device_tracks.longitude,
>> > gpstracking_device_tracks.course,
>> > gpstracking_device_tracks.speed,
>> > gpstracking_device_tracks.mileage,
>> > gpstracking_device_tracks.gps_signal,
>> > gpstracking_device_tracks.gsm_signal,
>> > gpstracking_device_tracks.alarm_status,
>> > gpstracking_device_tracks.gps_status,
>> > gpstracking_device_tracks.vehicle_status,
>> > gpstracking_device_tracks.alarm_over_speed,
>> > gpstracking_device_tracks.other,
>> > gpstracking_device_tracks.address
>> > FROM gpstracking_device_tracks
>> > WHERE gpstracking_device_tracks.imei = arr[i]::VARCHAR
>> > AND gpstracking_device_tracks.date_time_process >=
>> date_trunc('hour',
>> > now())
>> > AND gpstracking_device_tracks.date_time_process <= NOW()
>> > ORDER BY gpstracking_device_tracks.date_time_process DESC
>> > LIMIT 1;
>> > END LOOP;
>> > RETURN;
>> > END;
>> > $func$
>> > LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
>>
>>
>> Why are you doing this in a loop? What's the point of the LIMIT 1?
>> You can almost certainly refactor this procedure into a vanilla query.
>>
>> merlin
>>
>
>
>
> --
> Carlos Eduardo Sotelo Pinto | http://carlossotelo.com | csotelo(at)twitter
> GNU Linux Admin | PHP Senior Web Developer
> Mobil: RPC (Claro)+51, 958194614 | Mov: +51, 959980794
> GTalk: carlos(dot)sotelo(dot)pinto(at)gmail(dot)com | Skype: csotelop
> MSN: carlos(dot)sotelo(dot)pinto(at)gmail(dot)com | Yahoo: csotelop
> GNULinux RU #379182 | GNULinux RM #277661
> GPG FP:697E FAB8 8E83 1D60 BBFB 2264 9E3D 5761 F855 4F6B
>
From | Date | Subject | |
---|---|---|---|
Next Message | Miguel Beltran R. | 2013-10-04 15:59:46 | Re: Guardado de archivos y funciones |
Previous Message | Luis Felipe Aguilar Pereda | 2013-10-03 21:18:23 | Postgresql studio 1.0 |
From | Date | Subject | |
---|---|---|---|
Next Message | Ladislav Lenart | 2013-10-04 10:59:16 | [Q] Table aliasing |
Previous Message | Michal TOMA | 2013-10-04 08:34:59 | Re: pg_xlog size growing untill it fills the partition |
From | Date | Subject | |
---|---|---|---|
Next Message | Aftab Ahmed Chandio | 2013-10-08 01:48:18 | postgreSQL query via JDBC in different OS taking different running time? |
Previous Message | Samuel Stearns | 2013-10-03 23:05:19 | Re: 57 minute SELECT |