Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1VQgOS-0002yJ-2g for pgsql-es-ayuda@arkaria.postgresql.org; Mon, 30 Sep 2013 16:32:20 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1VQgOR-0002t8-IX for pgsql-es-ayuda@arkaria.postgresql.org; Mon, 30 Sep 2013 16:32:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1VQgOQ-0002t2-RZ for pgsql-es-ayuda@postgresql.org; Mon, 30 Sep 2013 16:32:18 +0000 Received: from hermes.ort.edu.uy ([164.73.96.24]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1VQgOF-0007DJ-Tl for pgsql-es-ayuda@postgresql.org; Mon, 30 Sep 2013 16:32:18 +0000 Received: from hermes.ort.edu.uy (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0F1091380DB for ; Mon, 30 Sep 2013 13:31:36 -0300 (UYT) Received: from archie.ort.edu.uy (unknown [192.168.20.22]) by hermes.ort.edu.uy (Postfix) with ESMTP id CDBFB1380D5 for ; Mon, 30 Sep 2013 13:31:35 -0300 (UYT) Received: from [172.30.10.6] (unknown [172.30.10.6]) by archie.ort.edu.uy (Postfix) with ESMTP id D85F21FA6C for ; Mon, 30 Sep 2013 13:32:02 -0300 (UYT) Message-ID: <5249A762.9080000@ort.edu.uy> Date: Mon, 30 Sep 2013 13:31:30 -0300 From: Rodriguez Fernando User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Thunderbird/24.0 MIME-Version: 1.0 To: pgsql-es-ayuda@postgresql.org Subject: =?UTF-8?B?UmU6IFtwZ3NxbC1lcy1heXVkYV0gUmU6IFtwZ3NxbC1lcy1heXVkYV0=?= =?UTF-8?B?IEZ3ZDogSGVscCBvbiDhuZVlcmZvcm1hbmNl?= References: <20130930161220.GD5235@eldon.alvh.no-ip.org> In-Reply-To: Content-Type: multipart/alternative; boundary="------------000807070409020000040602" X-TM-AS-MML: No X-TM-AS-Product-Ver: IMSVA-8.2.0.1679-7.0.0.1014-20186.000 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSVA-8.2.0.1679-7.0.1014-20186.000 X-TMASE-Result: 10--57.037100-5.000000 X-TMASE-MatchedRID: YmTIeYLGqWmPvrMjLFD6ePdnb3k6X8NVr3IZ1ijHT8CXhrgfj5MYI4UO 1vewB9bJ3RTMFC/fs6fYl9ZwUCuVLUQUhhrAUVRTyvE3upFToNgNRoCGb/UMgSS30GKAkBxWNop HBKhQ7kq438rGDHBskcOFOHoa0LX+7YGIARphfZ5R8KtpZcwmMuXDFW1+iEuzKmpRXdmZJzqwNU nyC8gFlfp2QpDbXv3moBXm9DHOY+vPHtPgT+I1svTpBGut33R9WoS/RG1PAvVCMpDZpHC3IlISY JFa53XU7Z9CVhI2Nd0C5/nJKGzywPvevz+ZPM1uKm9BkptgACkDXoE/acgNkMw9w6MMBJqYVrD/ ANS6nWPvEFSAVsS2JdMVcUaldmGwR1PkZQ1UXU9CiAI1zpVInWv34qCfZeB4WsKKuc6vT6wRcUe SUAEujvAJQWri3tSjlixITeyQDdUFFQHbvy1jz5D4aaRm73hyLW3Jb37N31wt3hGMmsVFWuDlzu x8IcqhOyrxgmfAU2/ANsv+oLyNfZ+QdJZ5NPK0wbRQ2BpmliqZEoWHC6Rh/fIFt7oBqvJi9rZ8t OV7Ibhic/5yraYWDlebGpjHs5mWxldSKOGXaXwZCVRU/aI9zEJ1RkW+/L6QRgR6wSfH0JzVan2x rfbmHTDOHaoUJFaJZ3L4srrNKAszP1+hKLmUcEK9qlwiTElfDea88pmP/P4PvK4rRmOPuYQmENB kUZwTEUW0ebWr3HsdSs4c9bEnA7cQnmXKunr+5BgEdUqqANRpkajQR5gb3pacqsSFIP2Usuf7RW bvUtz7H+hZKy6/K23U7j2vVURrPjKoPgsq7cA= X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-es-ayuda Precedence: bulk Sender: pgsql-es-ayuda-owner@postgresql.org This is a multi-part message in MIME format. --------------000807070409020000040602 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit El 30/09/2013 01:16 p.m., Carlos Eduardo Sotelo Pinto escribió: > Hola Alvaro > > He solucionado parcialmente el problema haciendo una consulta del tipo > > arr := regexp_split_to_array(_imeis, E'\\s+'); > RETURN QUERY > SELECT > gpstracking_device_tracks..... > FROM ( > SELECT > gpstracking_device_tracks...... > 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; > > Y ahora estoy leyendo un poco de tuning, ya que no soy un dba ni menos > un experto en optimización, pero espero pueda mejorar aun más el > rendimiento > > Muchas gracias por la ayuda de todos > > > > > El 30 de septiembre de 2013 11:12, Alvaro > Herrera> > escribió: > > Carlos Eduardo Sotelo Pinto escribió: > > > DECLARE > > arr varchar[]; > > BEGIN > > arr := regexp_split_to_array(_imeis, E'\\s+'); > > FOR i IN 1..array_length(arr, 1) LOOP > > RETURN QUERY > > Creo que deberías hacer una única consulta con todos los elementos del > array, en lugar de una consulta para cada elemento. Es decir, elimina > el LOOP y el LIMIT 1, y tu WHERE debería ser algo como > > ... > > > FROM gpstracking_device_tracks > > WHERE gpstracking_device_tracks.imei = arr[i]::VARCHAR > > WHERE gpstracking_device_tracks.imei = ANY (arr) AND ... > > Vas a tener que solucionar de otra forma el que te retorne sólo > una fila > para cada imei, claro. > > -- > Álvaro Herrera http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Training & Services > > > > > -- > Carlos Eduardo Sotelo Pinto | http://carlossotelo.com | csotelo@twitter > GNU Linux Admin | PHP Senior Web Developer > Mobil: RPC (Claro)+51, 958194614 | Mov: +51, 959980794 > GTalk: carlos.sotelo.pinto@gmail.com > | Skype: csotelop > MSN: carlos.sotelo.pinto@gmail.com > | Yahoo: csotelop > GNULinux RU #379182 | GNULinux RM #277661 > GPG FP:697E FAB8 8E83 1D60 BBFB 2264 9E3D 5761 F855 4F6B que indices tenes en la tabla?, como están armados? la tabla tiene históricos o la depuraras cada cierto tiempo? Saludos Fernando --------------000807070409020000040602 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
El 30/09/2013 01:16 p.m., Carlos Eduardo Sotelo Pinto escribió:
Hola Alvaro

He solucionado parcialmente el problema haciendo una consulta del tipo 

arr := regexp_split_to_array(_imeis, E'\\s+');
RETURN QUERY 
SELECT
gpstracking_device_tracks.....
FROM (
SELECT 
gpstracking_device_tracks......
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;

Y ahora estoy leyendo un poco de tuning, ya que no soy un dba ni menos un experto en optimización, pero espero pueda mejorar aun más el rendimiento

Muchas gracias por la ayuda de todos




El 30 de septiembre de 2013 11:12, Alvaro Herrera<alvherre@2ndquadrant.com> escribió:
Carlos Eduardo Sotelo Pinto escribió:

>     DECLARE
>     arr varchar[];
>     BEGIN
>         arr := regexp_split_to_array(_imeis, E'\\s+');
>     FOR i IN 1..array_length(arr, 1) LOOP
>     RETURN QUERY

Creo que deberías hacer una única consulta con todos los elementos del
array, en lugar de una consulta para cada elemento.  Es decir, elimina
el LOOP y el LIMIT 1, y tu WHERE debería ser algo como

...

>     FROM gpstracking_device_tracks
>     WHERE gpstracking_device_tracks.imei = arr[i]::VARCHAR

WHERE gpstracking_device_tracks.imei = ANY (arr) AND ...

Vas a tener que solucionar de otra forma el que te retorne sólo una fila
para cada imei, claro.

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



--
Carlos Eduardo Sotelo Pinto | http://carlossotelo.com | csotelo@twitter
    GNU Linux Admin | PHP Senior Web Developer
    Mobil: RPC (Claro)+51, 958194614 | Mov: +51, 959980794
    GTalk: carlos.sotelo.pinto@gmail.com | Skype: csotelop
    MSN: carlos.sotelo.pinto@gmail.com | Yahoo: csotelop
    GNULinux RU #379182 | GNULinux RM #277661
GPG FP:697E FAB8 8E83 1D60 BBFB 2264 9E3D 5761 F855 4F6B
que indices tenes en la tabla?, como están armados?
la tabla tiene históricos o la depuraras cada cierto tiempo?


Saludos Fernando
--------------000807070409020000040602--